# 네이버 블로그 워크플로우 2건 수정 (글 생성 502 + 키워드 선택 속도)

## 수정 1: 글 생성 502 에러 — claude CLI 절대경로

### 원인
- server.py:4313에서 `["claude", "-p", ...]`로 호출
- systemd 서비스 환경에서 `claude`가 PATH에 없음 → `No such file or directory`
- 502 에러 반환

### 수정 내용
- 파일: `/home/jay/workspace/dashboard/server.py` 라인 4313
- `"claude"` → `"/home/jay/.local/bin/claude"` 절대경로로 변경

### 테스트
```bash
systemctl --user restart dashboard.service
sleep 3
curl -s -X POST http://localhost:8000/api/naver-blog/generate \
  -H "Content-Type: application/json" \
  -d '{"keywords":["보험대리점"]}' | python3 -c "import sys,json; d=json.load(sys.stdin); print('status:', d.get('status')); print('has content:', bool(d.get('generatedContent')))"
```
- `status: generated` + `generatedContent`에 블로그 글 본문이 포함되어야 함
- 서버 재시작 후 테스트 필수

---

## 수정 2: 키워드 선택 반응 속도 최적화

### 원인
- 키워드 분석 결과가 최대 529건
- 키워드 선택/해제 시 전체 529행 리렌더링
- `isKeywordSelected()`가 매 행에서 `selectedKeywords.some()` 배열 탐색 x 3회
- `sortedResults`가 매 렌더에 529개 배열 재정렬
- `useMemo`/`useCallback` 미사용

### 수정 내용
- 파일: `/home/jay/workspace/dashboard/components/NaverBlogView.js`
- `KeywordAnalysisStep` 컴포넌트 성능 최적화:

1. **selectedKeywords를 Set으로 변환 (useMemo)**:
   ```javascript
   const selectedSet = React.useMemo(
     () => new Set(selectedKeywords.map(s => s.keyword)),
     [selectedKeywords]
   );
   ```
   - `isKeywordSelected` → `selectedSet.has(name)` (O(1) 조회)

2. **sortedResults를 useMemo로 캐싱**:
   ```javascript
   const sortedResults = React.useMemo(() => {
     const arr = results ? (results.results || []) : [];
     if (!sortKey) return arr;
     // ... 정렬 로직
   }, [results, sortKey, sortOrder]);
   ```

3. **핸들러를 useCallback으로 메모이제이션**:
   - `addKeyword`, `removeKeyword`, `handleSort` 등

4. **transition-colors 제거 또는 경량화**:
   - 529행에 CSS transition 제거 → 즉각 반응

### 테스트
- 키워드 분석 후 테이블에서 키워드 클릭 → 즉시(체감 0.1초 이내) 선택 반영되는지 확인
- 드래그 순위 변경도 즉각 반응하는지 확인
- 정렬(PC검색량 등) 클릭 시 빠르게 반응하는지 확인

## 보고서
`/home/jay/workspace/memory/reports/task-1568.md`에 작성
