프로그래밍/flutter로 앱만들기

Firebase 테스트 환경을 만들 때, 꼭 알아야 할 '로컬(mock) 환경' 이야기

kugancity 2025. 4. 28. 18:31
반응형

 

 

 

 

 

 

Flutter로 앱을 개발하면서 Firebase를 연동하고 테스트를 하다 보면, 한 가지 의문이 생긴다.
"테스트할 때도 진짜 Firebase 서버에 요청이 가는 걸까?"

나도 처음에는 별 생각 없이 코드를 짰는데, 어느 순간부터 걱정이 들기 시작했다.

  • 혹시 이거 테스트 돌릴 때마다 비용이 나가는 건 아닐까?
  • 테스트 데이터가 진짜 DB에 쌓이면 어떡하지?

그래서 찾아보게 된 게 바로 로컬(mock) 환경이다.


로컬(mock) 환경이란?

간단하게 말하면,

실제 서버에 연결하지 않고, "서버에 연결된 척" 하는 테스트 환경

이다.

예를 들어, FirebaseAuth.instance.signInWithEmailAndPassword(...) 같은 메서드를 호출했을 때, 진짜 네트워크 요청을 보내는 대신, 로컬에 있는 가짜 객체가 응답을 만들어주는 거다.

덕분에 테스트는 훨씬 빨라지고, 실제 Firebase 서버에 쓸데없는 데이터가 쌓이거나 요금이 발생하는 일도 막을 수 있다.


왜 로컬(mock) 환경이 필요할까?

이유는 아주 명확하다.

  • 비용 절감: Firebase는 읽기/쓰기/인증 요청마다 과금될 수 있다. 테스트할 때마다 돈 쓸 수는 없잖아.
  • 데이터 보호: 테스트 데이터가 진짜 서비스 DB에 쌓이면 운영 데이터가 엉망이 될 수 있다.
  • 빠른 테스트: 네트워크 왕복시간이 없으니까, 테스트가 훨씬 빠르게 끝난다.
  • 독립성 확보: 인터넷 연결이 없어도 테스트를 돌릴 수 있다.

어떻게 세팅할까?

Flutter에서는 보통 test/flutter_test_config.dart 파일을 하나 만들어서,
테스트 시작 전에 Firebase를 "초기화된 척" 해준다.

내가 쓰는 방법은 이렇다.

 

import 'dart:async';
import 'package:flutter_test/flutter_test.dart';
import 'package:firebase_core/firebase_core.dart';

Future<void> testExecutable(FutureOr<void> Function() testMain) async {
  TestWidgetsFlutterBinding.ensureInitialized();
  await setupFirebaseTestingEnvironment();
  await testMain();
}

Future<void> setupFirebaseTestingEnvironment() async {
  const options = FirebaseOptions(
    apiKey: 'test-api-key',
    appId: 'test-app-id',
    messagingSenderId: 'test-sender-id',
    projectId: 'test-project-id',
  );

  if (Firebase.apps.isEmpty) {
    await Firebase.initializeApp(options: options);
  }
}

 

 

실제 프로젝트 키를 쓰면 안 된다. (가짜 값이어도 초기화는 정상적으로 된다)


진짜 서버에 요청 안 가는 거 맞아?

맞다.

이 가짜 초기화 세팅은 단순히 Firebase.initializeApp()을 통과시키기 위한 장치일 뿐이다.
실제 서버로 데이터가 전송되지 않는다.

만약 테스트 코드 안에서도 Firebase 요청을 아예 가짜로 만들어주고 싶으면,
mockito, fake_async, firebase_mocks 같은 라이브러리를 추가로 써서 mock 객체를 만들어야 한다.

하지만 단순한 초기화 테스트나, 서비스 의존성 없는 유닛 테스트라면 여기까지만 해도 충분하다.


정리

정리하자면,
Firebase 테스트를 돌릴 때는 로컬(mock) 환경을 세팅해두는 게 기본 중 기본이다.

  • 비용 걱정 없이
  • 데이터 오염 없이
  • 빠르고 안정적으로

테스트를 할 수 있다.

처음에는 좀 귀찮아 보여도,
나중에 프로젝트가 커지면 이 작은 습관 하나가 엄청난 차이를 만든다.

진짜 개발자라면, 테스트 환경까지 깔끔하게 챙기는 거다. 🚀

 

 

 

 

 

728x90
반응형