-
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반응형'프로그래밍 > flutter로 앱만들기' 카테고리의 다른 글
flutter async 함수 안에서는 await를 여러 번 사용할 수 있을까? (0) 2025.04.22 Flutter는 왜 UI를 단 하나의 스레드에서만 그릴까? (0) 2025.04.22 안드로이드 스튜디오에서 flutter 데모 실행하기 (0) 2024.06.02 flutter 윈도우 개발 환경 세팅 (0) 2024.05.26