---
task_id: task-2124
type: context
scope: task
created: 2026-04-23
updated: 2026-04-23
status: in-progress
---

# 맥락 노트: task-2124

**task**: task-2124

---

## 결정 근거

### 공백/쉼표 분할 후 개별 API 호출 방식 채택
- 네이버 SearchAd API `/keywordstool`의 `hintKeywords` 파라미터가 공백을 허용하지 않음
- 대시보드(dashboard/routes_post.py:1810)에서 이미 검증된 패턴: `re.split(r"[,\s]+", raw_keyword)`
- 각 키워드마다 새 timestamp + signature 생성 필수 (시간 기반 서명)
- 결과 병합 시 `relKeyword` 기준 중복 제거

### 3 Step Why

**1st Why**: "왜 이 설계가 필요한가?"
→ A: 네이버 SearchAd API가 공백을 포함한 hintKeywords 파라미터를 거부하므로, 공백을 구분자로 키워드를 분리해 개별 호출해야 함

**2nd Why**: "왜 A가 최선의 접근인가?"
→ B: 대시보드에서 동일한 패턴이 이미 운영 중이며 안정적으로 작동. API 명세를 변경할 수 없으므로 클라이언트 측에서 분할이 유일한 방법

**3rd Why**: "왜 B가 다른 대안보다 나은가?"
→ C: 대안 1(프론트에서 분할 전송)은 모든 클라이언트 수정 필요. 대안 2(콤마 구분만 지원)는 사용자 경험 저하. 서버 측 분할이 후방 호환성 유지 + 단일 수정점

## 참조 자료

- 근본 원인 분석: `/home/jay/workspace/memory/tasks/task-2124.md`
- 대시보드 참조 코드: `/home/jay/workspace/dashboard/routes_post.py:1810`
- 현재 코드: `/home/jay/projects/InsuRo/server/main.py:814-848`

## 주의사항

- 각 키워드마다 새 timestamp + signature 생성 필수 (이전 timestamp 재사용 금지)
- `re` import가 상단에 없으므로 추가 필요
- 응답 구조 `{"keywordList": [...]}` 유지 — 프론트엔드 호환
