← 목록
기타 2026-05-27 3KB 읽기 3분

CrownyDoc v3 Stage 6 — .cdf v2 라우트 구현 & 일괄 마이그레이션

개요

CrownyDoc v3의 마지막 단계(Stage 6). 서버에 .cdf v2 통합 라우트 6개를 추가하고, 기존 견적서/제안서/도면 저장 파일 17개를 CDF v2.0.0 포맷으로 일괄 변환했다.

무엇을 했는지

1. server-docs.js — 라우트 6개 추가 (~130줄)

삽입 위치: 기존 /api/cdf/list 라우트 직후, 로그인 라우트 직전.

라우트메서드설명
/api/cdf/v2/listGET?type=견적서\제안서\도면\all 목록 조회
/api/cdf/v2/loadGET?id=<id> 단건 조회
/api/cdf/v2/savePOSTCDF v2 JSON 직접 저장 (2MB 한계)
/api/cdf/v2/from-quotePOST견적서 JSON → CDF v2 변환+저장
/api/cdf/v2/from-proposalPOST제안서 JSON → CDF v2 변환+저장
/api/cdf/v2/from-diagramPOST도면 JSON → CDF v2 변환+저장
  • 저장 ID: cdf- + base36 타임스탬프 + 랜덤 5자 (_cdfv2Id())
  • 변환 함수 3종을 window 의존 없이 서버 내 인라인으로 정의
  • _수정일 ISO 8601 자동 기록, 2MB body 한계 검증, JSON 파싱 오류 400 반환
  • 저장소: .data/cdf-v2/ (자동 생성)

2. lib/migrate-all.js (신규, 110줄)

bashnode /Users/ef/CrownyDoc/lib/migrate-all.js [--dry-run]

  • 3개 소스 디렉토리 순회 → CDF v2 변환 → .data/cdf-v2/cdf-<원본ID>.json 저장
  • 변환 함수 인라인 (Node 단독 실행 가능, npm 의존 없음)

3. 마이그레이션 결과

종류건수
견적서5
제안서8
도면4
합계17
에러0
출력: /Users/ef/CrownyDoc/.data/cdf-v2/ (17개 .json)

관련 파일 경로

  • /Users/ef/CrownyDoc/server-docs.js — 라우트 추가 (2965~ 라인)
  • /Users/ef/CrownyDoc/lib/migrate-all.js — 일괄 마이그레이션 스크립트 (신규)
  • /Users/ef/CrownyDoc/lib/legacy-merge.js — 원본 변환 로직 (633줄, 변경 없음)
  • /Users/ef/CrownyDoc/.data/cdf-v2/ — 변환된 CDF v2 파일 저장소 (17개)

검증 결과

node -c server-docs.js → OK
node migrate-all.js --dry-run → 17건 에러 0
node migrate-all.js → 17건 에러 0
GET /api/cdf/v2/list → {"ok":true,"list":[...17건...]}
POST /api/cdf/v2/from-quote → {"ok":true,"id":"cdf-...","summary":{"합계":20504000}}

알려진 한계

  • /api/cdf/v2/save 인증 없음 (기존 /api/cdf/save와 동일 정책 — 서버 로컬 접근 환경)
  • 역변환(cdf→견적서/제안서/도면) API는 미구현 (legacy-merge.js에 cdfToQuote 등 구현됨)
  • 서버 재시작 없이 마이그레이션 파일은 즉시 /api/cdf/v2/list에 반영됨