# server.py 모듈 분할 Phase 2.1 — 유틸리티/상수/설정 추출

## 배경
교차검증 워크플로우 계획서(memory/plans/cross-verification-workflow/plan.md) 섹션 3에 따른 server.py 9개 모듈 분할의 첫 단계.
현재 server.py는 약 7600줄 모놀리스. 모든 팀이 같은 파일을 수정하여 머지 충돌이 빈발함.

## 3문서 참조 경로
- 계획서: `memory/plans/cross-verification-workflow/plan.md` (섹션 3: server.py 9개 모듈 분할)

## 이번 Phase 범위 (Phase 2.1만)

### 1단계: 구조 분석
server.py를 분석하여 다음을 파악:
- 공통 유틸리티 함수 (여러 핸들러에서 공유하는 헬퍼)
- 상수/설정값 (포트, 경로, 매직 넘버 등)
- import 구문 정리
- 각 모듈(blog, wiki, absorption, ads, system_monitor)의 라인 범위 대략 파악

### 2단계: 추출
- `/home/jay/workspace/dashboard/server_utils.py` 신규 생성
  - 공통 유틸리티 함수 이동
  - 공통 상수/설정값 이동
- server.py에서 추출된 함수/상수를 `from server_utils import ...`로 대체
- 순환 참조 방지

### 3단계: 검증
- 대시보드 서버 시작 후 에러 없이 기동되는지 확인
- curl로 주요 API 엔드포인트 응답 확인 (최소 3개)
- 기존 테스트 통과 확인

## 주의사항
- **서비스 무중단**: 추출 후 서버가 정상 기동되어야 함. http://100.76.130.39:8000/dashboard/ 접속 확인 필수.
- **server.py 단독 수정**: 이 작업 중 다른 팀은 server.py를 건드리지 않음.
- **점진적 추출**: 한 번에 전부 옮기지 말고, 함수 1-2개씩 옮기고 서버 기동 테스트 반복.
- **기존 동작 보존**: 추출은 리팩토링일 뿐, 기능 변경 없음.
- **data_loader.py 참고**: 이미 일부 로직이 data_loader.py로 분리되어 있음. 중복 분리하지 말 것.

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

## 검증 시나리오
1. 서버 재시작 후 대시보드 메인 페이지 정상 로드
2. GET /api/org-status 정상 응답
3. GET /api/wiki/status 정상 응답
4. POST /api/all-stop 정상 응답 (테스트 후 복구)
5. 추출 전후 server.py 줄 수 감소 확인 (최소 100줄 이상 감소 목표)
