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

플러그인 데이터베이스 구성

원문 보기 위키 갱신

플러그인 데이터베이스 구성 (Configuring Plugin Databases)

이 가이드는 Backstage가 즉시 지원하는 다양한 프로덕션 영속성 사용 사례를 다룹니다.

출처: 문서

본문

이 가이드는 Backstage가 즉시 지원하는 다양한 프로덕션 영속성 사용 사례를 다룹니다. 데이터베이스 관리자는 기본 클라이언트 및 연결 구성에 더해 플러그인별로 클라이언트와 데이터베이스 연결 세부 정보를 설정할 수 있게 합니다. 즉 특정 플러그인에는 SQLite 3 인메모리 데이터베이스를 사용하면서 나머지에는 PostgreSQL을 사용하는 식으로 할 수 있습니다.

기본적으로 Backstage는 각 플러그인에 대해 backstage_plugin_<pluginId> 패턴(예: backstage_plugin_auth)을 따르는 데이터베이스를 자동으로 생성합니다. 공유 데이터베이스 인스턴스나 클러스터에서 여러 배포를 실행하는 사용 사례에서는 다른 데이터베이스 이름 접두사를 구성할 수 있습니다.

인프라가 코드 또는 데이터로 정의된 경우(Terraform, AWS CloudFormation 등) 데이터베이스 자격 증명이 새 데이터베이스를 만들 권한이 없거나 데이터베이스 이름을 제어할 수 없을 수 있습니다. 이러한 경우 플러그인별로 데이터베이스 연결 구성을 설정할 수 있습니다.

Backstage는 @backstage/backend-common이 제공하는 DatabaseManager로 이러한 모든 사용 사례를 지원합니다. 이제 Backstage 데이터베이스를 사용하고 구성하는 방법을 다루겠습니다.

전제 조건 (Prerequisites)

의존성 (Dependencies)

backend 패키지에 적절한 데이터베이스 드라이버가 설치되어 있는지 확인하세요. PostgreSQL과 SQLite를 모두 사용하려면 둘 다 설치할 수 있습니다.

PostgreSQL이 필요하면 pg를 설치하세요.

Backstage 루트 디렉터리에서

yarn --cwd packages/backend add pg

클라이언트로 설정하려면 SQLite 3을 설치하세요.

Backstage 루트 디렉터리에서

yarn --cwd packages/backend add better-sqlite3

운영 관점에서 실제로 사용하는 클라이언트의 드라이버만 설치하면 됩니다.

구성 (Configuration)

app-config.yaml (또는 동등한 파일)에 기본 데이터베이스 클라이언트 및 연결 정보를 설정해야 합니다. 기본 클라이언트와 구성은 기본값으로 사용되며, 같은 클라이언트 유형이거나 설정되지 않은 각 플러그인에 대해 확장됩니다. 특정 플러그인에 대해 기본 클라이언트와 일치하지 않는 클라이언트 유형이 지정되면 플러그인에 대해 설정된 구성이 기본 구성을 확장하지 않고 그대로 사용됩니다.

플러그인의 클라이언트 유형과 구성은 backend.database.plugin.<pluginId> 아래에 정의해야 합니다. 예를 들어 catalog는 catalog 플러그인의 pluginId이며 그 블록 아래에 정의된 모든 구성은 그 플러그인에 특정합니다. 이제 아래에서 더 자세한 예시 구성을 살펴보겠습니다.

최소 인메모리 구성 (Minimal In-Memory Configuration)

아래 예시에서는 모든 플러그인에 better-sqlite3 인메모리 데이터베이스를 사용합니다. 이 구성은 테스트나 기타 비내구성 사용 사례에 사용하고 싶을 것입니다.

backend:  database:    client: better-sqlite3    connection: ':memory:'

PostgreSQL

아래 예시는 모든 플러그인의 데이터베이스 클라이언트로 PostgreSQL(pg)을 사용합니다. auth 플러그인은 자동 생성되었을 backstage_plugin_auth 이름 대신 사용자 정의 데이터베이스 이름을 사용합니다.

backend:  database:    client: pg    connection:      host: some.example-pg-instance.tld      user: postgres      password: password      port: 5432    plugin:      auth:        connection:          database: pg_auth_set_by_user

사용자 지정 데이터베이스 이름 접두사 (Custom Database Name Prefix)

아래 구성은 backstage_plugin_ 대신 example_prefix_를 데이터베이스 이름 접두사로 사용합니다. auth와 catalog 같은 플러그인은 각각 example_prefix_auth와 example_prefix_catalog라는 이름의 데이터베이스를 사용합니다.

backend:  database:    client: pg    connection:      host: some.example-pg-instance.tld      user: postgres      password: password      port: 5432    prefix: 'example_prefix_'

플러그인별 연결 구성 (Connection Configuration Per Plugin)

auth와 catalog 모두 다른 자격 증명과 데이터베이스 이름을 가진 연결 구성을 사용합니다. 이러한 유형의 구성은 무작위 생성된 자격 증명 및/또는 데이터베이스 이름을 제공할 수 있는 인프라가 코드 또는 데이터로 정의된 환경에 유용할 수 있습니다.

backend:  database:    client: pg    connection: 'postgresql://some.example-pg-instance.tld:5432'    plugin:      auth:        connection: 'postgresql://fort:***@some.example-pg-instance.tld:5432/unwitting_fox_jumps'      catalog:        connection: 'postgresql://bank:***@some.example-pg-instance.tld:5432/shuffle_ransack_playback'

PostgreSQL 및 SQLite 3 (PostgreSQL and SQLite 3)

아래 예시는 better-sqlite3을 사용하는 auth 플러그인을 제외한 모든 플러그인의 데이터베이스 클라이언트로 PostgreSQL(pg)을 사용합니다. auth 플러그인의 클라이언트 유형이 기본 클라이언트 유형과 다르므로 auth의 연결 구성은 PostgreSQL 기본 구성을 확장하지 않고 그대로 사용됩니다.

backend:  database:    client: pg    connection: 'postgresql://foo:***@some.example-pg-instance.tld:5432'    plugin:      auth:        client: better-sqlite3        connection: ':memory:'

데이터베이스 확인 (Check Your Databases)

DatabaseManager는 데이터베이스가 없으면 생성을 시도합니다. 기본 구성의 자격 증명이 데이터베이스를 만들 권한이 없어 플러그인별 자격 증명을 설정했다면, 서비스를 시작하기 전에 데이터베이스가 존재하는지 확인해야 합니다. 서비스는 데이터베이스를 만들 수 없으며 사용만 할 수 있습니다.

권한 (Privileges)

Backstage가 데이터베이스 존재 여부를 확인하려고 시도하므로, 주어진 사용자에게 데이터베이스를 나열하거나 표시할 권한을 부여해야 할 수 있습니다. PostgreSQL의 경우 다음을 부여합니다.

GRANT SELECT ON pg_database TO some_user;

MySQL:

GRANT SHOW DATABASES ON *.* TO some_user;

이 가이드의 메커니즘은 다양한 데이터베이스 배포 상황을 해결하는 데 도움이 될 것입니다. 행운을 빕니다!

추가 읽기 (Further Reading)

데이터베이스 구성에 대해 더 읽고 싶다면 유용한 링크가 몇 가지 있습니다.

  • Manual Knex Rollback
  • 우리가 사용하는 데이터베이스 래퍼인 Knex에 대해 더 알아보세요.
  • 데이터베이스 쿼리에 유용한 도구인 pgAdmin 4를 설치하세요.

더 알아보기 (Learn more)