# 네이버블로그 글작성 히스토리 — 실패 건 미기록 + 진행 상태 표시 버그 수정

## 우선순위: Critical (제이회장님 직접 요청, 반드시 한번에 성공)

## 문제 1: 실패 건이 히스토리에 안 보임

### 현상
- 글 생성 실패 시 blog-write-status.json에는 failed 기록됨
- 하지만 DB(blog_content 테이블)에 INSERT가 안 됨
- 히스토리 API(`/api/naver-blog/history/contents`)가 DB에서 읽으므로 실패 건이 표시 안 됨

### 원인 분석
`_background_blog_generate()` (server.py Line 927~1104):
- 성공 시: Line 1010-1028에서 DB INSERT → 정상 동작
- TimeoutExpired 시: Line 1056-1073에서 DB INSERT → **코드는 있으나 `except Exception: pass`로 에러 삼킴**
- 일반 Exception 시: Line 1085-1102에서 DB INSERT → **동일**

**핵심 원인**: `except Exception: pass` (Line 1072, 1101)가 INSERT 실패 원인을 완전히 삼킴. 
가능한 실패 원인:
- `_BLOG_HISTORY_DB` 변수가 함수 스코프에서 접근 불가
- 또는 `keywords` 변수가 빈 리스트
- 또는 다른 런타임 에러

### 수정
1. **`except Exception: pass`를 `except Exception as e: logger.error(f"DB INSERT 실패: {e}")` 로 변경** (Line 1029, 1072, 1101 — 3곳 전부)
2. **실패 INSERT가 실제로 동작하는지 확인**: `_BLOG_HISTORY_DB` 변수 접근 가능한지, INSERT SQL이 올바른지
3. **프롬프트 생성 실패 시에도 INSERT**: `_build_naver_blog_prompt()` (Line 945)에서 예외 발생 시 현재 TimeoutExpired나 일반 Exception으로 잡히지 않을 수 있음. 함수 앞부분에서 발생하면 keywords가 아직 설정 안 된 상태일 수 있음.

확인 포인트:
```python
# Line 927의 함수 시그니처
def _background_blog_generate(keywords, additional_content, tone, model, status_path, lock_path):

# _BLOG_HISTORY_DB가 전역 변수인지 확인
grep -n "_BLOG_HISTORY_DB" dashboard/server.py
```

## 문제 2: 글 생성 중 UI에 진행 상태가 안 보임

### 현상
글 생성 요청 후 "이 상태야" — 프론트엔드가 진행 상태를 표시하지 않거나, failed 후 UI가 갱신되지 않음.

### 확인 필요
`/api/naver-blog/write/status` API (Line 3943)가:
- blog-write-status.json을 정상 읽고 있는지
- 프론트엔드의 polling 간격이 적절한지
- failed 상태일 때 UI에 에러 메시지를 표시하는지

### 프론트엔드 확인
`NaverBlogView.js`:
- Line 735: `fetch('/api/naver-blog/write/status')` — polling 로직
- Line 753: `setError(data.error)` — 에러 표시 로직
- **failed 상태에서 polling이 중단되는지, UI가 "실패" 상태로 전환되는지 확인**

## 문제 3: 히스토리 표시 개선

### 현재
글작성 히스토리에 키워드만 표시됨. 성공/실패 구분 없음.

### 수정
프론트엔드(`NaverBlogView.js`)에서 히스토리 리스트 렌더링 시:
- status가 "success"이면 초록 체크 아이콘 (현재 이미 있음 ✅)
- status가 "failed"이면 빨간 X 아이콘 + 에러 메시지 표시
- 에러 메시지는 항목 아래 작은 글씨로 표시

히스토리 API 응답 (Line 3888): `SELECT id, created_at, keywords_json, file_path, status, error_message` — **이미 status와 error_message를 반환 중**이므로 프론트엔드만 수정하면 됨.

```jsx
// 예시
{item.status === 'failed' && (
    <p className="text-xs text-red-400 mt-1">
        ❌ 실패: {item.error_message}
    </p>
)}
```

## 검증 시나리오

1. **실패 DB 기록**: `blog-write-status.json`이 failed일 때 `blog_content` 테이블에도 status=failed 행이 INSERT되면 성공
2. **에러 로깅**: `except Exception: pass` → `except Exception as e: logger.error(...)` 변경 후, INSERT 실패 시 대시보드 로그에 에러가 남으면 성공
3. **히스토리 표시**: 글작성 탭 히스토리에서 실패 건이 빨간색으로 표시되고 에러 메시지가 보이면 성공
4. **진행 상태**: 글 생성 중 UI에 progress bar 또는 "생성 중..." 상태가 표시되면 성공
5. **성공 건 표시**: 기존 성공 건이 초록 체크로 계속 정상 표시되면 성공
6. **회귀**: 기존 네이버블로그탭 기능 정상 동작
