# task-1936+1 완료 보고서: 네이버 블로그 글 생성 LLM 모델 선택 기능 추가

## SCQA

**S**: 네이버 블로그 글 생성 기능이 대시보드에서 운영 중이며, 현재 4개 모델(sonnet/haiku/gemini/gpt)을 선택할 수 있다.

**C**: 모델 ID가 추상적(sonnet, gemini 등)이고 Claude/Gemini 계열 세부 모델(sonnet-4-6, haiku-4-5, flash, pro)을 선택할 수 없다. 또한 Codex(OpenAI)와 GLM(z.ai) 모델이 미지원이다.

**Q**: 사용자가 품질/속도/비용 trade-off를 직접 제어할 수 있도록 세부 모델 선택 기능을 확장할 수 있는가?

**A**: 프론트엔드 드롭다운을 optgroup 기반 6개 세부 모델로 확장하고, 백엔드에 MODEL_MAP 딕셔너리를 도입하여 provider 기반 분기 처리로 리팩토링했다. Codex CLI와 GLM REST API 호출도 추가했다.

## 수정 파일 및 검증 상태

| 파일 | 변경 내용 | grep 검증 | 상태 |
|------|-----------|-----------|------|
| dashboard/components/NaverBlogView.js:687 | 기본값 sonnet → claude-sonnet-4-6 | grep "claude-sonnet-4-6" OK (2건) | verified |
| dashboard/components/NaverBlogView.js:976-989 | 4개 option → optgroup 기반 6개 세부 모델 | grep "optgroup" OK (8건) | verified |
| dashboard/routes_post.py:1898-1909 | VALID_MODELS 4개 → 10개 확장 | grep "claude-sonnet-4-6" OK (1건) | verified |
| dashboard/blog_writer.py:88-103 | MODEL_MAP 딕셔너리 추가 (10개 모델 매핑) | grep "MODEL_MAP" OK (2건) | verified |
| dashboard/blog_writer.py:105-203 | provider 기반 분기 처리 (claude/gemini/codex/gpt/glm) | grep "provider == \"codex\"" OK, grep "provider == \"glm\"" OK | verified |

## 지원 모델 목록

- Claude (Anthropic): claude-sonnet-4-6 (권장), claude-haiku-4-5-20251001
- Gemini (Google): gemini-2.5-flash, gemini-2.5-pro
- Codex (OpenAI): codex (exec -q 서브커맨드)
- GLM (z.ai): glm-5 (REST API, GLM_API_KEY 환경변수 필요)
- 레거시 호환: sonnet, haiku, gemini, gpt (기존 히스토리 재생성 지원)

## L1 스모크테스트 결과

- 서버 재시작: 성공 (PID 1277962, 포트 8000)
- API 응답 확인:
  - `claude-sonnet-4-6` → `{"status": "started"}` (200 OK, 정상 생성 시작)
  - `invalid-model` → `{"error": "Invalid model: ..."}` (400, 전체 유효 모델 목록 출력)
  - 레거시 `haiku` → 유효 모델로 인식 (동시 작업 방지 409 = 정상)
  - 생성 진행 상태: progress 20%, currentStep "AI 글 생성 중... (모델: claude-sonnet-4-6)"
- 스크린샷: 해당없음 (API 테스트로 검증)

## 발견 이슈 및 해결

1. **서버 미재시작 시 이전 코드 로드 문제**: 서버가 이미 실행 중이어서 새 코드가 반영되지 않았음 → PID kill 후 재시작으로 해결
2. **Codex CLI exec 옵션 확인 필요**: codex CLI의 non-interactive 모드가 `exec -q`인지 확인 → `codex --help`에서 `exec` 서브커맨드 확인 완료
3. **GLM API 키 미설정 시 에러**: GLM_API_KEY 환경변수 미설정 시 명확한 에러 메시지 출력하도록 구현

## 모델 사용 기록

- 이리스(프론트엔드): sonnet — 프론트엔드 드롭다운 확장 (코딩 작업)
- 불칸(백엔드): sonnet — 백엔드 모델 매핑 + 분기 처리 확장 (코딩 작업)

## 머지 판단

- **머지 필요**: No (dashboard는 insuwiki worktree 외부 경로)
- **변경 위치**: /home/jay/workspace/dashboard/ (메인 코드에 직접 반영)
- **머지 의견**: dashboard 디렉토리는 프로젝트 worktree 외부에 위치하므로 worktree merge 불필요. 코드는 이미 메인에 직접 커밋됨.

## 3문서 상태

- plan.md: status → completed
- context-notes.md: 3 Step Why 기록 완료
- checklist.md: 6/6 항목 체크 완료 (100%)
