안녕하세요! 오늘은 Backstage의 핵심 개념 중 하나인 "컴포넌트(Component)"가 두 가지 다른 맥락에서 어떻게 사용되는지에 대해 자세히 알아보겠습니다. 🚀
Backstage를 처음 접하시는 분들이 가장 헷갈려 하는 부분 중 하나인데요, 이 두 가지 '컴포넌트'의 의미를 명확히 이해하면 Backstage 아키텍처와 실제 활용 방안을 훨씬 더 깊이 있게 파악할 수 있습니다. 오늘 이 글을 통해 그 혼란을 완전히 해소해 드리겠습니다! 💡

🏗️ Backstage에서 '컴포넌트'의 두 가지 의미
Backstage에서 "컴포넌트"라는 용어는 크게 두 가지 맥락에서 사용됩니다. 하나는 소프트웨어 카탈로그 엔티티로서의 kind: Component이고, 다른 하나는 프론트엔드 UI를 구성하는 React 컴포넌트입니다. 이 두 가지를 정확히 구분하는 것이 중요합니다.
1. kind: Component (소프트웨어 카탈로그 엔티티) 🧩
첫 번째 의미는 Backstage의 소프트웨어 카탈로그(Software Catalog) 모델에서 가장 기본이 되는 엔티티 타입입니다. 여러분의 서비스, 라이브러리, 웹사이트 등 실제 코드로 구현된 소프트웨어 단위를 나타냅니다.
✅ 주요 특징
- 정의: catalog-info.yaml 파일 내 kind: Component로 정의됩니다.
- 역할:
- 코드 단위: 특정 비즈니스 로직을 수행하는 마이크로서비스, 웹 애플리케이션, 라이브러리, 모바일 앱 등을 표현합니다.
- 소유권: 누가 이 서비스를 담당하는지 (owner), 어떤 시스템에 속하는지 (system) 등의 메타데이터를 포함합니다.
- 가시성: Backstage UI에서 해당 컴포넌트의 TechDocs, CI/CD 상태, 경고, 대시보드 등을 한눈에 볼 수 있도록 연결하는 중심점 역할을 합니다.
- 예시:
- payment-service (마이크로서비스)
- user-dashboard-frontend (프론트엔드 웹 앱)
- shared-logging-library (재사용 가능한 라이브러리)
📊 kind: Component YAML 예시
YAML
apiVersion: backstage.io/v1alpha1
kind: Component # 👈 여기가 첫 번째 'Component'의 의미입니다.
metadata:
name: order-processing-service
description: 고객의 주문을 처리하고 결제 시스템과 연동하는 백엔드 서비스
annotations:
github.com/project-slug: example-org/order-service
spec:
type: service # 컴포넌트의 타입 (service, website, library 등)
lifecycle: production
owner: team-nova # 이 서비스를 담당하는 팀
system: e-commerce-platform # 이 서비스가 속한 시스템
여기서 kind: Component는 "주문 처리 서비스"라는 실제 소프트웨어 코드 덩어리를 의미합니다.
2. 프론트엔드 React 컴포넌트 (UI 구성 요소) 🎨
두 번째 의미는 Backstage 프론트엔드의 사용자 인터페이스(UI)를 구성하는 빌딩 블록으로서의 "React 컴포넌트"입니다. ReactJS 프레임워크의 일반적인 용례와 동일합니다.
✅ 주요 특징
- 정의: TypeScript/JavaScript로 작성된 React 코드 파일(tsx, jsx)입니다.
- 역할:
- UI 렌더링: 화면에 특정 기능을 표시하거나 사용자 입력을 처리하는 UI 요소를 담당합니다.
- 재사용성: 버튼, 카드, 테이블, 차트, 특정 엔티티의 상세 정보 패널 등 다양한 UI 구성 요소를 재사용 가능한 단위로 만듭니다.
- 플러그인 개발: Backstage 플러그인을 개발할 때, 여러분이 만드는 모든 UI는 React 컴포넌트들의 조합으로 이루어집니다.
- 예시:
- (엔티티 상세 페이지 전체를 렌더링하는 컴포넌트)
- (TechDocs 문서를 표시하는 카드 컴포넌트)
- (비용 분석 대시보드를 표시하는 컴포넌트)
🖥️ React 컴포넌트 코드 예시
TypeScript
// packages/app/src/components/catalog/EntityPage.tsx (Backstage 앱의 일부)
import React from 'react';
import { EntityPageLayout } from '@backstage/plugin-catalog';
import {
EntityAboutCard,
EntityLinksCard,
EntityCatalogGraphCard,
} from '@backstage/plugin-catalog';
// ... 그 외 여러 React 컴포넌트들을 import 합니다.
export const customEntityPage = (
<EntityPageLayout>
<EntityPageLayout.Content>
{/* 👈 여기서 EntityAboutCard는 React 컴포넌트입니다. */}
<EntityAboutCard variant="gridItem" />
<EntityLinksCard variant="gridItem" />
<EntityCatalogGraphCard variant="gridItem" />
</EntityPageLayout.Content>
{/* ... 다른 탭과 컴포넌트들 ... */}
</EntityPageLayout>
);
위 코드에서 EntityPageLayout, EntityAboutCard 등은 모두 React 컴포넌트이며, Backstage UI를 구성하는 시각적인 요소들입니다.
🎯 두 가지 '컴포넌트' 의미를 바르게 연결하기
자, 이제 이 두 가지 '컴포넌트'의 의미가 어떻게 서로 연결되는지 이해하는 것이 중요합니다.
- kind: Component (소프트웨어 엔티티)는 Backstage 카탈로그에 등록된 실제 소프트웨어입니다.
- React 컴포넌트 (UI 구성 요소)는 그 kind: Component 엔티티의 정보를 Backstage UI에 가져와서 시각적으로 보여주는 역할을 합니다.
예를 들어, "order-processing-service"라는 kind: Component 엔티티가 카탈로그에 등록되면, Backstage 프론트엔드의 React 컴포넌트와 그 안에 포함된 , 등의 React 컴포넌트들이 이 엔티티의 메타데이터를 읽어와서 화면에 멋지게 렌더링해주는 것입니다. ✨
🏁 결론: 맥락으로 구분하는 '컴포넌트'
Backstage에서 "컴포넌트"라는 용어는 맥락에 따라 다음과 같이 두 가지 의미를 갖습니다.
- 소프트웨어 카탈로그의 kind: Component: 여러분의 애플리케이션, 서비스, 라이브러리 등 실제 소프트웨어 코드 단위를 나타내는 엔티티입니다.
- 프론트엔드 React 컴포넌트: Backstage UI를 만들고 엔티티 정보를 시각적으로 표현하는 UI 구성 요소입니다.
이 두 가지 의미를 정확히 구분하고 이해한다면, Backstage의 아키텍처를 훨씬 명확하게 파악하고, 여러분의 조직에 맞는 카탈로그를 효과적으로 구축하며, 필요하다면 직접 플러그인을 개발하는 데 큰 도움이 될 것입니다! 🚀
'클라우드 > Backstage' 카테고리의 다른 글
| 🏠 Backstage 프로젝트 구조 파헤치기: 브라우저용 웹 앱은 어디에 있을까? (0) | 2025.12.26 |
|---|---|
| Backstage 도입의 첫 단추: create-app vs Fork, 당신의 선택은? (0) | 2025.12.26 |
| Backstage 확장하기: 커스텀 애노테이션 정의와 예약어 충돌 방지 전략 (0) | 2025.12.26 |
| Backstage 엔티티의 정체성, kind 필드 완벽 이해하기 (Component부터 Resource까지) (0) | 2025.12.26 |
| Backstage 모델 탐구: API 엔티티가 단순한 문서를 넘어 '계약'이 되는 이유 (0) | 2025.12.26 |