# Firebase Emulator 설정 및 DB 모듈화 계획

> **생성일**: 2026-02-09
> **상태**: 계획 수립 중

---

## 1. 배경

### 현재 문제
- Firebase 무료 플랜(Spark) Quota 초과 발생
- 개발 중 Hot Reload + onSnapshot으로 읽기/쓰기 급증
- 일일 한도: 읽기 50,000회, 쓰기 20,000회

### 해결 방안
1. **Firebase Emulator** - 로컬 개발 환경 (무제한)
2. **DB 모듈화** - 향후 DB 교체 용이하도록 추상화

---

## 2. Firebase Emulator 설정

### 설치 명령어
```bash
npm install -g firebase-tools
firebase init emulators
```

### 활성화할 에뮬레이터
- [ ] Firestore
- [ ] Authentication

### 환경 변수 분리
```env
# .env.local (개발용)
NEXT_PUBLIC_USE_EMULATOR=true

# .env.production (배포용)
NEXT_PUBLIC_USE_EMULATOR=false
```

### 코드 변경 (lib/firebase.ts)
```typescript
if (process.env.NEXT_PUBLIC_USE_EMULATOR === 'true') {
  connectFirestoreEmulator(db, 'localhost', 8080);
  connectAuthEmulator(auth, 'http://localhost:9099');
}
```

---

## 3. DB 모듈화 검토

### 현재 구조 (Firebase 직접 호출)
```
page.tsx → firebase/firestore (직접 의존)
```

### 권장 구조 (Repository 패턴)
```
page.tsx → DocumentRepository (추상화) → FirebaseAdapter
                                       → SupabaseAdapter (미래)
```

### 모듈화 장점
1. DB 교체 시 Adapter만 교체
2. 테스트 용이 (Mock Adapter 사용)
3. 비즈니스 로직과 DB 로직 분리

### 모듈화 단점
1. 초기 개발 복잡도 증가
2. 1인 개발 시 오버엔지니어링 가능성

---

## 4. 권장 사항

### 지금 해야 할 것 ✅
- [ ] Firebase Emulator 설정
- [ ] 환경 변수 분리 (.env.local / .env.production)
- [ ] lib/firebase.ts에 에뮬레이터 연결 코드 추가

### 나중에 해도 되는 것 ⏳
- [ ] Repository 패턴 도입 (DB 교체 필요 시)
- [ ] 캐싱 레이어 추가 (성능 최적화 필요 시)

---

## 5. 멀티에이전트 미팅 결과

(미팅 후 업데이트 예정)
