ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Firebase 테스트 환경을 만들 때, 꼭 알아야 할 '로컬(mock) 환경' 이야기
    프로그래밍/flutter로 앱만들기 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
    반응형
Designed by Tistory.