# server.py 모듈 분할 Phase 2.2 — blog_engine + blog_writer 추출

## 배경
Phase 2.1(task-1842)에서 server_utils.py 추출 완료.
이번 Phase에서는 블로그 관련 로직을 별도 모듈로 추출.

## 3문서 참조
- 계획서: `memory/plans/cross-verification-workflow/plan.md` (섹션 3.1)
- blog_engine.py: ~700줄 (블로그 분석/경쟁분석)
- blog_writer.py: ~500줄 (블로그 백그라운드 생성)

## 이번 Phase 범위

### 1. blog_engine.py 추출
- `/home/jay/workspace/dashboard/blog_engine.py` 신규 생성
- server.py에서 블로그 분석, 경쟁분석 관련 함수/핸들러 로직 이동
- 키워드: blog_analysis, keyword_analysis, competition, naver_blog 관련 함수
- server.py에서 `from blog_engine import ...`로 대체

### 2. blog_writer.py 추출
- `/home/jay/workspace/dashboard/blog_writer.py` 신규 생성
- server.py에서 블로그 글작성 백그라운드 프로세스 관련 로직 이동
- 키워드: blog_generate, blog_write, subprocess.Popen (블로그 관련)
- start_new_session=True 유지 필수

### 3. 점진적 추출 + 검증
- 함수 1-2개씩 옮기고 서버 기동 테스트 반복
- 전체 추출 후 curl API 응답 확인
- 기존 server_utils.py와의 import 관계 정리

## 주의사항
- **서비스 무중단**: 추출 후 서버 정상 기동 필수
- **start_new_session=True**: blog_writer의 subprocess.Popen에 반드시 유지
- **기존 data_loader.py와 중복 방지**: data_loader.py에 이미 있는 로직은 이동하지 않음
- **server_utils.py 활용**: 공통 상수/유틸은 server_utils.py에서 import
- Phase 2.1 검증 작업(task-1842+1)이 별도 진행 중이나, 코드 수정 없는 검증이므로 충돌 없음

## affected_files
dashboard/server.py, dashboard/blog_engine.py (신규), dashboard/blog_writer.py (신규)

## 검증 시나리오
1. 서버 재시작 후 대시보드 정상 로드
2. 블로그 분석 API 정상 응답
3. 블로그 글작성 시작 → subprocess 정상 생성
4. 추출 전후 server.py 줄 수 감소 확인 (최소 800줄 감소 목표)