# server.py 모듈 분할 — routes_get.py + routes_post.py 추출

## 배경
Phase 2.4(task-1838_5.4)에서 7개 모듈 import 교체 완료. server.py 4880줄.
이번에 GET/POST 핸들러를 분리하여 server.py를 core만 남김.

## 현재 server.py 구조
- 4880줄, DashboardHandler 클래스 안에 do_GET/do_POST 메서드 + 각종 핸들러
- do_GET: URL 패턴 매칭 → 핸들러 함수 호출
- do_POST: URL 패턴 매칭 → 핸들러 함수 호출

## 이번 작업 범위

### 1. routes_get.py 추출
- `/home/jay/workspace/dashboard/routes_get.py` 신규 생성
- server.py의 do_GET 내부에서 호출하는 핸들러 함수들을 이동
- do_GET 메서드 자체는 server.py에 남기되, 핸들러는 routes_get에서 import

### 2. routes_post.py 추출
- `/home/jay/workspace/dashboard/routes_post.py` 신규 생성
- server.py의 do_POST/do_PUT/do_DELETE 내부 핸들러 함수들을 이동
- do_POST 메서드는 server.py에 남기되, 핸들러는 routes_post에서 import

### 3. server.py core 정리
- HTTP 서버 초기화, 라우팅 테이블, CORS, 모듈 로딩만 남김
- 목표: 2000줄 이하

## 작업 방법
- 한 핸들러씩 이동 → 서버 재시작 → API 테스트 반복
- global 변수 의존성 주의 (handler에서 DashboardHandler의 인스턴스 변수 접근 필요 시 self 전달 패턴 설계)
- 이미 추출된 모듈(blog_engine, wiki_engine 등)에서 import한 함수는 routes에서도 동일하게 import

## 주의사항
- **서비스 무중단 필수**
- **DashboardHandler.self 접근**: 핸들러가 self.send_response 등을 호출하므로, routes 모듈의 함수가 handler 인스턴스를 인자로 받는 패턴 필요
- **순환 참조 방지**: routes → server import 금지. routes는 server_utils, blog_engine 등만 import
- **점진적 이동**: 한 번에 전부 옮기지 말 것

## affected_files
dashboard/server.py, dashboard/routes_get.py (신규), dashboard/routes_post.py (신규)

## 검증 시나리오
1. 서버 재시작 후 대시보드 전체 탭 정상 로드
2. 모든 GET API 정상 (org-status, wiki/status, naver-blog/history 등)
3. 모든 POST API 정상 (wiki/refine/start, all-stop, blog/generate 등)
4. server.py 줄 수 2000줄 이하
5. curl 10개+ 엔드포인트 테스트
