# 📅 Agent 상세 미팅: DB 백업 구현 코드/전략 검토

> **일시**: 2026-02-15 22:15
> **참석자**: PM(Jay), Backend(Mark), DevOps(Sarah), QA(Lisa)
> **안건**: "DB 백업(Firestore Export) 구현 전 상세 코드/전략 검토 및 잠재적 에러 진단"

---

## 1. 현황 분석 (Jay - PM)
- **Jay**: 자, 사용자께서 우리가 "좀 전에 시작한 DB 백업" 관련해서 중간 점검을 원하십니다.
- **Jay**: 현재 상황을 정리하면, **Phase 1 (Soft Delete & Revision History)**는 구현 및 배포가 완료되었습니다. 남은 것은 **Phase 2 (Firestore Export - 물리적 백업)** 입니다.
- **Jay**: 기존 스펙(`db-backup-spec.md`)에서는 **Cloud Functions + Cloud Scheduler**를 제안했는데, 이 부분에서 발생할 수 있는 문제점을 집중적으로 파헤쳐 봅시다.

## 2. 코드 및 전략 기술 검토 (Technical Review)

### 이슈 1: Firebase 요금제 제약 (Critical)
- **Sarah (DevOps)**: 가장 큰 걸림돌이 있습니다. 기존 스펙대로 `firebase-functions`와 `Cloud Scheduler`를 사용하려면 **Firebase Blaze 요금제(종량제)**가 필수입니다.
- **Sarah**: 현재 프로젝트(`InsuWiki`)가 Spark(무료) 요금제라면, 배포 단계에서 `Error: Billing account not configured` 에러가 100% 발생합니다. 사용자에게 과금 의사를 물어보지 않고 이 코드를 짜면 낭패입니다.
- **Mark (Backend)**: 맞아요. Node.js 10+ 런타임의 Cloud Functions는 무료 티어에서 지원되지 않습니다.

### 이슈 2: 권한 (Permissions) 및 Service Account
- **Mark (Backend)**: 코드로 구현할 때 `gcloud firestore export` 명령어를 트리거해야 하는데, 이 작업을 수행하는 Google Cloud Storage 버킷에 대한 쓰기 권한이 'Default App Engine Service Account'에 있어야 합니다.
- **Mark**: 단순히 코드를 짠다고 되는 게 아니라, GCP IAM 콘솔에서 권한 설정이 선행되지 않으면 `Permission Denied` 에러가 납니다. 이걸 "코드"만으로 자동화하기는 어렵습니다.

### 대안 제시: GitHub Actions (Free Tier Friendly)
- **Sarah (DevOps)**: 사용자가 무료 티어를 유지하고 싶다면, **GitHub Actions**를 사용하는 것이 훨씬 안전합니다.
    - **Schedule**: Cron 문법으로 스케줄링 (`0 4 * * *` - 매일 새벽 4시).
    - **Action**: `google-github-actions/auth`로 인증 후 `gcloud firestore export` 실행.
    - **비용**: GitHub Actions 무료 사용량 내에서 충분히 커버 가능.
- **Jay (PM)**: 훌륭한 대안이네요. "완전 관리형"보다는 "비용 효율적"인 쪽이 현재 단계에선 더 적합해 보입니다.

### 이슈 3: 복구(Restore) 테스트 부재
- **Lisa (QA)**: 백업 파일(`metadata` 등)이 GCS에 쌓인다고 칩시다. 만약 DB가 날아갔을 때, **어떻게 복구할지**에 대한 가이드나 스크립트가 없으면 백업은 무용지물입니다.
- **Lisa**: `gcloud firestore import` 명령어도 테스트해봐야 하는데, 이건 기존 데이터를 덮어쓸 위험이 있어서 'Staging 환경' 없이는 테스트가 위험해요.

## 3. 잠재적 에러 시뮬레이션

1.  **Quota Exceeded**: Firestore 하루 무료 읽기/쓰기 할당량을 초과할 가능성?
    - **Mark**: Export 작업은 '읽기' 연산으로 계산됩니다. 문서가 5만 개 미만이라면 하루 한 번 백업은 무료 할당량(5만 읽기) 내에 들어갑니다. 단, 트래픽이 많을 땐 주의해야 합니다.
2.  **Cold Start Timeout**: Cloud Functions 사용 시, 백업 요청이 540초(9분)를 넘어가면 타임아웃될 수 있음.
    - **Sarah**: 그래서 `gcloud export`는 비동기로 돕니다. Function 자체는 명령만 날리고 종료되므로 타임아웃 걱정은 덜 해도 됩니다.

## 4. 결론 및 제안 (Action Items)

**Jay (PM) 요약**:
사용자에게 솔직하게 보고하고 방향을 결정해야 합니다.

1.  **접근 방식 변경 권고**: Cloud Functions(Blaze 요금제 필수) 대신 **GitHub Actions(무료)** 방식 제안.
2.  **복구 매뉴얼 필수**: 백업 스크립트 작성 시 `RECOVERY.md`도 함께 작성.
3.  **검토 결과**: 현재 코드 베이스에는 아직 "백업 스크립트"가 없으므로, 에러가 발생할 곳은 없으나, **"구현하려고 했던 방향(Cloud Functions)"이 무료 플랜과 호환되지 않는다는 설계 오류**를 사전에 발견함.

### Next Step
- 사용자에게 **"Firebase Blaze 요금제 사용 여부"** 확인.
- 미사용 시 **GitHub Actions 기반 백업 워크플로우** 구현.
