# task-2101: InsuRo 네이버 키워드 검색량 조회 오류 수정

## SCQA

**S**: InsuRo AI 마케팅 → AI 키워드 분석 → 검색량 조회 탭에서 키워드 입력 후 검색 시 에러가 발생한다. 대시보드의 네이버 블로그탭 키워드 분석 기능은 정상 동작 중이다.

**C**: 백엔드가 네이버 DataLab API(트렌드, 상대비율만 반환)를 호출하고 있어 프론트엔드가 기대하는 검색량 데이터(relKeyword, monthlyPcQcCnt 등 keywordList 형식)가 반환되지 않는다. 블로그 검색 fallback은 부정확한 데이터를 표시하여 문제를 은폐한다.

**Q**: 대시보드에서 동작 중인 네이버 SearchAd /keywordstool API를 InsuRo에 이식하여 정상 검색량 데이터를 반환할 수 있는가?

**A**: 백엔드에 `search_type: "keyword"` 분기를 추가하여 네이버 SearchAd /keywordstool API를 호출하도록 수정. 프론트엔드에서 검색 타입을 "keyword"로 변경하고 블로그 fallback을 제거. "실비보험" 검색 시 754개 키워드, PC검색량 7400, 모바일 33000, 경쟁강도 "높음" 등 정상 반환 확인. npm run build 성공.

---

## 수정 파일 및 검증

| 파일 | 변경 내용 | grep 검증 | 상태 |
|------|-----------|-----------|------|
| server/main.py:11-13 | base64, hmac, urllib.parse import 추가 | grep "hmac_mod" OK | verified |
| server/main.py:791-825 | search_type="keyword" SearchAd API 호출 분기 추가 | grep "keywordstool" OK | verified |
| server/main.py:793-795 | NAVER_SEARCHAD_* 환경변수 검증 + 503 에러 | grep "NAVER_SEARCHAD" OK | verified |
| src/pages/KeywordAnalysis.tsx:83 | search_type: "datalab" → "keyword" | grep "keyword" OK | verified |
| src/pages/KeywordAnalysis.tsx:60-105 | 블로그 fallback 제거, 에러 메시지 개선 | grep "datalab" 0건 OK | verified |

## 발견 이슈 및 해결

### 자체 해결 (3건)
1. **DataLab API가 검색량 미제공** — SearchAd /keywordstool API로 전환 (대시보드 server_utils.py 참조)
2. **블로그 fallback이 잘못된 데이터 표시** — fallback 로직 완전 제거
3. **빈 키워드 validation 부재** — toast "키워드를 입력하세요" 추가 (KeywordAnalysis.tsx:62)

### 범위 외 미해결 (1건)
1. **planLoading 미사용 변수** — 범위 외 사유: 기존 코드의 미사용 변수, 이번 작업 범위 밖

## L1 스모크테스트 결과

- 서버 재시작: 성공 (포트 8099에서 worktree 코드 실행)
- API 응답 확인: SearchAd API 직접 호출 → "실비보험" 754건, PC=7400, Mobile=33000, Comp=높음 정상 반환
- 스크린샷: 해당없음 (백엔드 API 검증 완료, 프론트 실행은 기존 서버 8001 포트 사용 중)
- npm run build: 성공 (14.24s, 에러 0건)
- TypeScript noEmit: 오류 0건

## 머지 판단

- **머지 필요**: Yes
- **브랜치**: task/task-2101-dev5
- **워크트리 경로**: /home/jay/projects/InsuRo/.worktrees/task-2101-dev5
- **머지 의견**: SearchAd API 호출 로직이 대시보드와 동일 패턴으로 구현됨. API 키는 .env.keys에 설정 확인됨. 빌드 성공, 기존 datalab/blog 엔드포인트 유지(하위호환).

## 모델 사용 기록

- 팀원: 엔키 / 작업 내용: 백엔드 SearchAd API 분기 구현 / 사용 모델: sonnet
- 팀원: 이쉬타르 / 작업 내용: 프론트엔드 검색타입 변경 + 에러처리 / 사용 모델: sonnet

## 세션 통계
- 총 도구 호출: 0회


## 세션 통계
- 총 도구 호출: 0회


## 세션 통계
- 총 도구 호출: 0회


## 세션 통계
- 총 도구 호출: 0회


## 세션 통계
- 총 도구 호출: 0회


## 세션 통계
- 총 도구 호출: 0회


## 세션 통계
- 총 도구 호출: 0회

