로컬에서 함수 실행

Firebase CLI에는 다음 함수 유형을 에뮬레이션할 수 있는 Cloud Functions 에뮬레이터가 포함되어 있습니다.

  • HTTPS 함수
  • 호출 가능 함수
  • 태스크 큐 함수
  • Firebase Authentication, Realtime Database에서 트리거된 백그라운드 함수 Cloud Firestore, Cloud Storage, 지원되는 Firebase 알림 Cloud Pub/Sub를 사용할 수 있습니다

함수를 프로덕션 단계로 배포하기 전에 로컬에서 테스트 실행이 가능합니다.

Firebase CLI 설치

Cloud Functions 에뮬레이터를 사용하려면 먼저 Firebase CLI를 설치하세요.

npm install -g firebase-tools

로컬 에뮬레이터를 사용하려면 Cloud Functions가 다음에 종속되어야 합니다.

  • firebase-admin 버전 8.0.0 이상이 필요합니다.
  • firebase-functions 버전 3.0.0 이상이 필요합니다.

관리자 인증 정보 설정(선택사항)

Firebase Admin SDK를 통해 함수가 Google API 및 다른 Firebase API와 상호작용하는지 테스트하기 위해서는 관리자 인증 정보를 설정해야 할 수도 있습니다.

  • Cloud FirestoreRealtime Database 트리거의 사용자 인증 정보가 이미 충분한 경우에는 추가 설정이 필요 없습니다.
  • AuthenticationFCM와 같은 Firebase API 또는 Cloud Translation 또는 Cloud Speech와 같은 Google API를 포함한 다른 모든 API에는 이 섹션에 설명된 설정 단계가 필요합니다. 이는 Cloud Functions 셸 또는 firebase emulators:start 사용 여부에 관계없이 적용됩니다.

에뮬레이션된 함수에 관리자 인증 정보를 설정하는 방법:

  1. Google 검색 앱 홈 화면의 오른쪽 상단에 있는 서비스 계정 창 Google Cloud 콘솔의 화면입니다.
  2. 기본 서비스 계정 App Engine가 선택되어 있는지 확인하고 다음을 사용합니다. 오른쪽의 옵션 메뉴에서 키 만들기를 선택합니다.
  3. 메시지가 나타나면 키 유형으로 JSON을 선택하고 만들기를 클릭합니다.
  4. Google 기본 사용자 인증 정보가 다운로드된 키를 가리키도록 설정합니다.

    Unix

    export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json"
    firebase emulators:start
    

    Windows

    set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json
    firebase emulators:start
    

이 단계를 완료하면 함수 테스트에서 Admin SDK를 사용하여 Firebase 및 Google API에 액세스할 수 있습니다. 예를 들어 Authentication 트리거가 있는 경우 에뮬레이션된 함수에서 다음을 호출할 수 있습니다. admin.auth().getUserByEmail(email)입니다.

함수 구성 설정(선택사항)

커스텀 함수 구성 변수를 사용할 경우 먼저 functions 디렉터리 내에서 다음 명령어를 실행하여 로컬 환경에서 커스텀 구성을 가져옵니다.

firebase functions:config:get > .runtimeconfig.json
# If using Windows PowerShell, replace the above with:
# firebase functions:config:get | ac .runtimeconfig.json

에뮬레이터 도구 모음 실행

Cloud Functions 에뮬레이터를 실행하려면 emulators:start 명령어를 사용합니다.

firebase emulators:start

emulators:start 명령어는 Cloud Functions용 에뮬레이터를 시작합니다. Cloud Firestore, 실시간 데이터베이스, Firebase 호스팅 기반 firebase init를 사용하여 로컬 프로젝트에서 초기화한 제품에서 특정 에뮬레이터를 시작하려면 --only 플래그를 사용합니다.

firebase emulators:start --only functions

에뮬레이션이 시작된 후 테스트 모음 또는 테스트 스크립트를 실행하려면 emulators:exec 명령어를 사용합니다.

firebase emulators:exec "./my-test.sh"

앱을 구현하여 에뮬레이터와 대화하기

앱이 에뮬레이터와 상호작용하도록 구현하려면 몇 가지 추가 구성을 수행해야 할 수도 있습니다.

호출 가능한 함수를 위한 앱 구현

프로토타입 및 테스트 활동에 호출 가능한 백엔드 함수가 포함된 경우 다음과 같이 Cloud Functions for Firebase 에뮬레이터와의 상호작용을 구성합니다.

Kotlin+KTX
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
val functions = Firebase.functions
functions.useEmulator("10.0.2.2", 5001)
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
FirebaseFunctions functions = FirebaseFunctions.getInstance();
functions.useEmulator("10.0.2.2", 5001);
Swift
Functions.functions().useFunctionsEmulator(origin: "http://127.0.0.1:5001")

Web

import { getApp } from "firebase/app";
import { getFunctions, connectFunctionsEmulator } from "firebase/functions";

const functions = getFunctions(getApp());
connectFunctionsEmulator(functions, "127.0.0.1", 5001);

Web

firebase.functions().useEmulator("127.0.0.1", 5001);

HTTPS 함수 에뮬레이션을 위한 앱 구현

코드의 각 HTTPS 함수는 다음 URL 형식을 사용하여 로컬 에뮬레이터에서 제공됩니다.

http://$HOST:$PORT/$PROJECT/$REGION/$NAME

예를 들어 기본 호스트 포트와 리전을 포함한 단순한 helloWorld 함수는 다음 형식으로 제공됩니다.

https://localhost:5001/$PROJECT/us-central1/helloWorld

태스크 큐 함수 에뮬레이션을 위한 앱 구현

에뮬레이터는 트리거에 따라 에뮬레이션된 태스크 큐를 자동으로 설정합니다. 정의하면 Admin SDK는 큐에 추가된 요청을 CLOUD_TASKS_EMULATOR_HOST 환경을 통해 실행 중임을 감지합니다. 변수의 값을 반환합니다.

프로덕션에 사용되는 디스패치 시스템은 다른 디스패치 시스템보다 에뮬레이터에 구현되어 있으므로 에뮬레이션된 것으로 예상해서는 안 됩니다. 프로덕션 환경을 정확하게 반영할 수 있습니다. 이 에뮬레이터가 작업이 디스패치되는 속도의 상한값을 제공함 재시도했습니다.

백그라운드 트리거 함수 에뮬레이션을 위한 앱 구현

Cloud Functions 에뮬레이터는 다음 소스의 백그라운드 트리거 함수를 지원합니다.

  • Realtime Database 에뮬레이터
  • Cloud Firestore 에뮬레이터
  • Authentication 에뮬레이터
  • Pub/Sub 에뮬레이터
  • Firebase 알림 에뮬레이터

백그라운드 이벤트를 트리거하려면 Emulator Suite UI 또는 앱 또는 테스트 코드를 에뮬레이터에 연결 SDK를 사용하여 수익을 창출할 수 있습니다

확장 프로그램에서 내보낸 커스텀 이벤트의 테스트 핸들러

Firebase Extensions 맞춤 이벤트를 처리하기 위해 구현하는 함수의 경우 Cloud Functions v2를 사용하면 Cloud Functions 에뮬레이터가 지원하는 Eventarc 에뮬레이터 Eventarc 트리거.

이벤트를 내보내는 확장 프로그램의 커스텀 이벤트 핸들러를 테스트하려면 Cloud Functions 및 Eventarc 에뮬레이터

Cloud Functions 런타임은 EVENTARC_EMULATOR 환경을 설정합니다. Eventarc 에뮬레이터인 경우 현재 프로세스에서 변수를 localhost:9299로 설정합니다. 확인할 수 있습니다 Firebase Admin SDK가 자동으로 Eventarc에 연결됨 EVENTARC_EMULATOR 환경 변수가 설정된 경우 에뮬레이터 다음을 수행할 수 있습니다. Local Emulator Suite 구성에 설명된 대로 기본 포트를 수정합니다.

환경 변수가 올바르게 구성되면 Firebase Admin SDK가 자동으로 Eventarc 에뮬레이터에 이벤트를 전송합니다. 결과적으로 Eventarc는 에뮬레이터가 Cloud Functions 에뮬레이터를 다시 호출하여 등록 핸들러에 전달됩니다.

Emulator Suite UI에서 Functions 로그에서 처리됩니다.

다른 서비스와 상호작용

에뮬레이터 도구 모음에는 크로스 프로덕트 상호작용을 테스트할 수 있는 여러 에뮬레이터가 포함되어 있습니다.

Cloud Firestore

Firebase Admin SDK를 사용해 Cloud Firestore: 쓰기가 Cloud Firestore 에뮬레이터로 전송됩니다. 확인할 수 있습니다 쓰기 작업을 통해 추가로 트리거된 함수는 Cloud Functions 에뮬레이터에서 실행됩니다.

Cloud Storage

Firebase Admin SDK (버전 9.7.0 이상)를 사용하는 함수가 있는 경우 Cloud Storage에 쓰려는 경우 쓰기가 Cloud Storage 에뮬레이터로 전송됩니다. 확인할 수 있습니다 이러한 쓰기로 인해 추가 함수가 트리거되면 Cloud Functions 에뮬레이터에서 실행됩니다.

Firebase Authentication

Firebase Admin SDK (버전 9.3.0 이상)를 사용하는 함수가 있는 경우 Firebase Authentication에 쓰려는 경우 쓰기 작업이 인증 에뮬레이터로 전송됩니다. 확인할 수 있습니다 이러한 쓰기로 인해 추가 함수가 트리거되면 Cloud Functions 에뮬레이터에서 실행됩니다.

Firebase 호스팅

Cloud Functions를 사용하여 firebase emulators:startFirebase Hosting일 로컬 HTTP 함수를 호스팅용 프록시로 사용합니다.

Firebase 알림

지원되는 Firebase 알림 트리거가 하나 이상 포함된 프로젝트에서 에뮬레이터 UI에는 FireAlerts 탭이 포함되어 있습니다. 알림 트리거를 에뮬레이션하려면 다음 안내를 따르세요.

  1. FireAlerts 탭을 엽니다. 이 탭에는 연결된 트리거가 있는 알림 유형 (예: onNewFatalIssuePublished 트리거된 경우Crashlytics.newFatalIssue가 표시됩니다.
  2. 알림 유형을 선택합니다. 양식이 기본값으로 자동 채워지며 수정할 수 있습니다 이벤트 입력란을 수정할 수 있습니다 (기타 경보 이벤트의 정보는 추론되거나 모의 값이거나 무작위로 생성됩니다.
  3. Send Alert를 선택하여 함수 에뮬레이터에 합성 알림을 전송합니다. Firebase 콘솔의 알림에서 로그를 확인할 수 있습니다(로그에서도 확인 가능).

로깅

에뮬레이터는 함수의 로그를 실행 중인 터미널 창으로 스트리밍합니다. 또한 함수에 포함된 console.log(), console.info(), console.error(), console.warn() 문의 모든 출력을 표시합니다.

다음 단계

Firebase 에뮬레이터 도구 모음 사용에 관한 모든 예시는 빠른 시작 샘플 테스트를 참조하세요.