# 인포키워드 Step5 블로그 Top10 홍보성 분석 로직 디버깅

## 태스크 ID: task-891.1

## 목표
인포키워드 Step5 "블로그 TOP10 홍보성 분석" 기능이 제대로 동작하지 않는 원인을 조사하고, 문제를 수정하여 정상 동작하게 한다.

## 현상
- Step5 홍보성 분석이 잘 안된다고 제이회장님 보고
- 정확한 증상은 코드와 로그를 확인하여 파악 필요

## 프로젝트 경로
- 프로젝트 루트: `/home/jay/projects/InfoKeyword/`
- 워커: `/home/jay/projects/InfoKeyword/worker/`

## 핵심 파일 (반드시 읽고 분석할 것)

### 1. 분석 코어
- `/home/jay/projects/InfoKeyword/worker/pipeline/analyzer.py` — 라인 95-291
  - `_analyze_single_blog()` (라인 95-213): 개별 블로그 홍보성 판정
  - `_step5_promotional()` (라인 216-291): Step5 전체 오케스트레이션
  - 규칙 기반 판정: detect_phone_numbers, detect_addresses, detect_external_links, detect_attachment, has_talktalk, has_place, analyze_blog_images

### 2. 블로그 검색 & 크롤링
- `/home/jay/projects/InfoKeyword/worker/crawler/blog_search.py` — 라인 132-201
  - `search_blogs()`: 네이버 블로그 TOP10 크롤링
  - 광고 항목 필터링 로직 (CSS class, data-attribute 감지)
- `/home/jay/projects/InfoKeyword/worker/crawler/blog_content.py`
  - `get_blog_content()`: 블로그 본문/이미지/링크 추출

### 3. LLM 하이브리드 판정
- `/home/jay/projects/InfoKeyword/worker/analyzer/llm_promotional.py` — 라인 98-150
  - `judge_promotional()`: Claude CLI 기반 홍보성 판정
  - LLM_PROMOTIONAL_ENABLED 설정에 따라 활성/비활성

### 4. 설정
- `/home/jay/projects/InfoKeyword/worker/config.py` — 라인 34-46
  - BLOG_TOP_N = 10
  - PROMOTIONAL_THRESHOLD = 0.5
  - LLM_PROMOTIONAL_ENABLED = false (기본)

### 5. 데이터 모델
- `/home/jay/projects/InfoKeyword/worker/_step_models.py` — 라인 46-63

### 6. API 엔드포인트
- `/home/jay/projects/InfoKeyword/worker/main.py`
  - POST /api/analyze, GET /api/status/{analysis_id}

## 조사 항목

### A. 증상 확인
1. 워커가 실행 중인지 확인: `curl -s http://localhost:8100/health`
2. 실제 키워드로 분석 요청하여 Step5 결과 확인
3. 워커 로그 확인: `journalctl` 또는 프로세스 stdout 확인
4. Step5 결과가 null/빈값인지, 아니면 잘못된 값인지 확인

### B. 크롤링 문제 가능성
1. 네이버 블로그 검색 HTML 구조 변경 여부 (셀렉터 깨짐)
2. `search_blogs()` 실행 시 빈 리스트 반환 여부
3. `get_blog_content()` 실행 시 본문 추출 실패 여부
4. 광고 필터링 CSS 클래스 변경 여부

### C. 분석 로직 문제 가능성
1. 규칙 기반 판정 정확도 (False Positive/Negative 과다?)
2. LLM 판정 활성/비활성 상태 확인
3. asyncio 관련 에러 (Semaphore, 동시성 이슈)
4. 예외 처리 누락으로 사일런트 실패

### D. API/프론트 연결 문제 가능성
1. Step5 결과가 API 응답에 포함되는지
2. 프론트엔드에서 Step5 데이터를 올바르게 렌더링하는지

## 작업 순서
1. 위 파일들을 읽고 전체 흐름 파악
2. 실제 테스트 키워드로 분석 실행하여 증상 재현
3. 문제 원인 특정
4. 수정 구현
5. 수정 후 테스트 실행하여 정상 동작 확인
6. 보고서 작성

## 작업 후 처리
- 보고서: `memory/reports/task-891.1.md`
- task-timer end: `python3 /home/jay/workspace/memory/task-timer.py end task-891.1`
- .done: `touch /home/jay/workspace/memory/events/task-891.1.done`
- 아누에게 보고: `cokacdir --sendfile /home/jay/workspace/memory/reports/task-891.1.md --chat 6937032012 --key $COKACDIR_KEY_ANU`