로컬에서 함수 실행

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

  • HTTPS 함수
  • 호출 가능 함수
  • Firebase 인증, 실시간 데이터베이스, Cloud Firestore, Cloud Storage, 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 Firestore 및 실시간 데이터베이스 트리거의 사용자 인증 정보가 이미 충분한 경우에는 추가 설정이 필요 없습니다.
  • Firebase API(예: Authentication API, FCM API) 또는 Google API(예: Cloud Translation API, Cloud Speech API)를 포함한 모든 API는 여기에서 설명하고 있는 설정 단계를 따라야 합니다. 이는 Cloud Functions 셸 또는 firebase emulators:start 사용 여부에 상관없이 적용되는 사항입니다.

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

  1. Google Cloud Console의 서비스 계정 창을 엽니다.
  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에 액세스할 수 있습니다. 예를 들어 인증 트리거를 테스트할 때 에뮬레이션된 함수에서 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 명령어를 실행하면 firebase init를 사용하여 로컬 프로젝트에서 초기화한 제품에 따라 Cloud Functions, Cloud Firestore, 실시간 데이터베이스, Firebase 호스팅용 에뮬레이터가 시작됩니다. 특정 에뮬레이터를 시작하려면 --only 플래그를 사용하세요.

firebase emulators:start --only functions

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

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

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

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

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

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

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")

웹 모듈식 API

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

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

웹 네임스페이스화된 API

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

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

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

  • 실시간 데이터베이스 에뮬레이터
  • Cloud Firestore 에뮬레이터
  • 인증 에뮬레이터
  • Pub/Sub 에뮬레이터

백그라운드 이벤트를 트리거하려면 에뮬레이터 도구 모음 UI를 사용하거나 플랫폼용 SDK를 사용하여 에뮬레이터에 앱 또는 테스트 코드를 연결하여 백엔드 리소스를 수정하세요.

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

Cloud Functions v2로 Firebase Extensions 커스텀 이벤트를 처리하기 위해 구현하는 함수의 경우 Cloud Functions 에뮬레이터가 Eventarc 에뮬레이터와 페어링되어 Eventarc 트리거를 지원합니다.

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

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

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

에뮬레이터 도구 모음 UI의 Cloud 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 인증

Firebase Admin SDK(버전 9.3.0 이상)를 사용하여 Firebase 인증에 쓰는 함수가 있다면 이 쓰기 작업은 실행 중인 인증 에뮬레이터로 전송됩니다. 쓰기 작업을 통해 추가로 트리거된 함수는 Cloud Functions 에뮬레이터에서 실행됩니다.

Firebase 호스팅

Firebase 호스팅용 동적 콘텐츠를 생성하는 Cloud Functions를 사용하고 있다면 firebase emulators:start는 호스팅용 프록시로 로컬 HTTP 함수를 사용합니다.

로깅

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

다음 단계

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