# server.py 모듈 분할 — 통합 작업 (import 교체)

## 배경
Phase 2.1~2.3에서 server.py의 로직을 7개 별도 모듈로 추출 완료.
현재 server.py에 원본 코드가 남아있고, 추출된 모듈과 중복 상태.
이번 작업에서 server.py의 중복 코드를 삭제하고 import로 교체.

## 추출 완료된 모듈 (전부 /home/jay/workspace/dashboard/ 디렉토리)
- server_utils.py (247줄) — 공통 유틸리티/상수
- blog_engine.py — 블로그 분석/경쟁분석
- blog_writer.py — 블로그 백그라운드 생성
- wiki_engine.py — Wiki/Firebase 연동
- ads_integration.py — 광고 API 연동
- absorption.py — Absorption 데이터
- system_monitor.py — 시스템 상태/인증/All Stop

## 작업 방법

### 1단계: 모듈별 함수 목록 비교
각 추출 모듈의 함수/클래스 목록과 server.py의 동일 함수를 매칭.
매칭되는 함수를 server.py에서 삭제하고 `from {module} import {function}` 추가.

### 2단계: 점진적 교체
**한 모듈씩 교체하고 서버 기동 테스트 반복.**
1. server_utils → 이미 교체됨 (Phase 2.1에서 완료)
2. blog_engine → server.py에서 블로그 분석 함수 삭제, import 추가, 서버 테스트
3. blog_writer → 동일
4. wiki_engine → 동일
5. ads_integration → 동일
6. absorption → 동일
7. system_monitor → 동일

### 3단계: 최종 검증
- server.py 줄 수 목표: 6605줄 → 2000줄 이하 (routes_get/post + core만 남김)
- curl로 주요 API 전체 테스트 (최소 10개 엔드포인트)
- 대시보드 전체 탭 정상 로드 확인
- 기존 테스트 통과

## 주의사항
- **서비스 무중단 필수**: 각 모듈 교체 후 서버 재시작 + 정상 확인
- **start_new_session=True 유지**: blog_writer의 subprocess.Popen에 반드시 유지
- **global 변수 처리**: _wiki_entries 등 global 변수가 모듈 간 공유되는 경우 주의
- **순환 참조 방지**: import 순서에 주의
- **한 모듈씩**: 한 번에 전부 교체하지 말 것. 모듈 1개 교체 → 서버 테스트 → 다음 모듈

## affected_files
dashboard/server.py

## 검증 시나리오
1. 서버 재시작 후 대시보드 메인 정상 로드
2. 인슈위키 탭 정상 (wiki_engine)
3. 블로그 분석 정상 (blog_engine)
4. 광고 현황 정상 (ads_integration)
5. 시스템뷰 + All Stop 정상 (system_monitor)
6. 정제 기능 정상 (wiki_engine)
7. 블로그 글작성 정상 (blog_writer)
8. server.py 줄 수 2000줄 이하
