InsuWiki Phase 3: 코드 품질 개선 (task-77.1)

## 프로젝트 경로
/home/jay/projects/insuwiki/

## 선행 작업 완료 상태
- Phase 1 보안패치 완료 (task-70.1, task-71.1)
- Phase 2 운영안정성 완료 (task-76.1): 인덱스/규칙/CI-CD/console.log제거/git정리
- Phase 2에서 console.log가 이미 전부 제거됨 (24건)
- git commit은 아직 안 됨 (현재 파일 상태가 최신)

## Phase 3 작업 목록 (5건)

### 1. DocumentClient.tsx 분리 (최우선)
- 파일: nextapp/src/app/docs/[id]/DocumentClient.tsx (약 1700줄)
- 10개 이상 책임이 혼재된 갓 컴포넌트
- 분리 방안:
  - DocumentClient.tsx → 메인 컨테이너 (상태 관리 + 라우팅만)
  - DocumentViewer.tsx → 문서 조회 모드
  - DocumentEditor.tsx → 편집 모드 (TipTap 통합)
  - DocumentSidebar.tsx → 사이드바 (목차, AI 패널 등)
  - DocumentActions.tsx → 액션 버튼 (저장, 삭제, 공유 등)
  - useDocumentState.ts → 문서 상태 관리 커스텀 훅
- 위 분리안은 참고용. 실제 코드를 분석해서 최적의 분리 구조를 팀장이 판단할 것
- 핵심: 각 서브컴포넌트가 독립적으로 이해 가능해야 함

### 2. useWikiMap Context 리프트업
- 파일: nextapp/src/hooks/useWikiMap.ts
- 현재: DocumentClient와 ReflectEditor에서 각각 호출 → Firestore 중복 쿼리
- 개선: WikiMapProvider Context 생성 → 상위에서 한 번만 로드, 하위에서 소비
- Context 파일: nextapp/src/contexts/WikiMapContext.tsx (신규)

### 3. 공통 유틸 통합
- ADMIN_EMAILS 하드코딩 4곳 중복 → 상수 파일로 통합 (nextapp/src/lib/constants.ts)
  - DocumentClient, TrashClient, admin/purge, admin/drive-upload
- 작성자 이름 하드코딩 5곳 → 유틸 함수로 통합
- 한글 초성 함수 3중 중복 → 하나로 통합 (hangul.ts의 getChoseong 유지, 나머지 제거)
  - hangul.ts(getChoseong), korean.ts(getChosung), es-hangul 라이브러리
- cleanText 함수 3중 중복 → lib/utils/text.ts로 통합

### 4. any 타입 제거 (114건)
- 30+ 파일에 걸쳐 any 타입 114건 존재
- 적절한 타입으로 교체. 외부 라이브러리 타입이 없는 경우만 unknown + 타입 가드 사용
- 주요 대상 파일: DocumentClient.tsx(분리 후), hooks/, lib/, components/

### 5. 테스트 프레임워크 도입
- Vitest 설치 및 설정 (vitest.config.ts)
- 핵심 비즈니스 로직 테스트 작성:
  - 인증 미들웨어 (auth-middleware.ts)
  - 암호화 유틸 (encryption.ts)
  - 한글 초성 검색 (통합 후)
  - WikiMap 로직
- 최소 10개 이상 테스트 케이스

## 주의사항
- Phase 1, 2에서 수정된 파일들의 변경사항 반드시 보존
- auth-middleware.ts (Phase 1 신규), firestore.rules/indexes (Phase 2 수정) 등
- git commit은 하지 말 것 (아누가 검토 후 통합 커밋)
- npm run build 통과 확인 필수
- DocumentClient 분리가 가장 큰 작업 — 기존 기능 회귀 없도록 신중하게

## 완료 후
- 보고서: /home/jay/workspace/memory/reports/task-77.1.md
- task-timer end: python3 /home/jay/workspace/memory/task-timer.py end task-77.1