앱을 실시간 데이터베이스 에뮬레이터에 연결하기 전에 전반적인 Firebase 로컬 에뮬레이터 도구 모음 워크플로를 이해하고 로컬 에뮬레이터 도구 모음을 설치 및 구성하며 CLI 명령어를 검토해야 합니다.
Firebase 프로젝트 선택
Firebase 로컬 에뮬레이터 도구 모음은 단일 Firebase 프로젝트의 제품을 에뮬레이션합니다.
에뮬레이터를 시작하기 전에 사용할 프로젝트를 선택하려면 CLI로 작업 디렉터리에서 firebase use
를 실행합니다. 또는 --project
플래그를 각 에뮬레이터 명령어에 전달합니다.
로컬 에뮬레이터 도구 모음은 실제 Firebase 프로젝트 및 데모 프로젝트의 에뮬레이션을 지원합니다.
프로젝트 유형 | 특징 | 에뮬레이터와 함께 사용 |
---|---|---|
실제 |
실제 Firebase 프로젝트는 주로 Firebase Console을 통해 만들고 구성한 프로젝트입니다. 실제 프로젝트에는 데이터베이스 인스턴스, 스토리지 버킷, 함수 또는 해당 Firebase 프로젝트에 설정한 기타 리소스와 같은 라이브 리소스가 있습니다. |
실제 Firebase 프로젝트로 작업할 때는 지원되는 제품 일부 또는 전부를 에뮬레이션할 수 있습니다. 에뮬레이션하지 않는 제품의 경우 앱과 코드가 데이터베이스 인스턴스, 스토리지 버킷, 함수 등 라이브 리소스와 상호작용합니다. |
데모 |
데모 Firebase 프로젝트에는 실제 Firebase 구성이 없으며 라이브 리소스도 없습니다. 이러한 프로젝트는 일반적으로 Codelab 또는 기타 튜토리얼을 통해 액세스합니다. 데모 프로젝트의 프로젝트 ID에는 |
데모 Firebase 프로젝트로 작업할 때는 앱과 코드가 에뮬레이터와만 상호작용합니다. 앱이 에뮬레이터에서 실행 중이지 않은 리소스와 상호작용하려고 하면 코드가 실패합니다. |
가능한 한 데모 프로젝트를 사용하는 것이 좋습니다. 장점은 다음과 같습니다.
- 손쉬운 설정: Firebase 프로젝트를 만들지 않고도 에뮬레이터를 실행할 수 있습니다.
- 강력한 안전성: 코드에서 실수로 에뮬레이션되지 않은(프로덕션) 리소스를 호출하더라도 데이터 변경, 사용, 청구 등이 발생할 가능성이 없습니다.
- 오프라인 지원 향상: SDK 구성을 다운로드하기 위해 인터넷에 액세스할 필요가 없습니다.
에뮬레이터와 통신하도록 앱 구현
Android, Apple 플랫폼, 웹 SDK
실시간 데이���베이스와 상호작용하도록 인앱 구성 또는 테스트 클래스를 다음과 같이 설정합니다.
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 database = Firebase.database database.useEmulator("10.0.2.2", 9000)
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of // the host computer from an Android emulator. FirebaseDatabase database = FirebaseDatabase.getInstance(); database.useEmulator("10.0.2.2", 9000);
Swift
// In almost all cases the ns (namespace) is your project ID. let db = Database.database(url:"http://127.0.0.1:9000?ns=YOUR_DATABASE_NAMESPACE")
웹 모듈식 API
import { getDatabase, connectDatabaseEmulator } from "firebase/database"; const db = getDatabase(); if (location.hostname === "localhost") { // Point to the RTDB emulator running on localhost. connectDatabaseEmulator(db, "127.0.0.1", 9000); }
웹 네임스페이스화된 API
var db = firebase.database(); if (location.hostname === "localhost") { // Point to the RTDB emulator running on localhost. db.useEmulator("127.0.0.1", 9000); }
에뮬레이터를 사용하여 실시간 데이터베이스 이벤트에 의해 트리거되는 Cloud Functions를 테스트할 때는 추가 설정이 필요하지 않습니다. 실시간 데이터베이스와 Cloud Functions 에뮬레이터가 모두 실행되면 자동으로 함께 작동합니다.
Admin SDK
FIREBASE_DATABASE_EMULATOR_HOST
환경 변수가 설정되면 Firebase Admin SDK가 실시간 데이터베이스 에뮬레이터에 자동으로 연결됩니다.
export FIREBASE_DATABASE_EMULATOR_HOST="127.0.0.1:9000"
코드가 Cloud Functions 에뮬레이터 내에서 실행 중인 경우 initializeApp
을 호출하면 프로젝트 ID 및 기타 구성이 자동으로 설정됩니다.
Admin SDK 코드를 다른 환경에서 실행되는 공유 에뮬레이터에 연결하려면 Firebase CLI를 사용하여 설정한 것과 동일한 프로젝트 ID를 지정해야 합니다.
프로젝트 ID를 initializeApp
에 직접 전달하거나 GCLOUD_PROJECT
환경 변수를 설정할 수 있습니다.
Node.js Admin SDK
admin.initializeApp({ projectId: "your-project-id" });
환경 변수
export GCLOUD_PROJECT="your-project-id"
테스트 간 데이터베이스 삭제
활동 간에 실시간 데이터베이스를 삭제하려면 데이터베이스 참조를 지웁니다. 에뮬레이터 프로세스를 종료하는 대신 이 방법을 사용할 수 있습니다.
Kotlin+KTX
// With a DatabaseReference, write null to clear the database. database.reference.setValue(null)
Java
// With a DatabaseReference, write null to clear the database. database.getReference().setValue(null);
Swift
// With a DatabaseReference, write nil to clear the database. Database.database().reference().setValue(nil);
웹 모듈식 API
import { getDatabase, ref, set } from "firebase/database"; // With a database Reference, write null to clear the database. const db = getDatabase(); set(ref(db), null);
웹 네임스페이스화된 API
// With a database Reference, write null to clear the database. firebase.database().ref().set(null);
코드에서는 일반적으로 플랫폼의 비동기 이벤트 처리 기능을 사용하여 삭제가 완료되거나 실패했음을 확인할 때까지 기다립니다.
이와 같은 단계를 구현하면 실행 간에 이전 데이터가 삭제되고 새로운 기준 테스트 구성을 사용한다는 ������을 가지고 테스트 순서를 지정하고 함수를 트리거할 수 있습니다.
데이터 가져오기 및 내보내기
데이터베이스 에뮬레이터와 Firebase용 Cloud Storage 에뮬레이터를 사용하면 실행 중인 에뮬레이터 인스턴스에서 데이터를 내보낼 수 있습니다. 단위 테스트 또는 지속적 통합 워크플로에 사용할 기준 데이터 세트를 정의한 다음 내보내기하여 팀과 공유할 수 있습니다.
firebase emulators:export ./dir
테스트에서 에뮬레이터 시작 시 기준 데이터를 가져옵니다.
firebase emulators:start --import=./dir
내보내기 경로를 지정하거나 --import
플래그에 전달된 경로를 사용하여 종료 시 에뮬레이터가 데이터를 내보내도록 지시할 수 있습니다.
firebase emulators:start --import=./dir --export-on-exit
이러한 데이터 가져오기 및 내보내기 옵션은 firebase emulators:exec
명령어에서도 작동합니다. 자세한 내용은 에뮬레이터 명령어 참조를 확인하세요.
보안 규칙 활동 시각화
프로토타입과 테스트 루프를 진행하면서 로컬 에뮬레이터 도구 모음에서 제공하는 시각화 도구와 보고서를 사용할 수 있습니다.
규칙 평가 시각화
프로토타입에 보안 규칙을 추가하면 로컬 에뮬레이터 도구 모음을 사용하여 디버깅할 수 있습니다.
일련의 테��트를 실행한 후 각 규칙이 평가되는 방식을 보여주는 테스트 범위 보고서에 액세스할 수 있습니다. 이 보고서를 가져오려면 실행 중 에뮬레이터에서 노출된 엔드포인트를 쿼리하세요. 브라우저 버전에서는 다음 URL을 사용하세요.
http://localhost:9000/.inspect/coverage?ns=<database_name>
이렇게 하면 규칙이 표현식과 하위 표현식으로 구분되며, 마우스 오버하면 실행 횟수 및 반환된 값을 비롯한 자세한 정보를 볼 수 있습니다. 이 데이터의 원시 JSON 버전에서는 쿼리에 다음 URL을 포함하세요.
http://localhost:9000/.inspect/coverage.json?ns=<database_name>
다음 단계
- 선별된 동영상 모음 및 자세한 방법 예시는 Firebase 에뮬레이터 학습 재생목록을 참조하세요.
- 보안 규칙 테스트 및 Firebase Test SDK와 관련된 고급 사용 사례는 보안 규칙 테스트(실시간 데이터베이스)를 살펴보세요.
- 트리거 함수는 일반적인 실시간 데이터베이스 통합 사례이므로 로컬에서 함수 실행에서 Firebase용 Cloud Functions 에뮬레이터에 대한 자세한 내용을 참조하세요.