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

앱을 Cloud Functions 에뮬레이터에 연결

앱을 Cloud Functions 에뮬레이터에 연결하기 전에 전체 Firebase 로컬 에뮬레이터 제품군 워크플로를 이해하고 로컬 에뮬레이터 제품군설치 및 구성 하고 해당 CLI 명령 을 검토해야 합니다.

Firebase 프로젝트 선택

Firebase 로컬 에뮬레이터 제품군은 단일 Firebase 프로젝트에 대한 제품을 에뮬레이트합니다.

사용할 프로젝트를 선택하려면 에뮬레이터를 시작하기 전에 CLI에서 작업 디렉터리에서 firebase use 를 실행합니다. 또는 --project 플래그를 각 에뮬레이터 명령에 전달할 수 있습니다.

로컬 에뮬레이터 제품군은 실제 Firebase 프로젝트 및 데모 프로젝트의 에뮬레이션을 지원합니다.

프로젝트 유형 특징 에뮬레이터와 함께 사용
진짜

실제 Firebase 프로젝트는 사용자가 만들고 구성한 프로젝트입니다(대부분 Firebase 콘솔을 통해).

실제 프로젝트에는 데이터베이스 인스턴스, 저장소 버킷, 함수 또는 해당 Firebase 프로젝트에 대해 설정한 기타 리소스와 같은 라이브 리소스가 있습니다.

실제 Firebase 프로젝트로 작업할 때 지원되는 제품의 일부 또는 전체에 대해 에뮬레이터를 실행할 수 있습니다.

에뮬레이트하지 않는 제품의 경우 앱과 코드가 라이브 리소스(데이터베이스 인스턴스, 스토리지 버킷, 기능 등)와 상호 작용합니다.

데모

데모 Firebase 프로젝트에는 실제 Firebase 구성과 라이브 리소스가 없습니다. 이러한 프로젝트는 일반적으로 Codelab 또는 기타 자습서를 통해 액세스합니다.

데모 프로젝트의 프로젝트 ID에는 demo- 접두사가 있습니다.

데모 Firebase 프로젝트로 작업할 때 앱과 코드는 에뮬레이터와 상호 작용합니다. 앱이 에뮬레이터가 실행되고 있지 않은 리소스와 상호 작용하려고 하면 해당 코드가 실패합니다.

가능하면 데모 프로젝트를 사용하는 것이 좋습니다. 혜택은 다음과 같습니다.

  • Firebase 프로젝트를 생성하지 않고도 에뮬레이터를 실행할 수 있으므로 설정이 간편합니다.
  • 코드가 실수로 에뮬레이션되지 않은(프로덕션) 리소스를 호출하는 경우 데이터 변경, 사용 및 청구 가능성이 없으므로 더 강력한 안전성
  • SDK 구성을 다운로드하기 위해 인터넷에 액세스할 필요가 없기 때문에 더 나은 오프라인 지원.

에뮬레이터와 통신하도록 앱 계측

호출 가능한 함수에 대해 앱 계측

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

기계적 인조 인간
// 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);
빠른
Functions.functions().useFunctionsEmulator(origin: "http://localhost:5001")

Web version 9

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

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

Web version 8

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

HTTPS 기능 에뮬레이션을 위해 앱 계측

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

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

예를 들어 기본 호스트 포트와 지역이 있는 간단한 helloWorld 함수는 다음 위치에서 제공됩니다.

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

백그라운드 트리거 함수 에뮬레이션을 위해 앱 계측

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

  • 실시간 데이터베이스 에뮬레이터
  • Cloud Firestore 에뮬레이터
  • 인증 에뮬레이터
  • 게시/구독 에뮬레이터

백그라운드 이벤트를 트리거하려면 에뮬레이터 제품군 UI를 사용하거나 플랫폼용 SDK를 사용하여 앱 또는 테스트 코드를 에뮬레이터에 연결하여 백엔드 리소스를 수정합니다.

Extensions에서 내보낸 사용자 지정 이벤트에 대한 테스트 처리기

Cloud Functions v2로 Firebase Extensions 맞춤 이벤트를 처리하기 위해 구현하는 함수의 경우 Cloud Functions 에뮬레이터는 Eventarc 에뮬레이터와 쌍을 이루어 Eventarc 트리거 를 지원합니다.

이벤트를 내보내는 확장에 대한 사용자 지정 이벤트 핸들러를 테스트하려면 Cloud Functions 및 Eventarc 에뮬레이터를 설치해야 합니다.

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

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

핸들러 실행에 대한 자세한 내용은 Emulator Suite UI에서 Functions 로그를 확인할 수 있습니다.

로컬 테스트 환경 구성

함수가 dotenv 기반 환경 구성 에 의존하는 경우 로컬 테스트 환경에서 해당 동작을 에뮬레이션할 수 있습니다.

로컬 Cloud Functions 에뮬레이터를 사용할 때 .env.local 파일을 설정하여 프로젝트의 환경 변수를 재정의할 수 있습니다. .env.local 의 내용은 .env 및 프로젝트별 .env 파일보다 우선합니다.

예를 들어 프로젝트에는 개발 및 로컬 테스트에 대해 약간 다른 값이 포함된 다음 세 개의 파일이 포함될 수 있습니다.

.env .env.dev .env.local
PLANET=지구

관객=인간

AUDIENCE=개발자 인간 AUDIENCE=현지인

로컬 컨텍스트에서 시작되면 에뮬레이터는 다음과 같이 환경 변수를 로드합니다.

  $ firebase emulators:start
  i  emulators: Starting emulators: functions
  # Starts emulator with following environment variables:
  #  PLANET=Earth
  #  AUDIENCE=Local Humans

Cloud Functions 에뮬레이터의 보안 비밀 및 사용자 인증 정보

Cloud Functions 에뮬레이터는 보안 비밀을 사용 하여 민감한 구성 정보를 저장하고 액세스할 수 있도록 지원합니다. 기본적으로 에뮬레이터는 애플리케이션 기본 자격 증명 을 사용하여 프로덕션 비밀에 액세스하려고 시도합니다. CI 환경과 같은 특정 상황에서는 권한 제한으로 인해 에뮬레이터가 비밀 값에 액세스하지 못할 수 있습니다.

환경 변수에 대한 Cloud Functions 에뮬레이터 지원과 유사하게 .secret.local 파일을 설정하여 보안 비밀 값을 재정의할 수 있습니다. 이렇게 하면 특히 비밀 값에 액세스할 수 없는 경우 로컬에서 기능을 쉽게 테스트할 수 있습니다.

Cloud Functions 테스트를 위한 다른 도구에는 어떤 것이 있습니까?

Cloud Functions 에뮬레이터는 다른 프로토타입 및 테스트 도구로 보완됩니다.

  • 대화형 반복 함수 프로토타이핑 및 개발을 허용하는 Cloud Functions 셸입니다. 셸은 개발을 위해 REPL 스타일 인터페이스가 있는 Cloud Functions 에뮬레이터를 사용합니다. Cloud Firestore 또는 실시간 데이터베이스 에뮬레이터와의 통합은 제공되지 않습니다. 셸을 사용하여 데이터를 모의하고 함수 호출을 수행하여 로컬 에뮬레이터 제품군이 현재 지원하지 않는 제품(분석, 원격 구성 및 Crashlytics)과의 상호 작용을 시뮬레이션합니다.
  • 함수 개발을 위한 mocha 프레임워크가 포함된 Node.js인 Cloud Functions용 ​​Firebase 테스트 SDK입니다. 실제로 Cloud Functions Test SDK는 Cloud Functions 셸에서 자동화를 제공합니다.

Cloud Functions 셸 및 Cloud Functions Test SDK에 대한 자세한 내용은 대화형 기능 테스트 및 Cloud Functions 단위 테스트 에서 확인할 수 있습니다.

Cloud Functions 에뮬레이터와 프로덕션의 차이점

Cloud Functions 에뮬레이터는 대부분의 사용 사례에서 프로덕션 환경에 상당히 가깝습니다. 우리는 노드 런타임 내의 모든 것이 가능한 한 프로덕션에 가깝도록 광범위한 작업을 수행했습니다. 그러나 에뮬레이터는 전체 컨테이너화된 프로덕션 환경을 모방하지 않으므로 함수 코드가 현실적으로 실행되는 동안 환경의 다른 측면(예: 로컬 파일, 함수 충돌 후 동작 등)은 다릅니다.

클라우드 IAM

Firebase 에뮬레이터 제품군은 실행을 위한 IAM 관련 동작을 복제하거나 존중하지 않습니다. 에뮬레이터는 제공된 Firebase 보안 규칙을 준수하지만 IAM이 일반적으로 사용되는 상황(예: Cloud Functions 호출 서비스 계정 및 권한 설정)에서는 에뮬레이터를 구성할 수 없으며 개발자 컴퓨터에서 전역적으로 사용 가능한 계정을 사용합니다. 로컬 스크립트를 직접 실행하는 것과 유사합니다.

메모리 및 프로세서 제한 사항

에뮬레이터는 기능에 대한 메모리 또는 프로세서 제한을 적용하지 않습니다. 그러나 에뮬레이터는 timeoutSeconds 런타임 인수를 통해 시간 초과 기능을 지원합니다.

함수가 에뮬레이터에서 실행될 때 함수 실행 시간은 프로덕션 시간과 다를 수 있습니다. 에뮬레이터로 기능을 설계하고 테스트한 후에는 프로덕션에서 제한된 테스트를 실행하여 실행 시간을 확인하는 것이 좋습니다.

로컬 및 프로덕션 환경의 차이점에 대한 계획

에뮬레이터는 로컬 시스템에서 실행되기 때문에 응용 프로그램과 내장 프로그램 및 유틸리티에 대한 로컬 환경에 따라 다릅니다.

Cloud Functions 개발을 위한 로컬 환경은 Google 프로덕션 환경과 다를 수 있습니다.

  • 프로덕션 환경을 시뮬레이트하기 위해 로컬로 설치하는 애플리케이션(예: 이 튜토리얼 의 ImageMagick )은 프로덕션과 동작이 다를 수 있습니다. 특히 다른 버전이 필요하거나 Linux가 아닌 환경에서 개발하는 경우에 그렇습니다. 함수 배포와 함께 누락된 프로그램의 자체 바이너리 복사본 배포를 고려하십시오.

  • 마찬가지로 내장 유틸리티(예: ls , mkdir 과 같은 셸 명령)는 특히 Linux가 아닌 환경(예: macOS)에서 개발하는 경우 프로덕션에서 사용 가능한 버전과 다를 수 있습니다. 기본 명령에 대한 노드 전용 대안을 사용하거나 배포와 함께 번들로 사용할 Linux 바이너리를 빌드하여 이 문제를 처리할 수 있습니다.

재시도 중

Cloud Functions 에뮬레이터는 실패 시 함수 재시도를 지원하지 않습니다.

다음은?