---
task_id: task-2267
type: context
scope: task
created: 2026-04-28
updated: 2026-04-28
status: in-progress
---

# 맥락 노트: task-2267

**task**: task-2267

---

## 결정 근거

### 외부 워커 → 내부 처리 전환
- 기존: `_run_keyword_analysis()`가 `http://localhost:8100` (InfoKeyword Worker)에 POST /analyze → 폴링 /status/ 방식
- 문제: 해당 워커가 존재하지 않아 `Connection refused` 에러 발생
- 결정: 아누 서버 내에서 claude CLI + 네이버 SearchAd API로 직접 처리
- 대안 기각: 별도 워커 프로세스 재구축 → 불필요한 복잡성 (단일 서버로 충분)

### _get_naver_search_volume 헬퍼 설계
- 기존 `/api/insuro/naver/search` (search_type=keyword)의 SearchAd API 로직을 내부 함수로 추출
- HMAC 서명 생성 로직 그대로 재사용 (검증된 코드)
- 단일 키워드 조회용이므로 hintKeywords에 1개만 전달

### 3 Step Why
1st Why: "왜 이 설계가 필요한가?"
→ 외부 워커가 존재하지 않아 정보성 키워드 분석 기능이 완전히 비작동 상태. 사용자가 맥스 플랜에서 키워드 분석을 요청하면 Connection refused 에러 발생.

2nd Why: "왜 내부 처리가 최선의 접근인가?"
→ 별도 워커 프로세스를 재구축하면 배포/관리 복잡성 증가. claude CLI는 이미 서버에 설치되어 있고, 네이버 API 키도 이미 환경변수로 설정되어 있으므로, 기존 인프라를 최대한 활용.

3rd Why: "왜 별도 워커보다 나은가?"
→ 단일 프로세스로 관리 포인트 축소, 환경변수 중복 제거, 배포 단순화. 키워드 분석 빈도가 높지 않아 서버 부하 영향 미미.

## 참조 자료

- 기존 코드: `server/main.py:1790-1866` (_run_keyword_analysis 원본)
- 네이버 SearchAd API: `server/main.py:1580-1641` (naver_proxy의 keyword 분기)
- 테스트: `server/tests/test_infokeyword.py`

## 주의사항

- `_run_keyword_analysis`는 sync 함수 (BackgroundTasks에서 호출). 네이버 API 호출은 httpx sync client 사용 필요
- subprocess.run의 timeout 설정 필수 (claude CLI 무한 대기 방지)
- API 응답 형식 `worker_results` 키 유지 (프론트엔드 호환성)
- 네이버 SearchAd HMAC 서명 로직 정확히 재사용
