확장 프로그램 매니페스트는 확장 프로그램 인스턴스와 관련 구성으로 이루어진 목록입니다. 매니페스트를 사용하여 다음과 같은 작업을 할 수 있습니다.
- 확장 프로그램 구성을 다른 사용자와 공유
- 여러 프로젝트 간에 확장 프로그램 구성 복사(예: 스테이징 프로젝트에서 프로덕션 프로젝트로)
- 모든 확장 프로그램을 한 번에 배포
- Firebase Local Emulator Suite을 사용하여 확장 프로그램이 앱에서 작동하는 방식 테스트
- 소스 제어에 확장 프로그램 구성 커밋
- CI/CD 파이프라인에 확장 프로그램 포함
확장 프로그램 매니페스트는 다음 두 부분으로 구성됩니다.
인스턴스 ID를 확장 프로그램 버전 참조로 매핑하는
firebase.json
의extensions
섹션입니다. 예를 들면 다음과 같습니다.{ "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
프로젝트의 확장 프로그램 구성 내보내기
프로젝트의 현재 확장 프로그램 구성을 매니페스트에 저장하려면 다음과 같이 합니다.
- 아직 Firebase CLI를 설정하지 않았다면 설정합니다.
- 셸 프롬프트에서 프로젝트 디렉터리로 변경합니다. (프로젝트 디렉터리에는
firebase.json
파일이 포함되어 있습니다.) ext:export
명령어를 실행합니다.firebase ext:export
ext:export
명령어는 firebase.json
파일에 extensions
섹션을 추가합니다. 또한 ext:export
명령어는 설치한 각 확장 프로그램 인스턴스에 대한 .env
파일을 포함하는 extensions
디렉터리를 생성합니다. 이러한 파일에는 각 인스턴스의 구성 매개변수가 포함됩니다.
Firebase Local Emulator Suite으로 확장 프로그램 구성 테스트
확장 프로그램 매니페스트에 확장 프로그램 인스턴스를 추가한 후에는 Local Emulator Suite을 사용하여 테스트할 수 있습니다.
-
- 에뮬레이터 도구 모음을 대화형으로 실행하려면
firebase emulators:start
를 실행합니다. - 에뮬레이터 도구 모음을 실행하고 테스트 스크립트를 실행하려면
firebase emulators:exec my-test.sh
를 실행합니다.
- 에뮬레이터 도구 모음을 대화형으로 실행하려면
이제 매니페스트에 확장 프로그램 인스턴스가 나열되면 Local Emulator Suite이 이러한 확장 프로그램의 소스 코드를 ~/.cache/firebase/extensions
에 다운로드합니다. 다운로드가 완료되면 Local Emulator Suite이 시작되어 확장 프로그램의 백그라운드 트리거 함수를 트리거하고, 앱을 에뮬레이터 도구 모음에 연결하여 앱과의 통합을 테스트할 수 있습니다.
프로젝트에 확장 프로그램 구성 배포
확장 프로그램 매니페스트에 확장 프로그램 인스턴스를 추가한 후에는 Firebase CLI를 사용하여 프로젝트에 배포할 수 있습니다. 확장 프로그램 매니페스트로 배포하는 경우 매니페스트에 있는 모든 확장 프로그램 인스턴스를 프로젝트에 한 번에 설치, 업데이트, 구성합니다.
확장 프로그램 매니페스트를 배포하려면 다음 안내를 따르세요.
- 셸 프롬프트에서 저장된 확장 프로그램 구성이 포함된 디렉터리로 변경합니다. 이 디렉터리는
firebase.json
을 포함하고 있습니다.ext:export
를 실행했다면 이미 올바른 디렉터리에 있는 것입니다. 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
에 넣습니다.