---
task_id: task-2136
type: plan
scope: task
created: 2026-04-23
updated: 2026-04-23
status: completed
---

# 계획서: task-2136

**task**: task-2136
**목표**: 3단 하이브리드 키워드 소싱 Phase 1 MVP — BaseCollector 패턴 + NaverCollector + 정규화/필터 + TOP 20 리스트 뷰
**승인**: 에이전트 미팅 19인 합의 [2026-04-23]
**근거**: `/home/jay/workspace/memory/meetings/2026-04-23-google-trends-architecture.md`

---

## 목표

1. BaseCollector 추상 클래스 → FixedCollector + NaverCollector 구현
2. KeywordNormalizer(동의어 30쌍) + NegativeFilter(50개) 구현
3. 키워드 3상태 모델(active/inactive/retired) + 스코어링 v1
4. REST API 3개 엔드포인트 추가 (top/search/detail)
5. 프론트엔드 TOP 20 리스트 뷰 + 컬러태그 + 신뢰도 표시

## 범위

### 포함
- 모듈 1~8 전체 (task 파일 참조)
- DB ALTER TABLE (source, status, naver_search_volume, score, last_scored_at, retired_at 컬럼)
- config 파일 4종 (fixed_keywords.txt, synonyms.json, negative_words.json, keyword_config.yaml)
- 테스트 코드

### 제외 (다음 페이즈 이후)
- L3 커뮤니티 키워드 수집
- 급상승 태그 (구글 트렌드 변동률 합산)
- 지역별 히트맵
- C안 유료 API 연동

## 위임 계획

- 백엔드 (모듈 1~7, API): **루(Lugh)** — BaseCollector/FixedCollector/NaverCollector, Normalizer, NegativeFilter, 스코어링, DB 마이그레이션, API 엔드포인트
- 프론트엔드 (모듈 8): **브리짓(Brigid)** — KeywordAnalysis.tsx에 키워드 순위 탭 추가
- 테스트: **모리건(Morrigan)** — 단위 테스트 + 통합 테스트

## 검증 기준

- BaseCollector 상속 패턴: `grep -r "class FixedCollector(BaseCollector)" server/collectors/` → 1건
- NaverCollector API 호출: `grep -r "NAVER_SEARCHAD" server/collectors/naver.py` → HMAC 인증 코드 존재
- Normalizer: `python3 -c "from server.utils.normalizer import KeywordNormalizer"` → import 성공
- NegativeFilter: `python3 -c "from server.utils.negative_filter import NegativeFilter"` → import 성공
- TOP 20 API: `curl /api/insuro/keywords/top?limit=20` → 200 + score 내림차순
- 프론트엔드: Playwright 스크린샷에서 "키워드 순위" 탭 확인
