ADR005: 카탈로그 핵심 엔티티
Backstage 카탈로그에서 추적할 핵심 엔티티 몇 가지를 표준화하고자 합니다.
출처: 문서
본문
맥락
Backstage 카탈로그에서 추적할 핵심 엔티티 몇 가지를 표준화하고자 합니다. 이렇게 하면 그 주위에 특정 플러그인을 만들 수 있습니다.
결정
Backstage는 궁극적으로 다음 핵심 엔티티를 지원해야 합니다.
-
Components(구성 요소)는 개별 소프트웨어 조각입니다.
-
APIs는 서로 다른 구성 요소 사이의 경계입니다.
-
Resources(리소스)는 구성 요소를 운영하는 데 필요한 물리적 또는 가상 인프라입니다.
지금은 우선 Backstage 카탈로그에서 Component 엔티티에 대한 지원만 구현하는 것으로 시작합니다. 이는 나중에 APIs, Resources 그리고 그 외 잠재적으로 유용한 엔티티로 확장될 수 있습니다.
Component
구성 요소는 소프트웨어 조각입니다. 예를 들어 모바일 애플리케이션 기능, 웹 사이트, 백엔드 서비스 또는 데이터 파이프라인입니다(목록은 완전하지 않습니다). 구성 요소는 소스 제어에서 추적되거나, 기존 오픈 소스 또는 상용 소프트웨어를 사용할 수 있습니다. 구성 요소는 다른 구성 요소가 소비할 APIs를 구현할 수 있으며, 반대로 다른 구성 요소가 구현한 APIs 또는 런타임에 구성 요소에 부착된 리소스에 의존할 수 있습니다.
Component 엔티티는 일반적으로 구성 요소의 코드 옆 YAML 디스크립터 파일에 정의되며, 다음과 같을 수 있습니다(실제 스키마는 진화할 것입니다).
apiVersion: backstage.io/v1alpha1kind: Componentmetadata: name: my-component-namespec: type: service
API
APIs는 큰 소프트웨어 생태계가 확장될 수 있게 해주는 추상화를 형성합니다. 따라서 APIs는 Backstage 모델에서 일급 시민이며, 생태계의 기존 기능을 발견하는 주요 방법입니다.
APIs는 구성 요소에 의해 구현되며 그 경계를 명시적으로 만듭니다. APIs는 RPC IDL(예: Protobuf, GraphQL 등), 데이터 스키마(예: Avro, TFRecord 등), 또는 코드 인터페이스(예: Swift, Kotlin, Java, C++, TypeScript 등의 프레임워크 API)로 정의될 수 있습니다. 어쨌든 구성 요소가 노출하는 APIs는 알려진 기계 판독 가능 형식이어야 하며, 그래야 그 위에 더 많은 도구와 분석을 구축할 수 있습니다.
APIs는 일반적으로 소스 제어의 기존 정의에서 인덱싱되므로 자체 디스크립터 파일이 필요하지 않지만, 카탈로그에는 다음과 비슷하게 저장됩니다(실제 스키마는 진화할 것입니다).
apiVersion: backstage.io/v1alpha1kind: APImetadata: name: my-component-apispec: type: grpc definition: > service HelloService { rpc SayHello (HelloRequest) returns (HelloResponse); } message HelloRequest { string greeting = 1; } message HelloResponse { string reply = 1; }
Resource
리소스는 소프트웨어가 런타임에 운영하는 데 필요한 인프라입니다. 예를 들어 Bigtable 데이터베이스, Pub/Sub 토픽, S3 버킷 또는 CDN입니다. 구성 요소 및 APIs와 함께 모델링하면 Backstage에서 이를 시각화하고 그 주위에 도구를 만들 수 있습니다.
리소스는 일반적으로 선언적 정의(예: Terraform, GCP Config Connector, AWS Cloud Formation) 및/또는 클라우드 공급자의 인벤토리(예: GCP Asset Inventory)에서 인덱싱되므로 자체 디스크립터 파일이 필요하지 않지만, 카탈로그에는 다음과 비슷하게 저장됩니다(실제 스키마는 진화할 것입니다).
apiVersion: backstage.io/v1alpha1kind: Resourcemetadata: name: my-component-dbspec: type: gcp-spanner url: spanner.googleapis.com/projects/prj/instances/my-component-db/databases/my-db
결과
Backstage 카탈로그에서 Component 엔티티에 대한 지원을 계속 다듬어 나갈 것입니다.