# task-1568.1 완료 보고서

## S - Situation
네이버 블로그 워크플로우에서 글 생성 API(`/api/naver-blog/generate`)가 systemd 환경에서 502 에러를 반환하고, 키워드 분석 테이블(최대 529행)의 선택/해제 시 체감 지연이 발생하고 있다.

## C - Complication
502 에러 원인은 `server.py:4313`에서 `subprocess.run(["claude", ...])` 호출 시 systemd PATH에 `~/.local/bin`이 미포함되어 `No such file or directory` 발생. 키워드 선택 지연 원인은 529행 전체 리렌더링 + `selectedKeywords.some()` O(n) 배열 탐색 x 행당 3회 + `sortedResults` 매 렌더 재정렬 + CSS `transition-colors` 529행 적용.

## Q - Question
claude CLI 절대경로 지정과 React 메모이제이션으로 두 문제를 해결할 수 있는가?

## A - Answer
2건 모두 수정 완료. (1) `server.py:4313`에서 `"claude"` → `"/home/jay/.local/bin/claude"` 절대경로 지정으로 502 해결 확인. 서버 재시작 후 API 호출 시 502가 아닌 정상 프로세스 진행 확인 (claude CLI 절대경로 정상 실행 — `--version` 출력 `2.1.96`, haiku 모델 응답 성공). (2) NaverBlogView.js `KeywordAnalysisStep` 성능 최적화: `selectedSet` Set 변환(O(1) 조회), `sortedResults` useMemo 캐싱, 핸들러 4개 useCallback 메모이제이션, 테이블 행 `transition-colors` 제거.

## 수정 파일 목록

- `/home/jay/workspace/dashboard/server.py` (라인 4313: claude → 절대경로)
- `/home/jay/workspace/dashboard/components/NaverBlogView.js` (라인 87-90, 123-130, 132-137, 139-141, 143-146, 190-210, 327: 성능 최적화)

## 상세 변경 내역

### 수정 1: server.py 글 생성 502 에러 수정
- **라인 4313**: `["claude", "-p", prompt_text, ...]` → `["/home/jay/.local/bin/claude", "-p", prompt_text, ...]`

### 수정 2: NaverBlogView.js 키워드 선택 성능 최적화
- **라인 87-90**: `selectedSet = React.useMemo(() => new Set(...), [selectedKeywords])` 추가
- **라인 123-130**: `handleSort`를 `React.useCallback`으로 래핑 (`[sortKey]` 의존)
- **라인 132-137**: `addKeyword`를 `React.useCallback`으로 래핑 + `selectedSet.has()` 사용
- **라인 139-141**: `removeKeyword`를 `React.useCallback`으로 래핑 (`[]` 의존)
- **라인 143-146**: `isKeywordSelected`를 `React.useCallback`으로 래핑 + `selectedSet.has()` 사용
- **라인 190-210**: `sortedResults` IIFE → `React.useMemo` 변환 (`[results, sortKey, sortOrder]` 의존)
- **라인 327**: 테이블 행 className에서 `transition-colors` 제거

## 테스트 결과

- `systemctl --user restart dashboard.service` → active ✓
- `/home/jay/.local/bin/claude --version` → `2.1.96 (Claude Code)` ✓
- `/home/jay/.local/bin/claude -p "say hello" --model haiku` → 정상 응답 ✓
- `curl POST /api/naver-blog/generate` → 502 에러 미발생 (504 timeout 반환 — claude CLI 호출 자체는 성공, 120초 초과는 기존 이슈)

## 발견 이슈 및 해결

### 자체 해결 (0건)
없음

### 범위 외 미해결 (1건)
1. **블로그 글 생성 120초 타임아웃** — 범위 외 사유: 본 작업은 502(경로 미발견) 수정이 목적. 타임아웃은 Claude CLI sonnet 모델의 블로그 글 생성 소요시간 이슈로 별도 작업 필요 (timeout 값 조정 또는 비동기 처리 검토 권장)

## 모델 사용 기록

- 팀원: 불칸 / 작업: server.py 절대경로 수정 / 모델: sonnet / 정당성: -
- 팀원: 이리스 / 작업: NaverBlogView.js 성능 최적화 / 모델: sonnet / 정당성: -
