확장 매니페스트로 프로젝트 구성 관리

확장 프로그램 매니페스트는 확장 프로그램 인스턴스와 관련 구성으로 이루어진 목록입니다. 매니페스트를 사용하여 다음과 같은 작업을 할 수 있습니다.

  • 확장 프로그램 구성을 다른 사용자와 공유
  • 여러 프로젝트 간에 확장 프로그램 구성 복사(예: 스테이징 프로젝트에서 프로덕션 프로젝트로)
  • 모든 확장 프로그램을 한 번에 배포
  • Firebase Local Emulator Suite을 사용하여 확장 프로그램이 앱에서 작동하는 방식 테스트
  • 소스 제어에 확장 프로그램 구성 커밋
  • CI/CD 파이프라인에 확장 프로그램 포함

확장 프로그램 매니페스트는 다음 두 부분으로 구성됩니다.

  • 인스턴스 ID를 확장 프로그램 버전 참조로 매핑하는 firebase.jsonextensions 섹션입니다. 예를 들면 다음과 같습니다.

    {
     "extensions": {
       "my-bigquery-extension": "firebase/firestore-bigquery-export@^0.1.18",
       "my-image-resizer": "firebase/storage-resize-images@^0.1.22",
     }
    }
    
  • 각 확장 프로그램 인스턴스의 구성이 포함된 .env 파일로, Firebase 프로젝트 디렉터리의 extensions/ 하위 디렉터리에 있습니다. 예를 들어 storage-resize-images의 인스턴스에는 다음과 같은 .env 파일이 있을 수 있습니다.

    IMAGE_TYPE=jpeg
    LOCATION=us-central1
    IMG_BUCKET=${param:PROJECT_ID}.appspot.com
    IMG_SIZES=100x100
    DELETE_ORIGINAL_FILE=false

확장 프로그램 매니페스트 만들기

확장 프로그램 매니페스트를 빌드하는 방법에는 세 가지가 있습니다.

  • Firebase CLI로 확장 프로그램 매니페스트 관리
  • 프로젝트의 확장 프로그램 구성 내보내기
  • 수동으로 매니페스트 파일 수정

처음 두 가지 방법은 아래에 설명되어 있습니다.

Firebase CLI로 확장 프로그램 매니페스트 관리

--local 옵션과 함께 Firebase CLI의 ext: 명령어를 대부분 실행하여 프로젝트의 현재 구성을 실제로 변경하지 않고 확장 프로그램 매니페스트를 업데이트할 수 있습니다.

예를 들면 다음과 같습니다.

firebase ext:install --local firebase/firestore-bigquery-export

위의 명령어를 실행하면 firebase/firestore-bigquery-export 확장 프로그램의 최신 버전을 구성하고 구성을 매니페스트에 저장하라는 메시지가 표시되지만 이 구성이 프로젝트에 배포되지는 않습니다.

확장 프로그램 매니페스트를 수정하는 명령어의 몇 가지 추가 예는 다음과 같습니다.

# ext:configure changes the params for an extension instance in your extensions manifest
$ firebase ext:configure my-bigquery-extension --local

# ext:update --local updates an instance in your extensions manifest
# to the latest version of that extension
$ firebase ext:update my-bigquery-extension --local

# You can also specify a version if you don't want to update to the latest version
$ firebase ext:update my-bigquery-extension firebase/firestore-bigquery-export@0.1.10 --local 

# ext:uninstall --local removes an instance from your extensions manifest
$ firebase ext:uninstall my-bigquery-extension --local

프로젝트의 확장 프로그램 구성 내보내기

프로젝트의 현재 확장 프로그램 구성을 매니페스트에 저장하려면 다음과 같이 합니다.

  1. 아직 Firebase CLI를 설정하지 않았다면 설정합니다.
  2. 셸 프롬프트에서 프로젝트 디렉터리로 변경합니다. (프로젝트 디렉터리에는 firebase.json 파일이 포함되어 있습니다.)
  3. ext:export 명령어를 실행합니다.
    firebase ext:export

ext:export 명령어는 firebase.json 파일에 extensions 섹션을 추가합니다. 또한 ext:export 명령어는 설치한 각 확장 프로그램 인스턴스에 대한 .env 파일을 포함하는 extensions 디렉터리를 생성합니다. 이러한 파일에는 각 인스턴스의 구성 매개변수가 포함됩니다.

Firebase Local Emulator Suite으로 확장 프로그램 구성 테스트

확장 프로그램 매니페스트에 확장 프로그램 인스턴스를 추가한 후에는 Local Emulator Suite을 사용하여 테스트할 수 있습니다.

  1. Local Emulator Suite을 설치하고 구성합니다.

  2. Local Emulator Suite 시작하기:

    • 에뮬레이터 도구 모음을 대화형으로 실행하려면 firebase emulators:start를 실행합니다.
    • 에뮬레이터 도구 모음을 실행하고 테스트 스크립트를 실행하려면 firebase emulators:exec my-test.sh를 실행합니다.

이제 매니페스트에 확장 프로그램 인스턴스가 나열되면 Local Emulator Suite이 이러한 확장 프로그램의 소스 코드를 ~/.cache/firebase/extensions에 다운로드합니다. 다운로드가 완료되면 Local Emulator Suite이 시작되어 확장 프로그램의 백그라운드 트리거 함수를 트리거하고, 앱을 에뮬레이터 도구 모음에 연결하여 앱과의 통합을 테스트할 수 있습니다.

프로젝트에 확장 프로그램 구성 배포

확장 프로그램 매니페스트에 확장 프로그램 인스턴스를 추가한 후에는 Firebase CLI를 사용하여 프로젝트에 배포할 수 있습니다. 확장 프로그램 매니페스트로 배포하는 경우 매니페스트에 있는 모든 확장 프로그램 인스턴스를 프로젝트에 한 번에 설치, 업데이트, 구성합니다.

확장 프로그램 매니페스트를 배포하려면 다음 안내를 따르세요.

  1. 셸 프롬프트에서 저장된 확장 프로그램 구성이 포함된 디렉터리로 변경합니다. 이 디렉터리는 firebase.json을 포함하고 있습니다. ext:export를 실행했다면 이미 올바른 디렉터리에 있는 것입니다.
  2. deploy 명령어를 실행합니다. 확장 프로그램을 현재 프로젝트가 아닌 다른 프로젝트에 배포하려면 --project=도 지정합니다.
    firebase deploy --only extensions –-project=YOUR_PROJECT_ID

deploy 명령어는 각 인스턴스 구성의 유효성을 검사하고 대상 프로젝트에서 firebase.json에 나열되지 않는 확장 프로그램 인스턴스를 삭제할 것인지 확인한 다음 모든 확장 프로그램 인스턴스를 배포합니다.

프로젝트별 확장 프로그램 구성

저장된 확장 프로그램 구성을 사용하여 스테이징 프로젝트, 프로덕션 프로젝트 등 각기 다른 여러 프로젝트에 배포할 수 있습니다. 이 작업을 수행할 때 몇 가지 매개변수 값을 프로젝트별로 다르게 설정해야 할 수 있습니다. 프로젝트별 .env 파일을 사용하면 이러한 설정이 가능합니다.

  • extensions/EXTENSION_INSTANCE_ID.env.YOUR_PROJECT_ID에 프로젝트 간에 다른 매개변수 값을 넣습니다.
  • extensions/EXTENSION_INSTANCE_ID.env에 공유 매개변수 값을 넣습니다.

확장 프로그램을 에뮬레이션할 때 다른 매개변수 값을 사용해야 하는 경우도 있습니다. 예를 들어 프로덕션 키 대신 테스트 API 키를 제공할 수 있습니다. 이러한 매개변수는 .local 파일에 넣습니다.

  • 에뮬레이션 중에 사용할 보안 비밀이 아닌 매개변수를 extensions/EXTENSION_INSTANCE_ID.env.local에 넣습니다.
  • 보안 비밀 매개변수 값은 extensions/EXTENSION_INSTANCE_ID.secret.local에 넣습니다.