# task-201.1 완료 보고서: InsuWiki 유튜브 채널 자동화 상태 점검

**점검일**: 2026-03-03 23:30 KST
**점검자**: Dev3 Team

---

## 1. 크롤링 대상 채널 현황

| 채널명 | 채널 ID | 활성 | 마지막 크롤링 |
|--------|---------|------|---------------|
| 인스킹 ins-king | UCc4eDzx9OsbZpvNpaL-OVqg | ✅ | 2026-03-03 08:47:08 KST |
| 보험명의정닥터 | UC1oBpjjwMp0WGBfdg-0a5qQ | ✅ | 2026-03-03 08:48:44 KST |

**스케줄**: Cloud Scheduler 6시간마다 (00:00, 06:00, 12:00, 18:00 KST)

---

## 2. Firestore 데이터 분석

### 전체 영상 수: 43개

| 채널 | 영상 수 |
|------|---------|
| 보험명의정닥터 | 23개 |
| 인스킹 ins-king | 20개 |

### 자막 추출 상태

| 항목 | 수량 | 비율 |
|------|------|------|
| 자막 있음 (hasTranscript=true) | **0개** | 0% |
| 자막 없음 (hasTranscript=false) | **43개** | 100% |
| 전사 방식 (transcriptionSource) | 모두 N/A | - |

### 요약 생성 상태

| 항목 | 수량 |
|------|------|
| chunkText 있음 (요약 저장) | 43개 |
| 요약 Drive URL 있음 | 40개 |
| 전문 Drive URL 있음 | **0개** |

### 요약 대기 큐 (youtube_summary_queue)

| 상태 | 수량 |
|------|------|
| pending | 0개 |

---

## 3. 파이프라인 실행 이력

| 실행 시각 | 상태 | 처리 | 스킵 | 실패 | 비고 |
|-----------|------|------|------|------|------|
| 2026-03-03 08:47 | ✅ completed | 3 | 0 | 0 | 정상 |
| 2026-03-03 02:41 | ✅ completed | 12 | 9 | 0 | 정상 |
| 2026-03-02 20:32 | ⚠️ running | 0 | 0 | 0 | **미완료 상태로 멈춤** |
| 2026-03-02 14:48 | ✅ completed | 0 | 0 | 2 | 채널 처리 에러 |
| 2026-03-02 14:39 | ✅ completed | 0 | 0 | 2 | Gemini API + Firestore 에러 |

### 발견된 에러 메시지

1. **Firestore Document 에러** (2026-03-02 14:48, 14:39):
   ```
   Value for argument "data" is not a valid Firestore document. 
   Cannot use...
   ```

2. **Gemini API 에러** (2026-03-02 14:39):
   ```
   [GoogleGenerativeAI Error]: Error fetching from https://generative...
   ```

---

## 4. 환경 변수 설정 상태

| 변수명 | 상태 | 용도 |
|--------|------|------|
| YOUTUBE_API_KEY | ✅ 설정됨 | YouTube Data API |
| GEMINI_API_KEY | ✅ 설정됨 | Gemini 2.5 Flash 요약 |
| GOOGLE_DRIVE_FOLDER_ID | ✅ 설정됨 | Drive 업로드 |
| DRIVE_CLIENT_ID | ✅ 설정됨 | Drive OAuth |
| DRIVE_CLIENT_SECRET | ✅ 설정됨 | Drive OAuth |
| DRIVE_REFRESH_TOKEN | ✅ 설정됨 | Drive OAuth |
| **OPENAI_API_KEY** | ❌ **미설정** | **Whisper STT** |

---

## 5. 문제점 분석

### 🚨 Critical: 자막 추출 0% 실패

**현상**: 43개 영상 모두 자막 추출 실패 (hasTranscript=false)

**원인 분석**:
1. **YouTube 자막 API 제한**: YouTube가 자막 추출 API에 서명 파라미터를 요구하도록 변경됨
   - 코드에서는 이미 서명 URL 추출 로직이 구현되어 있으나 여전히 실패
   - 두 채널이 실제로 자막을 제공하지 않을 가능성

2. **Whisper STT 폴백 미작동**: 
   - `OPENAI_API_KEY`가 `.env.local`에 설정되지 않음
   - whisperStt.ts 코드에서 키가 없으면 즉시 null 반환

**영향**:
- 전문(_전문.md) Drive 업로드 안 됨 (0개)
- "제목+설명" 기반으로만 요약 생성됨 (품질 저하)
- L3 청크(youtube_transcripts) 저장 안 됨

### ⚠️ Warning: 파이프라인 실행 멈춤

**현상**: 2026-03-02 20:32 실행이 running 상태로 멈춤

**원인 추정**:
- Cloud Functions 타임아웃 (540초 = 9분)
- 외부 API 호출 지연
- 메모리 부족

### ⚠️ Warning: Firestore 저장 에러

**현상**: 2026-03-02 14:48, 14:39 실행에서 채널 처리 실패

**원인**:
- 유효하지 않은 Firestore document 데이터
- Gemini API 응답 지연/실패

---

## 6. 채널별 상태 요약

### 채널 1: 보험명의정닥터

| 항목 | 상태 |
|------|------|
| 활성 | ✅ |
| 마지막 크롤링 | 2026-03-03 08:48 |
| 영상 수 | 23개 |
| 자막 추출 | ❌ 0% (0/23) |
| 요약 생성 | ✅ (제목+설명 기반) |
| Drive 업로드 | ✅ |

### 채널 2: 인스킹 ins-king

| 항목 | 상태 |
|------|------|
| 활성 | ✅ |
| 마지막 크롤링 | 2026-03-03 08:47 |
| 영상 수 | 20개 |
| 자막 추출 | ❌ 0% (0/20) |
| 요약 생성 | ✅ (제목+설명 기반) |
| Drive 업로드 | ✅ |

---

## 7. 권장 조치 사항

### 즉시 조치 (Critical)

1. **OPENAI_API_KEY 설정**
   ```bash
   # .env.local에 추가
   OPENAI_API_KEY=sk-...
   
   # Cloud Functions에 Secret 등록
   firebase functions:secrets:set OPENAI_API_KEY
   ```
   
2. **함수 재배포**
   ```bash
   cd /home/jay/projects/insuwiki/functions
   npm run deploy
   ```

### 후속 조치

3. **자막 추출 로직 점검**
   - YouTube 페이지 HTML 구조 변경 확인
   - 서명 URL 추출 로직 디버깅
   - 두 채널의 실제 자막 제공 여부 수동 확인

4. **파이프라인 모니터링 강화**
   - 실행 멈춤 감지 알림 추가
   - 타임아웃 시 자동 재시도 로직

5. **Firestore 인덱스 생성**
   - pipeline_logs 컬렉션에 복합 인덱스 생성 필요

---

## 8. 점검 결과 요약

| 항목 | 상태 |
|------|------|
| 채널 등록 | ✅ 정상 (2개 활성) |
| 스케줄 실행 | ✅ 정상 (6시간마다) |
| YouTube API | ✅ 정상 |
| Gemini 요약 | ✅ 정상 |
| Drive 업로드 | ✅ 정상 (요약) |
| **자막 추출** | ❌ **0% 실패** |
| **Whisper STT** | ❌ **미작동 (키 없음)** |
| 전문 저장 | ❌ 0개 |
| L3 청크 | ❌ 0개 |

**종합 판정**: ⚠️ **부분 작동**
- 크롤링, 요약, Drive 업로드는 정상
- 자막 추출 및 Whisper STT 미작동으로 전문 기반 서비스 불가

---

**보고서 작성 완료**: 2026-03-03 23:30 KST

---

## 9. QC 검증 결과

```json
{
  "task_id": "task-201.1",
  "verified_at": "2026-03-03T23:30:36",
  "overall": "PASS",
  "checks": {
    "api_health": {"status": "SKIP"},
    "file_check": {"status": "PASS", "details": ["OK (5810 bytes): reports/task-201.1.md", "DONE FILE FOUND", "REPORT FOUND"]},
    "data_integrity": {"status": "PASS", "details": ["status='completed'", "events/.done file: FOUND", "timeline: 6분 30초"]},
    "test_runner": {"status": "SKIP", "details": ["코드 변경 없음 - 점검 작업"]}
  },
  "summary": "2 PASS, 2 SKIP"
}
```

## 10. Dev3 팀장 검토 의견

- GLM-5가 Firebase CLI 인증 불가 상황에서 Firestore SDK 직접 조회로 우회하여 실제 데이터 확인 성공
- 43개 영상 전체 hasTranscript=false 발견은 핵심 문제 진단
- OPENAI_API_KEY 미설정이 Whisper STT 미작동의 직접 원인으로 정확히 파악됨
- 파이프라인 멈춤(running 상태) 및 Firestore 에러도 모두 포착됨
- **수정 사항 없음** (코드 분석/점검 작업이므로 GLM 결과 그대로 채택)
