# task-2125: InsuRo 콘텐츠/AI 기능 전수 E2E 검증 (Lv.4)

## ★ 프로젝트: `/home/jay/projects/InsuRo/`

## 목적
프론트엔드에 구현된 모든 콘텐츠 생성/AI 기능이 **실제로 작동**하는지 E2E 전수 검증.
UI만 있고 백엔드 미연결, 옵션 선택이 API에 반영 안 되는 경우 등을 식별.

## 검증 대상 — 14개 기능

### A. 콘텐츠 생성 (Generate.tsx)
1. **채널별 생성**: 네이버블로그/티스토리/인스타/스레드/유튜브 5개 채널 각각 콘텐츠 생성 → 실제 결과 반환 확인
2. **AI 토픽 제안**: "AI 추천" 버튼 → suggest-topics Edge Function 호출 → 토픽 목록 반환
3. **설정 패널 옵션 적용 확인**:
   - 보험 카테고리 선택 → 생성된 콘텐츠에 해당 보험 관련 내용 포함?
   - 타겟 연령/성별/라이프스테이지 선택 → 콘텐츠 톤에 반영?
   - 콘텐츠 톤 8종 (정보형/공감형/경험담형 등) → 실제 톤 차이 있는지?
   - 컴플라이언스 필터 3단계 → full일 때 면책조항 자동 삽입?
   - AI 모델 선택 (Gemini Flash/Pro, Claude Sonnet) → 실제 다른 모델로 호출?
   - 추가 프롬프트 → 생성 결과에 반영?
   - CPA 링크 → 콘텐츠에 삽입?
4. **프리셋 저장/로드**: 설정 저장 → 재로드 시 동일 설정 복원?
5. **토큰/쿼터 추적**: 생성 후 남은 토큰 감소 확인

### B. 이미지 생성 (ImageGeneratorPanel.tsx)
6. **이미지 생성**: generate-image Edge Function 호출 → 이미지 반환
7. **이미지 옵션 적용**: 레이아웃/텍스트밀도/비율/컨셉/배경패턴/폰트 선택 → 결과에 반영?
8. **무료 재시도**: 2회 무료 → 3회째부터 유료 안내?
9. **피드백 기반 재생성**: 피드백 모달 → 카테고리 선택 → 재생성 결과 다른지?

### C. 키워드 분석 (KeywordAnalysis.tsx)
10. **네이버 키워드 검색**: search_type="keyword" → keywordList 반환 (task-2124에서 수정 중)
11. **구글 트렌드**: keyword + timeframe → 타임라인 차트 + 관련 쿼리 반환
12. **정보성 키워드 분석**: keywords/analyze → 폴링 → 결과 반환 (Max+ 플랜)

### D. AI 채팅 기능
13. **마켓 뉴스레터 챗**: newsletter-chat → SSE 스트리밍 응답
14. **보험료 비교 챗**: premium-chat → SSE 스트리밍 응답

### E. 플랜 게이트 검증
15. **Free 사용자**: 네이버블로그만, Gemini Flash만, 월5건, 이미지 없음
16. **Basic 사용자**: 이미지 생성 가능 (4장/요청, 40장/월)
17. **Pro 사용자**: AI 토픽 추천, 모든 채널, 월100건
18. **Max 사용자**: 정보성 키워드, Claude Sonnet 모델

## 검증 방법

### Phase 1: API 직접 호출 검증 (서버 사이드)
각 Supabase Edge Function과 InsuRo API 엔드포인트를 **curl/httpx로 직접 호출**하여 응답 확인.
- 정상 응답 반환하는지
- 옵션 파라미터가 실제로 처리되는지 (빈 응답 vs 옵션별 차이)

```bash
# 예시: suggest-topics 직접 호출
curl -s "https://zayhfjuwviporbzokudr.supabase.co/functions/v1/suggest-topics" \
  -H "Authorization: Bearer <JWT>" \
  -H "Content-Type: application/json" \
  -d '{"channel":"naver-blog","settings":{"insuranceCategory":"암보험"}}'

# 예시: generate-content 스트리밍 호출
curl -s "https://zayhfjuwviporbzokudr.supabase.co/functions/v1/generate-content" \
  -H "Authorization: Bearer <JWT>" \
  -H "Content-Type: application/json" \
  -d '{"channel":"naver-blog","topic":"30대 암보험 비교","settings":{"contentTone":"정보형","complianceFilter":"full"},"stream":true}'

# 예시: Google Trends
curl -s -X POST "http://localhost:8001/api/insuro/google-trends" \
  -H "Authorization: Bearer <JWT>" \
  -H "Content-Type: application/json" \
  -d '{"keyword":"실비보험","timeframe":"today 12-m","geo":"KR"}'
```

### Phase 2: Playwright E2E 브라우저 검증
실제 insuro.biz에 로그인하여 브라우저에서 기능 테스트.
- 각 옵션 선택 → 생성 버튼 → 결과 확인
- 네트워크 요청 캡처하여 실제 전송되는 파라미터 확인
- 에러 발생 시 콘솔 로그 캡처

### Phase 3: 결과 분류
각 기능을 아래 3개 상태로 분류:
- ✅ **정상**: API 호출 + 옵션 반영 + 결과 반환
- ⚠️ **부분 동작**: API 호출되지만 옵션이 무시되거나 결과 불완전
- ❌ **미동작**: API 에러, 연결 안 됨, 또는 UI만 존재

## ★ 먼저 읽을 파일
- `/home/jay/projects/InsuRo/src/pages/Generate.tsx` — L1~200 (콘텐츠 생성 로직)
- `/home/jay/projects/InsuRo/src/components/GenerateSettingsPanel.tsx` — L1~100 (설정 옵션)
- `/home/jay/projects/InsuRo/src/data/generateOptions.ts` — L1~100 (채널/옵션 정의)
- `/home/jay/projects/InsuRo/src/pages/KeywordAnalysis.tsx` — L60~130 (키워드 검색)
- `/home/jay/projects/InsuRo/src/pages/MarketNewsletter.tsx` — L1~100 (AI 챗)
- `/home/jay/projects/InsuRo/server/main.py` — L785~860 (네이버/구글 API)

## 검증 시나리오 (이게 되면 성공)

### 시나리오 1: 콘텐츠 생성 옵션 반영
1. insuro.biz → 콘텐츠 생성 → 보험 카테고리: "암보험" + 톤: "공감형" + 컴플라이언스: "full"
2. 생성 실행 → 콘텐츠에 암보험 관련 내용 + 공감 톤 + 면책조항 포함
3. 같은 토픽으로 톤을 "Q&A형"으로 변경 → 결과가 달라지는지 확인

### 시나리오 2: 이미지 생성 옵션 반영
1. 콘텐츠 생성 후 이미지 탭 → 레이아웃: "카드뉴스" + 비율: 1:1 + 컨셉: "따뜻한감성"
2. 이미지 생성 → 결과 이미지가 설정과 일치하는지

### 시나리오 3: 구글 트렌드
1. 키워드 분석 → 구글 트렌드 탭 → "실비보험" 검색
2. 타임라인 차트 + 관련 쿼리 표시

### 시나리오 4: AI 채팅
1. 마켓 뉴스레터 → "이번 달 핵심 포인트 요약" 질문
2. SSE 스트리밍으로 답변 수신

### 시나리오 5: 플랜 게이트
1. Free 계정으로 로그인 → 티스토리 채널 선택 시 "Pro+ 필요" 안내
2. 이미지 생성 버튼 → "Basic+ 필요" 안내

## 보고서 형식
기능별 검증 결과를 아래 형식으로 정리:
```
| # | 기능 | API 연결 | 옵션 반영 | 결과 품질 | 상태 | 비고 |
```

## 완료 시그니처
- 14개+ 기능 각각에 대해 ✅/⚠️/❌ 상태 분류 완료
- ❌ 항목은 에러 내용과 수정 방향 포함
- Playwright 스크린샷 첨부 (주요 기능 최소 5장)
- 보고서: `memory/reports/task-2125.md`

## 레벨
- critical (Lv.4 — 전수 E2E 검증)

## 프로젝트
- insuro
