본문 바로가기
WIKI 기술 지식 베이스

백엔드 인스턴스

원문 보기 위키 갱신

이것은 백엔드를 만드는 주요 진입점이에요. 그 자체로는 어떤 기능도 없으며, 단순히 여러 가지를 배선(wiring)하는 역할만 담당해요.

출처: 문서

본문

백엔드 인스턴스

이것은 백엔드를 만드는 주요 진입점이에요. 그 자체로는 어떤 기능도 없으며, 단순히 여러 가지를 배선하는 역할만 담당해요. 배포할 백엔드를 몇 개로 할지는 여러분이 결정해요. 모든 기능을 하나에 넣을 수도 있고, 여러 개의 작은 배포로 나눌 수도 있어요.

아래는 catalog 플러그인만 설치하고 시작하는 간단한 백엔드 예시예요.

import { createBackend } from '@backstage/backend-defaults';import scaffolderPlugin from '@backstage/plugin-scaffolder-backend';// Create your backend instanceconst backend = createBackend();// Install desired featuresbackend.add(import('@backstage/plugin-catalog-backend'));// Features can also be installed using an explicit referencebackend.add(scaffolderPlugin);// Start up the backendbackend.start();

createBackend를 호출해 새 백엔드 인스턴스를 만들며, 이는 앱에 제공하는 모든 기능을 배선하는 역할을 담당해요. 또한 플러그인에서 사용할 모든 핵심 서비스의 기본 구현을 제공해요. 다만 백엔드를 만드는 시점에는 실제 작업이 수행되지 않고, 모든 것이 backend.start() 호출로 지연돼요.

백엔드 인스턴스에 기능을 추가하려면 .add(...) 메서드를 사용해요. 기능은 플러그인, 모듈, 또는 서비스 팩토리 중 하나예요. 플러그인과 모듈 만들기에 대한 자세한 내용은 플러그인 및 모듈 만들기 문서에서, 서비스 팩토리 설치 방법은 백엔드 만들기 문서에서 읽을 수 있어요.

원하는 모든 기능을 추가한 뒤 .start() 메서드를 호출해요. 그러면 백엔드가 시작되고 모든 기능이 초기화돼요. 시작할 때 백엔드는 충돌이 없는지 모든 기능을 검증해요. 예를 들어 순환 의존성이 없는지 확인해요.

내부적으로 createBackend는 어떤 서비스나 기능도 없이 실제로 백엔드 인스턴스를 만드는 역할을 담당하는 @backstage/backend-app-api의 createSpecializedBackend를 호출해요. createBackend를 '번들 포함' 접근 방식으로, createSpecializedBackend를 더 저수준으로 생각할 수 있어요.

앞서 언급했듯 프로젝트에 이러한 백엔드를 여러 개 만들어 백엔드를 분할하고 서로 독립적으로 확장할 수 있는 서로 다른 백엔드를 배포할 수도 있어요. 예를 들어 catalog 플러그인만 활성화한 백엔드와 scaffolder 플러그인만 활성화한 백엔드를 배포하도록 선택할 수 있어요.

백엔드 시작 결과

Backend.start() 메서드는 모든 플러그인과 모듈에 대한 상세한 성공/실패 상태와 타이밍 정보를 담은 BackendStartupResult를 반환해요. 시작이 실패하면 완전한 시작 결과를 포함하는 BackendStartupError가 발생해 어떤 플러그인이나 모듈이 실패했는지 진단하기 쉬워요.

backend.start(  ({ result }) => {    console.log(`Backend startup result: ${JSON.stringify(result, null, 2)}`);  },  error => {    if (error instanceof BackendStartupError) {      console.error(        `Backend startup failed: ${JSON.stringify(error.result, null, 2)}`,      );    } else {      console.error(        `Unexpected error during backend startup: ${error.message}`,      );    }  },);

이 정보는 주로 백엔드에 추가 모니터링이나 디버깅 도구를 추가하고 싶을 때 유용해요. 이 정보는 시작 중 이미 기록되는 내용의 구조화된 표현이에요.

더 알아보기 (Learn more)