## 약관AI Phase 2 — 인프라 고도화 + 모니터링

### 프로젝트 경로 (절대경로)
/home/jay/projects/insuwiki/

### 전제: Phase 1 결과물 참조
- 2팀 Phase 1 보고서: /home/jay/workspace/memory/reports/task-158.1.md
- 이미 생성된: versionFilter.ts, queryCache.ts, rateLimiter.ts, injectionFilter.ts, firestore.indexes.json(ANN)

### 담당 파일
- nextapp/src/app/api/admin/insurance/reindex/route.ts — Blue-Green 재인덱싱
- nextapp/src/lib/monitoring/ — 새 디렉토리 (costMonitor.ts, alerting.ts)
- nextapp/src/app/api/admin/monitoring/route.ts — 새 파일 (비용 모니터링 API)
- functions/src/pdfIndexing.ts — 재인덱싱 로직 수정 (Blue-Green)

### 작업 1: Blue-Green 재인덱싱
현재 문제: 재인덱싱 시 기존 chunks 삭제 → 새 chunks 생성 사이에 검색 공백 발생.

해법:
1. 새 청크를 임시 컬렉션(insurance_chunks_staging)에 먼저 생성
2. 전체 완료 후 원자적 스위칭: staging → production
3. 구 청크는 insurance_chunks_archive로 이동 (7일 보관 후 자동 삭제)
4. 스위칭 중 검색은 기존 production에서 계속 서비스

구현:
- reindex/route.ts: 재인덱싱 트리거 시 staging 모드로 전환
- pdfIndexing.ts: 재인덱싱 시 대상 컬렉션을 staging으로 변경
- 스위칭 API: POST /api/admin/insurance/reindex/switch — staging을 production으로 승격

※ pdfIndexing.ts의 청킹 로직(structureAwareChunk)은 1팀이 Phase 1에서 만든 것. 건드리지 말 것. 인덱싱 대상 컬렉션만 분기.

### 작업 2: 비용 모니터링
1. nextapp/src/lib/monitoring/costMonitor.ts:
   - Firestore 읽기/쓰기 카운터 (api_usage_daily 컬렉션)
   - 일일 Gemini API 호출 횟수 + 예상 비용 추적
   - 쿼리당 비용 = 임베딩비 + 검색 읽기비 + (캐시 미스 시 생성비)

2. nextapp/src/lib/monitoring/alerting.ts:
   - 일일 비용 임계값 초과 시 경고 로그
   - 비정상 트래픽 감지: 시간당 쿼리 수 급증 시 플래그

3. nextapp/src/app/api/admin/monitoring/route.ts:
   - GET: 일일/주간/월간 비용 요약 반환
   - 어드민 인증 필수

### 작업 3: 재인덱싱 이력 강화
- 기존 history/route.ts에 버전별 diff 정보 추가
- 재인덱싱 시 변경된 청크 수, 추가/삭제된 조항 수 기록
- 인덱싱 품질 지표: 평균 청크 크기, 단서조항 보존율 등

### 주의사항
- 1팀이 vector-search/route.ts, answerValidator.ts, pdfIndexing.ts(청킹 부분) 동시 작업 중
- pdfIndexing.ts는 인덱싱 대상 컬렉션 분기와 메타데이터 관련만 수정. 청킹 함수 건드리지 말 것
- vector-search/route.ts 건드리지 말 것 (1팀이 통합 중)