# Task: 입력 키워드를 생성 결과에 포함 + 첫 번째 위치 배치

## 프로젝트 경로
`/home/jay/projects/InfoKeyword/`

## 요구사항
사용자가 분석 주제로 "가공육 암"을 입력하면:
1. AI가 생성한 키워드 30개에 **"가공육 암" 자체가 반드시 포함**되어야 함
2. 해당 입력 키워드가 **리스트 가장 첫 번째(왼쪽 위)**에 나타나야 함
3. 2단 키워드든 3단 키워드든 동일하게 적용

## 현재 동작
- 사용자가 주제 입력 → Worker API `/generate` 호출 → Claude CLI가 관련 키워드 30개 생성 → 반환
- 생성된 키워드에 입력 키워드 자체가 포함되지 않을 수 있음

## 수정 방향

### Worker 측 (`worker/generator/keyword_generator.py`)
키워드 생성 후 반환 전에:
1. 입력 키워드(topic)가 생성된 리스트에 이미 있으면 → 해당 위치에서 제거 후 맨 앞에 삽입
2. 입력 키워드가 리스트에 없으면 → 맨 앞에 삽입하고 마지막 키워드 하나 제거 (30개 유지)
3. 결과적으로 항상 `keywords[0] == topic`

```python
# 예시 로직 (generate_keywords 함수 반환 직전)
if topic in keywords:
    keywords.remove(topic)
keywords.insert(0, topic)
if len(keywords) > 30:
    keywords = keywords[:30]
```

### Frontend 측 (선택)
- 키워드 선택 화면에서 첫 번째 키워드(입력 키워드)를 시각적으로 구분해도 좋음 (예: 테두리 강조, "입력 키워드" 라벨)
- 필수는 아님, 자연스러우면 OK

## 수정 대상 파일
- `worker/generator/keyword_generator.py` — `generate_keywords()` 함수

## 빌드 & 재시작
- Worker는 Python이므로 빌드 불필요
- Worker 재시작:
  1. `fuser 8100/tcp | xargs kill`
  2. `cd /home/jay/projects/InfoKeyword && source /home/jay/workspace/.env.keys && unset CLAUDECODE && nohup python3 -m uvicorn worker.main:app --host 0.0.0.0 --port 8100 > /tmp/infokeyword-worker.log 2>&1 &`
  ⚠️ `unset CLAUDECODE` 필수

## 테스트
- "가공육 암" 주제 + 2단 키워드로 생성 → keywords[0]이 "가공육 암"인지 확인
- "강아지 사료 추천" 주제 + 3단 키워드로 생성 → keywords[0]이 "강아지 사료 추천"인지 확인
- 생성된 키워드가 30개인지 확인 (입력 키워드 포함)