2026-04-22
2026-04-24 — ADR 0018 에 의해 재정의
"docx-first" 는 편집 전략 으로서는 폐기. 편집은 플랫폼 내 Tiptap 에디터 에서 수행하고, docx/PDF 는 최종 제출용 export 포맷 으로만 유지. ADR 0018 참조.
ADR 0012 — 한글 서식 export 2단 배포
결정문
Phase 1 S1 (47M) 에서 S2 초 (6~8M) 에 한글 네이티브 경로 를 후속 추가하는 2단 배포. Minority Report (P1 한글 병행 릴리스 요구) 는 파일럿 실측 4가지 조건 충족 시 S2 앞당김으로 완화.docx-templates 기반 구현 을 선행하고, S1 말
배경
- ADR 0011 Phase 1 S1 pre-req (Pack 1 완제품화).
- P5 기술 분석:
docx-templates7축 비교 전 영역 우세 (2.5 eng-day · 활성 OSS · CF pure JS). - P1 실무 반박: docx-only 는 표·세로쓰기 파손 · 파일럿 이탈 위험.
대안 검토
A — docx-templates 단일 (P5 R1)
기술 최적이나 한글 변환 서식 파손. 이탈 위험.
B — hwp-js 단일 (기각)
OSS 정체 3년 · DOM 의존 · CF 불가 · 1.2MB · 6~8 eng-day.
C — pdfmake 단일 (기각)
편집 불가 → 변호사 재작업 강제. 폰트 700KB+.
D — docx + hwp 병행 릴리스 (P1 요구, 부분 채택)
이상적이나 S1 내 9+ eng-day × 2 = 18+ eng-day 부담. 2단 배포로 분할.
결정 + 근거
2단 배포 구조
S1 초 (4~5M) — docx-templates 선행
- Cloud Function
renderDocxTemplate(Node pure JS, 150ms/문서) - Server Action
generate-docx.ts· weight 1 (docGeneration킬 스위치 재사용) - UI
DocTemplatePicker+DocxPreviewDialog - 사전 고지: UI 에 "한글 서식 S2 예정" 명시
- 파일럿 실측 수집: 3명 × 한 달 × 생성 리포트
S1 말S2 초 (68M) — 한글 네이티브 후속
- 별도 tier=B 회의 (파일럿 데이터 기반)
- 재조사 대상:
libhwp/officejs-hwp/hwp-jsfork / LibreOffice headless / 상용 API
핵심 근거
- docx 인프라 완성이 hwp 의 공통 pre-req: 템플릿 엔진·Server Action·UI·PII 마스킹·킬 스위치는 어떤 포맷이든 동일. docx 먼저 완성하면 hwp 는 렌더 레이어만 교체.
- 파일럿 데이터 없이 hwp 대안 선택 불가: libhwp/fork/상용 API 비교는 서식 깨짐 실측이 있어야 비용·복잡도 트레이드오프 판단 가능.
- P1 이탈 위험 완화 조건 4종 (아래 성공 지표) 을 S1 1개월 내 모니터링해 S2 앞당김 조항.
성공 지표 · S2 앞당김 트리거
- 파일럿 3명 × 한 달 생성 리포트 ≥ 30건
- 서식 깨짐 리포트 2건+ 발생 시 S2 한글 네이티브 scope 확대
- 파일럿 이탈 실제 1건+ = S2 앞당김 (Phase 1 S3 축소로 예산 이전)
- S2 hwp 도착 시점 서식 깨짐 월 0건
Minority Report
P1 변호사 (중대 반대)
"S1 docx-only 배포는 파일럿 이탈 리스크. 한글 네이티브를 S1 에 병행 릴리스해야 안전." 처리: 4가지 완화 조건 (사전 고지 · 1개월 데이터 · 2건 트리거 · 이탈 시 앞당김) 을 Accept 조항으로 명시. 서식 깨짐 발생 시 즉시 S2 확대.
P5 개발자 (부분 반대)
"hwp-js fork 는 S2 회의 전 maintained fork 여부 재조사 필요." 처리: S2 회의 안건 첫 3분에 자동 포함.
구현 PR 계획 (S1 착수)
| PR | 제목 | 범위 | eng-day |
|---|---|---|---|
| 1 | feat(docgen): docx-templates 기반 모듈 + 테스트 | functions/src/docgen/ + 단위 테스트 3종 | 1.0 |
| 2 | feat(docgen): Server Action + PII 마스킹 + 킬 스위치 | generate-docx.ts · executeAiAction 래핑 · weight 1 | 1.5 |
| 3 | feat(docgen): DocTemplatePicker + DocxPreviewDialog UI | shadcn/ui 시맨틱 · "hwp S2 예정" 문구 | 1.0 |
| 4 (opt) | feat(docgen): 관리자 템플릿 업로드 | tenant 소유권 게이팅 · Storage | 1.0 |
| 합계 | 4.5 (PR 4 포함 시) |
후속 (파생 안건)
- tier=B S2 한글 네이티브 경로 (파일럿 데이터 기반, S1 말~S2 초)
- tier=C
DocxPreviewDialog"S2 예정" 카피 확정 - 텔레메트리 스키마:
tenants/{tid}/docxGenerationStats/{YYYY-MM}— 생성 건수 · 서식 이슈 리포트 · 파일럿 플래그