Firebase Summit에서 발표된 모든 내용을 살펴보고 Firebase로 앱을 빠르게 개발하고 안심하고 앱을 실행하는 방법을 알아보세요. 자세히 알아보기

Local Emulator Suite 설치, 구성 및 통합

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

Firebase 로컬 에뮬레이터 제품군은 일회성 프로토타입 세션부터 프로덕션 규모의 지속적 통합 워크플로에 이르기까지 다양한 프로토타입 및 테스트 환경에 맞게 설치 및 구성할 수 있습니다.

로컬 에뮬레이터 제품군 설치

에뮬레이터 제품군을 설치하기 전에 다음이 필요합니다.

에뮬레이터 제품군을 설치하려면:

  1. Firebase CLI 를 설치합니다. Firebase CLI가 아직 설치되어 있지 않다면 지금 설치하세요 . Emulator Suite를 사용하려면 CLI 버전 8.14.0 이상이 필요합니다. 다음 명령을 사용하여 설치한 버전을 확인할 수 있습니다.
    firebase --version
  2. 아직 초기화하지 않았다면 현재 작업 디렉토리를 Firebase 프로젝트로 초기화하고 화면의 지시에 따라 사용할 제품을 지정합니다.
    firebase init
  3. 에뮬레이터 제품군을 설정합니다. 이 명령은 관심 있는 에뮬레이터를 선택하고, 해당 에뮬레이터 바이너리 파일을 다운로드하고, 기본값이 적절하지 않은 경우 에뮬레이터 포트를 설정할 수 있는 구성 마법사를 시작합니다.
    firebase init emulators

에뮬레이터가 설치되면 Firebase CLI 버전을 업데이트할 때까지 업데이트 확인이 수행되지 않으며 추가 자동 다운로드도 발생하지 않습니다.

에뮬레이터 제품군 구성

선택적으로 firebase.json 파일의 보안 규칙 정의에 대한 에뮬레이터의 네트워크 포트 및 경로를 구성할 수 있습니다.

  • firebase init emulators 를 실행하거나 firebase.json 을 수동으로 수정하여 에뮬레이터 포트를 변경합니다.
  • firebase.json 을 수동으로 수정하여 보안 규칙 정의의 경로를 변경합니다.

이러한 설정을 구성하지 않으면 에뮬레이터는 기본 포트에서 수신 대기하고 Cloud Firestore, 실시간 데이터베이스 및 Firebase용 Cloud Storage 에뮬레이터는 개방형 데이터 보안으로 실행됩니다.

명령 설명
초기화 에뮬레이터 에뮬레이터 초기화 마법사를 시작합니다. 설치할 에뮬레이터를 식별하고 선택적으로 에뮬레이터 포트 설정을 지정합니다. init emulators 는 비파괴적입니다. 기본값을 수락하면 현재 에뮬레이터 구성이 유지됩니다.

포트 구성

각 에뮬레이터는 선호하는 기본값을 사용하여 컴퓨터의 다른 포트에 바인딩합니다.

에뮬레이터 기본 포트
입증 9099
에뮬레이터 제품군 UI 4000
클라우드 함수 5001
이벤트아크 9299
실시간 데이터베이스 9000
클라우드 파이어스토어 8080
Firebase용 클라우드 스토리지 9199
Firebase 호스팅 5000
게시/구독 8085

프로젝트 ID 구성

에뮬레이터를 호출하는 방법에 따라 다른 Firebase 프로젝트 ID를 사용하여 에뮬레이터의 여러 인스턴스를 실행하거나 지정된 프로젝트 ID에 대해 여러 에뮬레이터 인스턴스를 실행할 수 있습니다. 이러한 경우 에뮬레이터 인스턴스는 별도의 환경에서 실행됩니다.

일반적으로 모든 에뮬레이터 호출에 대해 하나의 프로젝트 ID를 설정하는 것이 좋습니다. 그러면 Emulator Suite UI, 다른 제품 에뮬레이터 및 특정 에뮬레이터의 실행 중인 모든 인스턴스가 모든 경우에 올바르게 통신할 수 있습니다.

로컬 에뮬레이터 제품군은 환경에서 여러 프로젝트 ID를 감지하면 경고를 표시하지만 firebase.json 에서 singleProjectMode 키를 false 로 설정하여 이 동작을 재정의할 수 있습니다.

다음에서 불일치에 대한 프로젝트 ID 선언을 확인할 수 있습니다.

  • 명령줄의 기본 프로젝트입니다. 기본적으로 프로젝트 ID는 시작 시 firebase init 또는 firebase use 로 선택한 프로젝트에서 가져옵니다. 프로젝트 목록을 보려면(그리고 어떤 것이 선택되었는지 확인하려면) firebase projects:list 를 사용하세요.
  • 규칙 단위 테스트. 프로젝트 ID는 종종 Rules Unit Testing 라이브러리 메소드 initializeTestEnvironment 또는 initializeTestApp 호출에 지정됩니다.
  • 명령줄 --project 플래그. Firebase CLI --project 플래그를 전달하면 기본 프로젝트가 재정의됩니다. 단위 테스트 및 앱 초기화에서 플래그 값이 프로젝트 ID와 일치하는지 확인해야 합니다.

또한 Apple 플랫폼 , Android 프로젝트를 구성하는 동안 설정한 플랫폼별 프로젝트 ID 구성을 확인하십시오.

보안 규칙 구성

에뮬레이터는 firebase.jsondatabase , firestorestorage 구성 키에서 보안 규칙 구성을 가져옵니다.

{
  // Existing firebase configuration ...
  "database": {
    "rules": "database.rules.json"
  },
  "firestore": {
    "rules": "firestore.rules"
  },
  "storage": {
    "rules": "storage.rules"
  }

  // ...

  // Optional emulator configuration. Default
  // values are used if absent.
  "emulators": {
    "singleProjectMode": false, // do not warn on detection of multiple project IDs
    "firestore": {
      "port": "8080"
    },
    "ui": {
      "enabled": true,      // Default is `true`
      "port": 4000          // If unspecified, see CLI log for selected port
    },
    "auth": {
      "port": "9099"
    },
    "pubsub": {
      "port": "8085"
    }
  }
}

Java 옵션 지정

실시간 데이터베이스 에뮬레이터, Cloud Firestore 에뮬레이터 및 Firebase용 Cloud Storage 에뮬레이터의 일부는 환경 변수 JAVA_TOOL_OPTIONS 를 통해 JVM 플래그로 맞춤설정할 수 있는 Java를 기반으로 합니다.

예를 들어 Java 힙 공간 관련 오류가 발생하면 최대 Java 힙 크기를 4GB로 늘릴 수 있습니다.

export JAVA_TOOL_OPTIONS="-Xmx4g"
firebase emulators:start

JAVA_TOOL_OPTIONS="-Xms2g -Xmx4g" 와 같이 공백으로 구분된 따옴표로 여러 플래그를 지정할 수 있습니다. 플래그는 에뮬레이터의 Java 기반 구성 요소에만 영향을 미치고 Emulator Suite UI와 같은 Firebase CLI의 다른 부분에는 영향을 미치지 않습니다.

에뮬레이터 시작

에뮬레이터를 시작하여 수동으로 종료할 때까지 실행하거나 지정된 테스트 스크립트 기간 동안 실행한 다음 자동으로 종료할 수 있습니다.

명령 설명
에뮬레이터:시작 firebase.json 에 구성된 firebase.json 제품용 에뮬레이터를 시작합니다. 에뮬레이터 프로세스는 명시적으로 중지될 때까지 계속 실행됩니다. emulators:start 를 호출하면 에뮬레이터가 아직 설치되지 않은 경우 ~/.cache/firebase/emulators/에 다운로드됩니다.
깃발 설명
--only 선택 과목. 시작하는 에뮬레이터를 제한합니다. 'auth', 'database', 'firestore', 'functions', 'hosting' 또는 'pubsub' 중 하나 이상을 지정하여 쉼표로 구분된 에뮬레이터 이름 목록을 제공하십시오.
--inspect-functions debug_port 선택 과목. Cloud Functions 에뮬레이터와 함께 사용하여 지정된 포트(또는 인수가 생략된 경우 기본 포트 9229)에서 함수의 중단점 디버깅을 사용 설정합니다. 이 플래그가 제공되면 Cloud Functions 에뮬레이터는 함수가 단일 프로세스에서 순차적(FIFO) 순서로 실행되는 특수 직렬 실행 모드로 전환됩니다. 이것은 동작이 클라우드에서 기능의 다중 프로세스, 병렬 실행과 다르지만 기능 디버깅을 단순화합니다.
--export-on-exit= 선택 과목. 인증, Cloud Firestore, 실시간 데이터베이스 또는 Firebase용 Cloud Storage 에뮬레이터와 함께 사용합니다. emulators:export 명령에 설명된 대로 종료가 발생하면 에뮬레이터에 데이터를 디렉토리로 내보내도록 지시합니다. 내보내기 디렉토리는 firebase emulators:start --export-on-exit=./saved-data 플래그로 지정할 수 있습니다. --import 를 사용하는 경우 내보내기 경로는 기본적으로 동일합니다. 예: firebase emulators:start --import=./data-path --export-on-exit . 마지막으로 원하는 경우 --import--export-on-exit 플래그에 다른 디렉토리 경로를 전달합니다.
--import= 가져오기_ import_directory 선택 과목. 인증, Cloud Firestore, 실시간 데이터베이스 또는 Firebase용 Cloud Storage 에뮬레이터와 함께 사용합니다. --export-on-exit 시작 옵션 또는 emulators:export 명령을 사용하여 저장된 데이터를 실행 중인 인증, Cloud Firestore, 실시간 데이터베이스 또는 Firebase용 Cloud Storage 에뮬레이터 인스턴스로 가져옵니다. 현재 에뮬레이터 메모리에 있는 모든 데이터는 덮어쓰여집니다.
에뮬레이터:exec scriptpath firebase.json 에 구성된 firebase.json 제품용 에뮬레이터를 시작한 후 scriptpath 에서 스크립트를 실행합니다. 스크립트 실행이 완료되면 에뮬레이터 프로세스가 자동으로 중지됩니다.
깃발 설명
--only 선택 과목. 시작하는 에뮬레이터를 제한합니다. 'firestore', 'database', 'functions', 'hosting' 또는 'pubsub' 중 하나 이상을 지정하여 쉼표로 구분된 에뮬레이터 이름 목록을 제공합니다.
--inspect-functions debug_port 선택 과목. Cloud Functions 에뮬레이터와 함께 사용하여 지정된 포트(또는 인수가 생략된 경우 기본 포트 9229)에서 함수의 중단점 디버깅을 사용 설정합니다. 이 플래그가 제공되면 Cloud Functions 에뮬레이터는 함수가 단일 프로세스에서 순차적(FIFO) 순서로 실행되는 특수 직렬 실행 모드로 전환됩니다. 이것은 동작이 클라우드에서 기능의 다중 프로세스, 병렬 실행과 다르지만 기능 디버깅을 단순화합니다.
--export-on-exit= 선택 과목. 인증, Cloud Firestore, 실시간 데이터베이스 또는 Firebase용 Cloud Storage 에뮬레이터와 함께 사용합니다. emulators:export 명령에 설명된 대로 종료가 발생하면 에뮬레이터에 데이터를 디렉토리로 내보내도록 지시합니다. 내보내기 디렉토리는 firebase emulators:start --export-on-exit=./saved-data 플래그로 지정할 수 있습니다. --import 를 사용하는 경우 내보내기 경로는 기본적으로 동일합니다. 예: firebase emulators:start --import=./data-path --export-on-exit . 마지막으로 원하는 경우 --import--export-on-exit 플래그에 다른 디렉토리 경로를 전달합니다.
--import= 가져오기_ import_directory 선택 과목. 인증, Cloud Firestore, 실시간 데이터베이스 또는 Firebase용 Cloud Storage 에뮬레이터와 함께 사용합니다. --export-on-exit 시작 옵션 또는 emulators:export 명령을 사용하여 저장된 데이터를 실행 중인 인증, Cloud Firestore, 실시간 데이터베이스 또는 Firebase용 Cloud Storage 에뮬레이터 인스턴스로 가져옵니다. 현재 에뮬레이터 메모리에 있는 모든 데이터를 덮어씁니다.
--ui 선택 과목. 실행 중에 에뮬레이터 UI를 실행합니다.

firebase emulators:exec 방법은 일반적으로 지속적인 통합 워크플로에 더 적합합니다.

에뮬레이터 데이터 내보내기 및 가져오기

인증, Cloud Firestore, 실시간 데이터베이스 및 Firebase용 Cloud Storage 에뮬레이터에서 데이터를 내보내 공유 가능한 공통 기준 데이터 세트로 사용할 수 있습니다. 이러한 데이터 세트는 위에서 설명한 대로 --import 플래그를 사용하여 가져올 수 있습니다.

에뮬레이터: export_directory 내보내기

인증, Cloud Firestore, 실시간 데이터베이스 또는 Firebase용 Cloud Storage 에뮬레이터 . 실행 중인 Cloud Firestore, 실시간 데이터베이스 또는 Firebase용 Cloud Storage 에뮬레이터 인스턴스에서 데이터를 내보냅니다. 지정된 export_directory 가 아직 없는 경우 생성됩니다. 지정된 디렉토리가 있는 경우 이전 내보내기 데이터를 덮어써야 하는지 확인하는 메시지가 표시됩니다. --force 플래그를 사용하여 이 프롬프트를 건너뛸 수 있습니다. 내보내기 디렉토리에는 데이터 매니페스트 파일인 firebase-export-metadata.json 포함되어 있습니다.

위에서 설명한 --export-on-exit 플래그를 사용하여 에뮬레이터가 종료될 때 자동으로 데이터를 내보내도록 지시할 수 있습니다.

CI 시스템과 통합

컨테이너화된 에뮬레이터 제품군 이미지 실행

일반적인 CI 설정에서 컨테이너가 있는 Emulator Suite의 설치 및 구성은 간단합니다.

주의해야 할 몇 가지 문제가 있습니다.

  • JAR 파일은 ~/.cache/firebase/emulators/ 에 설치 및 캐시됩니다.

    • 반복되는 다운로드를 피하기 위해 이 경로를 CI 캐시 구성에 추가할 수 있습니다.
  • 저장소에 firebase.json 파일이 없는 경우 emulators:start 또는 emulators:exec 명령에 명령줄 인수를 추가하여 시작해야 하는 에뮬레이터를 지정해야 합니다. 예를 들어,
    --only functions,firestore .

인증 토큰 생성(호스팅 에뮬레이터만 해당)

지속적 통합 워크플로가 Firebase 호스팅에 의존하는 경우 firebase emulators:exec 를 실행하려면 토큰을 사용하여 로그인해야 합니다. 다른 에뮬레이터는 로그인이 필요하지 않습니다.

토큰을 생성하려면 로컬 환경에서 firebase login:ci 를 실행하십시오. 이것은 CI 시스템에서 수행되어서는 안됩니다. 지시에 따라 인증하십시오. 토큰은 빌드 전체에서 유효하므로 프로젝트당 한 번만 이 단계를 수행해야 합니다. 토큰은 암호처럼 취급되어야 합니다. 그것이 비밀로 유지되는지 확인하십시오.

CI 환경에서 빌드 스크립트에서 사용할 수 있는 환경 변수를 지정할 수 있는 경우 값이 액세스 토큰 문자열인 FIREBASE_TOKEN 이라는 환경 변수를 생성하기만 하면 됩니다. Firebase CLI가 자동으로 FIREBASE_TOKEN 환경 변수를 선택하고 에뮬레이터가 제대로 시작됩니다.

최후의 수단으로 빌드 스크립트에 토큰을 포함하기만 하면 되지만 신뢰할 수 없는 당사자가 액세스할 수 없도록 해야 합니다. 이 하드 코딩된 접근 방식의 경우 --token "YOUR_TOKEN_STRING_HERE" 를 firebase firebase emulators:exec 명령에 추가할 수 있습니다.

에뮬레이터 허브 REST API 사용

실행 중인 에뮬레이터 나열

현재 실행 중인 에뮬레이터를 나열하려면 에뮬레이터 허브의 /emulators 엔드포인트에 GET 요청을 보냅니다.

curl localhost:4400/emulators

결과는 실행 중인 모든 에뮬레이터와 호스트/포트 구성을 나열하는 JSON 객체가 됩니다. 예를 들면 다음과 같습니다.

{
  "hub":{
    "name": "hub",
    "host": "localhost",
    "port": 4400
  },
  "functions": {
    "name": "functions",
    "host": "localhost",
    "port": 5001
  }
  "firestore": {
    "name": "firestore",
    "host": "localhost",
    "port": 8080
  }
}

백그라운드 기능 트리거 활성화/비활성화

일부 상황에서는 로컬 기능 및 확장 트리거를 일시적으로 비활성화해야 합니다. 예를 들어 Cloud Functions 또는 Extensions 에뮬레이터에서 실행 중인 onDelete 함수를 트리거하지 않고 Cloud Firestore 에뮬레이터의 모든 데이터를 삭제할 수 있습니다.

로컬 기능 트리거를 일시적으로 비활성화하려면 에뮬레이터 허브의 /functions/disableBackgroundTriggers 엔드포인트로 PUT 요청을 보냅니다.

curl -X PUT localhost:4400/functions/disableBackgroundTriggers

결과는 현재 상태를 자세히 설명하는 JSON 객체가 됩니다.

{
  "enabled": false
}

비활성화된 로컬 기능 트리거를 활성화하려면 에뮬레이터 허브의 /functions/enableBackgroundTriggers 엔드포인트로 PUT 요청을 보냅니다.

curl -X PUT localhost:4400/functions/enableBackgroundTriggers

결과는 현재 상태를 자세히 설명하는 JSON 객체가 됩니다.

{
  "enabled": true
}

에뮬레이터 SDK 통합

이 섹션의 표는 클라이언트 및 Admin SDK에서 지원하는 에뮬레이터를 나타냅니다. 미래 는 에뮬레이터 지원이 계획되어 있지만 아직 사용할 수 없음을 의미합니다.

클라이언트 SDK 가용성

기계적 인조 인간 애플 플랫폼 편물 Firebase UI
기계적 인조 인간
Firebase UI
iOS
Firebase UI
편물
실시간 데이터베이스 19.4.0 7.2.0 8.0.0 6.4.0 미래 해당 없음
클라우드 파이어스토어 21.6.0 7.2.0 8.0.0 6.4.0 미래 해당 없음
입증 20.0.0 7.0.0 8.0.0 7.0.0 미래 4.7.2
Firebase용 클라우드 스토리지 20.0.0 8.0.0 8.4.0 7.0.0 11.0.0 해당 없음
클라우드 함수 19.1.0 7.2.0 8.0.0 해당 없음 해당 없음 해당 없음
호스팅 해당 없음 해당 없음 해당 없음 해당 없음 해당 없음 해당 없음
확장 해당 없음 해당 없음 해당 없음 해당 없음 해당 없음 해당 없음

Admin SDK 가용성

마디 자바 파이썬 가다
실시간 데이터베이스 8.6.0 6.10.0 2.18.0 미래
클라우드 파이어스토어 8.0.0 6.10.0 3.0.0 1.0.0
입증 9.3.0 7.2.0 5.0.0 4.2.0
Firebase용 클라우드 스토리지 9.8.0 미래 미래 미래
클라우드 함수 해당 없음 해당 없음 해당 없음 해당 없음
호스팅 해당 없음 해당 없음 해당 없음 해당 없음
확장 해당 없음 해당 없음 해당 없음 해당 없음