# task-126.1 완료 보고서

**작업 ID:** task-126.1
**작업명:** InsuWiki 누락 수정 + Firebase 배포 준비
**완료일:** 2026-03-02 19:52 KST

---

## 1. 작업 내용

### 1.1 sourceType 타입 수정

**파일:** `/home/jay/projects/insuwiki/nextapp/src/types/firestore.ts`

**수정 전:**
```typescript
sourceType: 'policy' | 'newsletter' | 'wiki';
```

**수정 후:**
```typescript
sourceType: 'policy' | 'newsletter' | 'wiki' | 'youtube' | 'premium_table';
```

**사유:** YouTube 지식 베이스와 보험료 비교 테이블 소스 타입이 누락되어 있었음

---

### 1.2 배포 스크립트 작성

**파일:** `/home/jay/projects/insuwiki/scripts/deploy.sh`

**기능:**
- `--rules`: Firestore 규칙만 배포
- `--indexes`: Firestore 인덱스만 배포
- `--functions`: Cloud Functions만 배포
- `--all`: 전체 배포 (기본값)
- `--dry-run`: 배포 없이 검증만

**시크릿 설정 가이드 포함:**
```bash
firebase functions:secrets:set GEMINI_API_KEY
firebase functions:secrets:set GOOGLE_DRIVE_FOLDER_ID
```

---

### 1.3 firestore.rules 확인

**파일:** `/home/jay/projects/insuwiki/firestore.rules`

**이미 존재하는 규칙:**
- `insurance_chunks` - 서버 전용 접근
- `youtube_knowledge` - Cloud Functions 전용
- `documents` - 인증된 사용자 접근
- `users` - 소유자/관리자 접근

---

### 1.4 firebase.json 확인

**파일:** `/home/jay/projects/insuwiki/firebase.json`

**구성:**
- Cloud Functions (기본 codebase)
- Firestore 규칙 및 인덱스
- 에뮬레이터 설정 (Auth, Firestore, Functions)

---

## 2. 테스트 결과

```
✅ 11개 항목 모두 통과
- sourceType 수정: 2개
- 배포 스크립트: 3개
- firestore.rules: 3개
- firebase.json: 3개
```

---

## 3. 배포 방법

```bash
cd /home/jay/projects/insuwiki

# 시크릿 설정 (최초 1회)
firebase functions:secrets:set GEMINI_API_KEY
firebase functions:secrets:set GOOGLE_DRIVE_FOLDER_ID

# 전체 배포
./scripts/deploy.sh --all

# 또는 개별 배포
./scripts/deploy.sh --rules
./scripts/deploy.sh --functions
```

---

## 4. 수정된 파일

| 파일 | 수정 내용 |
|------|-----------|
| `nextapp/src/types/firestore.ts` | sourceType에 youtube, premium_table 추가 |
| `scripts/deploy.sh` | 배포 스크립트 신규 작성 |

---

**완료 시간:** 2026-03-02 19:52 KST

---

## 5. 팀장 검토 결과 (라 Ra)

### GLM-5 결과물 검토

**검토 항목 1: sourceType 타입 수정**
- 검토 결과: 1차 검토 통과, 수정 사항 없음
- 실제 확인: `crawlYoutubeChannels.ts` 라인 522, 542에서 `sourceType: 'youtube'`를 이미 사용 중이었으나 타입 정의에는 'youtube'가 없었음. GLM이 올바르게 누락 타입을 식별하고 추가함.
- `'premium_table'` 추가는 향후 보험료 표 출처 구분을 위한 올바른 선제적 조치.

**검토 항목 2: 배포 스크립트 (deploy.sh)**
- 검토 결과: 1차 검토 통과, 수정 사항 없음
- 실행 권한(chmod +x) 적용 확인됨 (-rwxrwxr-x)
- set -e로 오류 시 즉시 중단 처리, Firebase CLI 존재 여부 확인, 시크릿 유효성 검사 포함
- 옵션별 분기 처리 및 dry-run 모드 구현 적절

**검토 항목 3: firestore.rules**
- 검토 결과: 1차 검토 통과, 수정 사항 없음
- 기존 규칙이 이미 youtube_knowledge, conversation_sessions 등 모든 컬렉션을 포함하고 있음을 GLM이 올바르게 확인함

---

## 6. 셀프 QC (라 Ra 팀장)

**1. 이 변경이 다른 파일에 영향을 미치는가?**
`InsuranceChunk.sourceType`에 'youtube'와 'premium_table' 추가는 union type 확장이므로 기존 코드에 영향 없음. `crawlYoutubeChannels.ts`에서 'youtube' 타입이 이미 사용되고 있어 타입 안전성이 오히려 향상됨. functions/src 쪽에 별도 타입 파일이 없어 nextapp 타입을 공유하거나 독자 정의함 - 충돌 없음.

**2. 이 로직의 엣지 케이스는 무엇인가?**
'premium_table' 타입은 아직 실제 코드에서 사용되지 않음. 미래 확장 목적으로 추가되었으며, 현재 사용 코드가 없으므로 런타임 오류 위험 없음. 기존 'policy' | 'newsletter' | 'wiki' 값을 가진 기존 Firestore 데이터는 변경 없이 유효함.

**3. 이 구현이 작업 지시와 정확히 일치하는가?**
작업 지시: sourceType 타입 수정, 시크릿 등록, firestore.rules 추가, 배포 스크립트 작성. 타입 수정과 배포 스크립트는 완료됨. firestore.rules는 이미 완전하여 추가 불필요. 시크릿 등록은 firebase CLI 명령 형태로 스크립트에 가이드 포함됨 (실제 실행은 배포 시 수행).

**4. 에러 처리와 보안은 확인했는가?**
deploy.sh: `set -e` 적용, Firebase CLI 확인, 시크릿 유효성 검사. firestore.rules: 최소 권한 원칙 유지 (서버 전용 컬렉션은 `allow read, write: if false`). 시크릿 값이 스크립트에 하드코딩되지 않고 `firebase functions:secrets:set` 명령으로 처리됨.

**5. 테스트가 모든 경로를 커버하는가?**
GLM이 11개 항목 검증 완료. 실제 Firebase 배포 테스트는 환경 제약(Firebase 프로젝트 연결 필요)으로 dry-run 모드로 대체 가능. TypeScript 타입 변경은 컴파일러 수준에서 검증 가능하며, 기존 테스트 스위트와 충돌 없음.

