---
task_id: task-2329
type: plan
scope: task
created: 2026-04-30
updated: 2026-04-30
status: completed
---

# 계획서: task-2329

**task**: task-2329
**목표**: InsuRo 트렌드 인사이트 Phase 2 — 키워드 풀 한계 극복 (DB 4테이블 + 급등감지 + 뉴스 파이프라인 + 시즌 캘린더 + UI)
**승인**: 17사이클 에이전트 미팅 만장일치 (2026-04-30)
**근거**: `/home/jay/workspace/memory/meetings/2026-04-30-keyword-pool-limit-overcome.md`

---

## 목표

1. DB 4테이블 마이그레이션 (keyword_pool, news_keyword_candidates, surge_events, keyword_stats_monthly)
2. 기존 keywords 3,500개 → keyword_pool 초기 마이그레이션
3. 급등 감지 스크립트 (daily_surge_detect.py) — 200%/시즌 300% 임계값
4. 뉴스 키워드 파이프라인 (news_keyword_extract.py) — opt-out 자동 승인
5. 시즌 캘린더 부스트 (season_calendar_check.py)
6. 크론 업데이트 (run_trend_pipeline.sh Step 0, 3.5 추가)
7. 대시보드 "오늘 뜨는 키워드" UI + API 엔드포인트
8. 90일 데이터 압축 (keyword_data_compress.py)

## 범위

### 포함
- DB 4테이블 DDL + 마이그레이션
- 스크립트 4개 신규 (급등감지, 뉴스추출, 시즌체크, 압축)
- 도메인 사전 JSON 1개 (500개 보험 용어)
- run_trend_pipeline.sh 수정
- main.py surge-events API 엔드포인트
- TrendInsightTab.tsx 급등 섹션 UI

### 제외 (Phase 3 이후)
- LLM 키워드 예측
- 커뮤니티 RSS
- SearchAd 재귀 확장
- 적응적 샘플링 티어링 (API 2세트로 불필요)

## 위임 계획

- Step 1-3 (DB + 마이그레이션 + 급등감지): **루(백엔드)** — SQL/Python 서버 작업
- Step 5-6 (뉴스파이프라인 + 시즌캘린더): **루(백엔드)** — Python 서버 스크립트
- Step 7 (크론 업데이트): **루(백엔드)** — shell 스크립트 수정
- Step 8 (대시보드 UI): **브리짓(프론트엔드)** — React/TypeScript
- Step 9 (90일 압축): **루(백엔드)** — Python 스크립트
- API 엔드포인트: **루(백엔드)** — FastAPI

## 검증 기준

- DB 4테이블 존재: `SELECT table_name FROM information_schema.tables` → 4개 테이블
- keyword_pool 행 수: `SELECT count(*) FROM keyword_pool` → 3,500개
- daily_surge_detect.py 드라이런: `python3 scripts/daily_surge_detect.py --dry-run` → exit 0
- news_keyword_extract.py 드라이런: `python3 scripts/news_keyword_extract.py --dry-run` → exit 0
- npm run build 성공
