기술 개요
Backstage는 엔드투엔드 소프트웨어 개발을 단순화하기 위해 Spotify에서 만든 개발자 포털 구축용 오픈소스 프레임워크예요. Spotify가 성장하면서 인프라가 더 파편화되었고, 팀은 사용해야 할 API나 서비스 소유자, 어떤 것이든 문서를 찾을 수 없었어요.
출처: 문서
본문
목적
Backstage는 엔드투엔드 소프트웨어 개발을 단순화하기 위해 Spotify에서 만든 개발자 포털 구축용 오픈소스 프레임워크예요. Spotify가 성장하면서 인프라가 더 파편화되었고, 팀은 사용해야 할 API나 서비스 소유자, 어떤 것이든 문서를 찾을 수 없었어요.
Backstage는 중앙화된 소프트웨어 카탈로그가 구동하며, 모든 인프라와 개발자 도구 위에 놓이는 추상화 계층을 활용해 모든 소프트웨어, 서비스, 도구, 테스트를 한곳에서 관리할 수 있게 해줘요.
Backstage는 플러그인 아키텍처를 사용해, 다양한 사용 가능한 플러그인으로 Backstage 애플리케이션의 기능을 커스터마이즈하거나 직접 작성할 수 있어요. 또한 팀이 새 마이크로서비스를 만드는 데 사용할 수 있는 자동화된 템플릿을 포함해, 일관성과 모범 사례 준수를 보장하는 데 도움이 돼요. Backstage는 또한 모든 소프트웨어에 대한 문서를 만들고, 유지하고, 찾는 기능을 제공해요.
Backstage는 이제 CNCF 인큐베이션 프로젝트예요.
이점
- 엔지니어링 매니저에게는 조직 전반의 표준과 모범 사례를 유지할 수 있게 해 주고, 마이그레이션부터 테스트 인증까지 전체 기술 생태계를 관리하는 데 도움이 돼요.
- 최종 사용자(개발자)에게는 표준화된 방식으로 소프트웨어 구성 요소를 빠르고 간단하게 만들 수 있게 해 주며, 모든 프로젝트와 문서를 관리할 중앙 장소를 제공해요.
- 플랫폼 엔지니어에게는 새 도구와 서비스를 쉽게 통합하고(플러그인을 통해) 기존 것의 기능을 확장하게 해 줌으로써 확장성과 확장 가능성을 활성화해요.
- 모두에게는 모든 인프라 도구링, 리소스, 표준, 소유자, 기여자, 관리자를 한곳에 묶는 단일하고 일관된 경험이에요.
질문이 있거나 지원이 필요하다면 Discord 서버에 참여해 주세요.
핵심 기능
Backstage에는 다음과 같은 핵심 기능 집합이 포함돼요.
- 인증과 신원 - 내장 인증 제공자를 사용한 사용자 로그인·식별, 서드파티 리소스에 대한 접근 위임.
- Kubernetes - 로컬 호스트든 프로덕션이든 서비스의 상태를 개발자가 확인할 수 있게 해 주는 도구.
- 알림 (Notifications) - 플러그인과 외부 서비스가 개별 사용자나 그룹에 메시지를 보낼 수 있는 수단을 제공.
- 권한 (Permissions) - 사용자가 특정 데이터, API, 인터페이스 액션에 대해 받는 접근 유형에 관한 규칙을 시행하는 능력.
- 검색 - Backstage 생태계에서 정보를 검색. 각 검색 결과의 모양과 느낌을 커스터마이즈하고 자체 검색 엔진을 사용할 수 있어요.
- Software Catalog - 서비스, 웹사이트, 라이브러리, ML 모델, 데이터 파이프라인 등 모든 소프트웨어의 메타데이터를 담는 중앙화된 시스템. 소프트웨어 운영에 필요한 물리적·가상 인프라의 메타데이터도 담을 수 있어요. 소프트웨어 카탈로그는 UI를 통해 보고 검색할 수 있어요.
- Software Templates - Backstage 안에서 구성 요소를 만드는 데 도움을 주는 도구. 템플릿은 코드 스켈레톤을 로드하고 변수를 포함한 다음 GitHub 같은 위치에 템플릿을 게시할 수 있어요.
- TechDocs - Backstage에 내장된 docs-like-code 솔루션. 문서는 코드와 함께 있는 Markdown 파일로 작성돼요.
플러그인 아키텍처 개요
플러그인은 Backstage UI에 자신을 마운트하는 클라이언트 측 애플리케이션이에요. 다양한 인프라 및 소프트웨어 개발 도구를 Backstage 애플리케이션에 통합할 수 있게 해줘요. Backstage는 플러그인 아키텍처를 사용해 모든 플러그인에 대해 단일 UI에서 일관된 사용자 경험을 제공해요.
Backstage 아키텍처는 세 가지 유형의 플러그인을 지원해요.
- 독립형 (Standalone) - 완전히 브라우저에서 실행되며 다른 서비스에 API 요청을 하지 않아요.
- 서비스 기반 (Service backed) - Backstage를 운영하는 조직의 생태계 안에 있는 서비스에 API 요청을 해요.
- 서드파티 기반 (Third-party backed) - 서비스 기반과 비슷하지만, 플러그인을 뒷받침하는 서비스가 Backstage를 호스팅하는 회사의 생태계 밖에 호스팅돼요.
Backstage에서 사용 가능한 기능 중 상당수는 플러그인이 제공해요. 예를 들어 Software Catalog는 서비스 기반 플러그인이에요. 카탈로그를 볼 때 Backstage Backend 서비스에서 서비스("엔티티") 집합을 가져와 UI의 테이블로 렌더링해 줘요.
Software Catalog 시스템 모델
소프트웨어 카탈로그 뒤의 시스템 모델은 엔티티를 기반으로 하며 두 가지 주요 유형을 모델링해요.
- Core Entities (핵심 엔티티)
- Organizational Entities (조직 엔티티)
Core Entities는 다음을 포함해요.
Components- 소스 제어에서 추적할 수 있고 다른 구성 요소가 소비할 API를 구현할 수 있는 개별 소프트웨어 조각.APIs- 구성 요소가 구현하며 서로 다른 구성 요소 사이의 경계를 형성. API는 공개, 제한, 비공개일 수 있어요.Resources- 구성 요소를 운영하는 데 필요한 물리적·가상 인프라.
Organizational Entities는 다음을 포함해요.
User- 직원, 계약자 등과 같은 사람.Group- 팀, 사업부 등과 같은 조직 엔티티.
구성 요소, API, 리소스가 많은 카탈로그가 있으면 그것들이 어떻게 함께 작동하는지 이해하기 어려울 수 있어요. 생태계 모델링을 사용하면 많은 양의 핵심 엔티티 카탈로그를 다음으로 정리할 수 있어요.
- Systems - 하나 또는 여러 개의 공개 API를 노출해 기능을 수행하기 위해 협력하는 리소스와 구성 요소의 모음. 구성 요소 사이의 리소스와 비공개 API를 소비자에게 숨겨줘요.
- Domains - 용어, 도메인 모델, 지표, KPI, 사업 목적 또는 문서를 공유하는 시스템의 모음.
시스템 모델의 일부가 될 수 있는 추가 항목이 세 가지 더 있어요.
Location- 카탈로그 데이터를 찾을 다른 장소를 참조하는 마커.Type- 정해진 의미가 없음. 자체 타입을 지정하고 원하는 대로 사용할 수 있어요.Template- 스캐폴딩 위저드의 프론트엔드 부분에서 렌더링되는 파라미터와 해당 구성 요소를 스캐폴딩할 때 실행되는 단계를 모두 설명.
다음 다이어그램은 생태계 모델링의 예를 보여 주며, 도메인, 시스템, 핵심 엔티티, 조직 엔티티 사이의 샘플 관계를 제공해요.
다음은 그룹 조직 엔티티를 만들기 위한 관계를 설정한 후 그룹이 관리하는 모든 구성 요소, API, 리소스를 보는 예를 보여 줘요.