← 목록
기타 2026-07-14 13KB 읽기 12분

크라우니 오피스 개발 계획 (2026-07-14 사장님 확정 순서)

확정 순서: ①문서 완성 → ②저장/출력 안정화 → ③슬라이드·시트·그래프·마인드맵 연결(끌어오기) 안정화 → ④시트→슬라이드→마인드맵→포커스→아웃라인→플랜→그래프 순 구현완료.

대원칙 (플랫폼 헌장 정합 — 모든 Phase 공통)

UI      = 웹기술(HTML/CSS/JS) 순수, React 프레임워크는 점진 제거
실행    = 로컬 상주 (crowny://office, file://) — 오프라인·즉시·로컬퍼스트
데이터  = 한선씨 엔진 (crowny-word 133 + CrownyDoc 한선씨 오피스 ~73)
저장    = cdf(CWDv2 정본, 손실없는 왕복) / 내보내기 html·docx·pdf·md
브릿지  = 갭A (UI↔엔진) — UI 나중에 바꿔도 엔진·저장 계층 재사용
공통 완성 기준 5축(모든 모듈이 이 게이트를 통과해야 "완성"): ①기능 완전성 ②무버그(회귀 하니스) ③취약점 보완 ④사이즈(반응형) 대응 ⑤플랫폼 변경 대응.


Phase 1 — 문서(Docs) 완성 【현재·최우선】

목표: 문서 하나만으로 완결된 워드프로세서. "추가로 꼭 필요한 기능 없음" 수준까지.

1-0. 기능 전수 실측 (착수 즉시)

현재 React 문서 편집기 인벤토리(라이브 확인) — 각 항목 실작동/데모 판정:
  • 툴바: 실행취소·재실행 / 스타일드롭다운 / 폰트(Pretendard) / 크기 / B I U S / 링크 / 표 / 이미지 / 페이지보기 / 찾기(⌘F) / 공유
  • 사이드: 문서 개요(OUTLINE, 제목 계층)
  • 우패널: 스타일(제목1 ⌘⌥1·제목2·본문·코드·인용) / 서식 / 댓글 / 히스토리
  • 상태바: 페이지·단어·글자 수 / 언어 / 저장상태 / 키 가이드
표: 항목 × {실작동/데모/없음} 산출이 1-A의 입력.

1-A. 기능 완전성 (없으면 채움)

영역필수 기능crowny-word 자산
편집입력·선택·커서·멀티캐럿·실행취소/재실행편집기코어(37)·편집연산(16)·멀티캐럿블록·실행취소·커서선택
서식문자(B/I/U/S·색·크기)·문단(정렬·간격·목록)·스타일문자서식확장·문단서식확장·스타일시트·서식런·다단계목록
구조제목계층·목차·개요·섹션·머리글/바닥글·페이지목차생성·개요문서지도·섹션다단·머리글바닥글·페이지뷰·문단배치
삽입표·이미지·링크·도형·각주/미주·책갈피표고급·표스타일·이미지개체·하이퍼링크·도형글상자·각주미주·책갈피참조
검토찾기/치환·맞춤법·변경추적·댓글·통계찾기고급·검색치환·맞춤법기초·주석변경추적·문서통계확장

1-B. 무버그

  • 문서 E2E 회귀 하니스(입력→서식→구조→삽입→저장→재열기 시나리오 자동)
  • 각 편집 연산 후 상태 불변식 검사(단어수·개요·커서 일관성)

1-C. 취약점 보완

  • file:// 샌드박스 경계(로컬파일 무단접근 차단)
  • 브릿지 입력검증(JS↔네이티브 메시지 화이트리스트·크기제한)
  • 저장 파일명 sanitize(경로탈출)·붙여넣기 HTML 살균(XSS)

1-D. 사이즈(반응형) 대응

  • 창 리사이즈 시 편집영역·사이드·우패널 재배치(오늘 신셸 리사이즈 패턴)
  • 최소폭에서 사이드/우패널 접힘, 모바일폭(390) 드로어

1-E. 플랫폼 변경 대응

  • UI가 순수 웹이라 WKWebView(맥)/WebView2(윈)/WebKitGTK(리눅스) 공통 동작 확인
  • 브릿지 계약을 플랫폼 무관 JSON으로(네이티브 3벌이 같은 메시지 처리)
  • 게이트: 문서 E2E 시나리오 5축 전항 PASS

Phase 2 — 저장/출력 관리 안정화

  • cdf(CWDv2) 정본 저장/열기 — 지금 html 저장을 cdf로 승격(crowny-word CWD포맷v2 연결). 재열기 시 편집상태 완전복원.
  • 자동저장·복구(자동저장복구.한선) / 버전·비교(버전비교.한선)
  • 내보내기: HTML(HTML왕복)·DOCX(DOCX파일)·PDF(PDF텍스트+인쇄준비)·MD(마크다운왕복)·RTF(RTF내보내기)
  • 문서 라이브러리(~/Documents/CrownyOffice/ + 메타)·최근문서 실데이터
  • 게이트: cdf 왕복 무손실 + 5포맷 내보내기 실측 + 자동복구 시나리오

Phase 3 — 모듈 연결(끌어오기) 안정화

문서에서 검증된 브릿지(갭A)를 슬라이드·시트·그래프·마인드맵으로 확장. 이 Phase는 데이터 왕복 배선까지(기능 구현은 Phase 4).
  • A1 브릿지 프로토콜(window.crownyBridge) 범용화 / A2 모듈별 상태 추출·주입
  • 각 모듈: 앱 데이터 ↔ 한선씨 엔진 포맷 어댑터 스켈레톤
  • 자산: 시트(15)·슬라이드(14) 엔진 + 마인드맵/그래프 엔진 실측·보강
  • 게이트: 4모듈 각각 "열기→편집 흉내→저장→재열기" 왕복 성립

Phase 4 — 모듈별 구현완료 (순서 고정)

시트 → 슬라이드 → 마인드맵 → 포커스 → 아웃라인 → 플랜 → 그래프 각 모듈은 Phase 1과 동일한 완성 5축(기능/무버그/취약점/반응형/크로스플랫폼)을 반복 통과해야 "구현완료".
순서모듈핵심 기능자산
1시트셀·수식·서식·차트·정렬시트엔진·수식파서·셀서식·시트차트·표계산정렬
2슬라이드슬라이드·레이아웃·템플릿·발표슬라이드엔진·템플릿·도구모음
3마인드맵노드·연결·레이아웃(엔진 실측·보강)
4포커스태스크·오늘·요약(신규 데이터모델)
5아웃라인계층 항목·접기개요문서지도 재사용
6플랜간트·일정·작업(신규 데이터모델)
7그래프데이터 시각화시트차트·차트문자렌더

진행 원칙

  • 각 Phase는 이전 Phase 게이트 통과 후 착수(문서가 무버그로 완성돼야 저장 안정화, 그래야 연결).
  • 매 단계 실측(라이브 앱 왕복) 후 CrownyDoc 갱신 + 스냅샷.
  • 서브에이전트 위임 시 이 계획서 + 갭목록(2026-07-14-오피스-React연결-갭목록) 참조 주입.
  • 현재 위치: Phase 1 착수 직전 (저장/열기 1차 html 완료 → cdf 승격은 Phase 2).

【확정】 두뇌 연결 = 한선씨 엔진 브릿지 (2026-07-14 사장님 결정)

문서 편집기 실측(spec/문서기능-판정표.md): 실작동 5 / 데모 8 / 없음 15 — UI는 정교하나 로직 대부분 껍데기. 앱은 self-contained 번들(무수정)·커스텀 템플릿 엔진(DCLogic). 디자인 유지 + crowny-word 한선씨 엔진 브릿지 연결로 두뇌 이식.

브릿지 2계층 (crownybrowser 확립 패턴: 한선씨 정본 + 네이티브/JS 미러)

[즉시층]  crownyBridge.js (셸이 WKUserScript로 오피스탭에 주입)
          - 앱의 죽은 버튼(div)에 리스너 부착 / contenteditable 이벤트 훅
          - 서식(Selection/execCommand)·단어수·커서 등 실시간 반응
          - 앱 번들 무수정(껍데기 위에 로직을 얹음)
[엔진층]  한선씨 VM (crownyc run) — 셸이 호출, JS와 메시지 왕복
          - 저장(cdf/CWDv2)·변환(docx/pdf/md)·구조연산·통계·맞춤법·버전
          - 정본 로직 SSOT (crowny-word 133 + CrownyDoc 오피스 ~73)
  • 성능 원칙: 매 키입력=즉시층(JS), 무거운/영속 연산=엔진층. 정본 규칙은 한선씨, JS는 그 미러(주소창위젯 한선씨/ObjC 미러와 동일 패턴).
  • 브릿지 계약(window.crownyBridge): 플랫폼 무관 JSON → 맥 WKScriptMessageHandler / 윈 WebView2 postMessage / 리눅스 동일. UI·엔진 분리라 UI 나중에 순수화해도 엔진 재사용.

Phase 1-A 착수 순서 (판정표 punch list)

  1. 서식 적용 + 상태바 실시간(파급 최대) ← 첫 구현
  2. 실행취소/재실행 스택 3. 찾기 실동작 4. 삽입 3종(표/이미지/링크)
  3. 개요 동기화 6. 댓글 CRUD 7. 히스토리 스냅샷 8. 단축키 배선 9. 드롭다운 3종

【완료】 Phase 1-A punch 10/10 (2026-07-16)

①서식 ②상태바 ③실행취소 ④찾기/바꾸기 ⑤삽입3종(표·이미지·링크) ⑥개요동기화 ⑦댓글CRUD ⑧히스토리스냅샷 ⑨단축키통합 ⑩드롭다운3종 — 전부 CDP 실측+실셸 육안 검증, 회귀 없이 누적.
  • 브릿지: crownyBridge.js ~2000줄(앱 무수정, WKUserScript 주입). 한선씨 정본 7종(문서통계·편집이력·찾기치환·삽입개체·댓글모델·버전이력·키맵·툴바선택).
  • 인프라: WKWebView inspectable(CROWNY_INSPECT env) — 실셸 키/이벤트 정밀검증 수단.
  • 잔여(1-B~E): 무버그(회귀 하니스 자동화)·취약점(붙여넣기 살균·file 샌드박스)·반응형·크로스플랫폼 게이트. ⌘⌥1 앱셸 레이스 미세잔류(inspectable로 정밀진단 예정).
  • 다음: 1-B~E 게이트 → Phase 2(cdf 저장/출력).

【완료】 Phase 1 문서(Docs) 완성 (2026-07-16)

  • 1-A punch 10/10 (서식·상태바·실행취소·찾기·삽입·개요·댓글·히스토리·단축키·드롭다운)
  • 1-B 무버그: 회귀하니스 27/27 PASS(진짜버그 찾기상태추적 수리). 자동 회귀 보호.
  • 1-C 취약점: 붙여넣기XSS·이미지상한·파일명 방어(22/22 차단), file샌드박스·CSS주입 안전.
  • 1-D 반응형: 팝오버 뷰포트클램프·툴바 가로스크롤·<900 개요/우패널 접힘.
  • 1-E 크로스플랫폼: Cmd↔Ctrl·CSS Highlight게이트·폰트폴백 감사 통과. 브릿지 크로스 계약 문서화.
  • 산출: crownyBridge.js ~2700줄(앱무수정)+한선씨정본 11종+회귀/반응형 하니스+리포트 3종. 배포 1.0.2.
  • 게이트 5축 전항 통과 → Phase 1 완료. 다음 Phase 2(cdf 저장/출력 안정화).

【완료】 Phase 2 — 자동저장·복구 (2026-07-17)

  • crownyBridge.js §13(8초 폴링 더티게이트) + native caAutosave 채널(save/check/discard,
cdf 엔진 재사용, 임시파일→rename) + 복구 배너("복구할 문서가 있습니다" [복구]/[삭제]).
  • ⌘S 정식 저장 성공 시 같은 문서의 autosave 스냅샷 자동 정리(중복 복구 안내 방지).
  • 한선씨 정본: bundle/office/bridge/자동복구.한선(자동저장복구.한선·살균정책.한선 재사용,
자체시험 23/23).
  • 실셸 실측: 편집→스냅샷 생성(ls 확인)→kill -9→재기동→복구 배너 등장→[복구]→내용 복원
(screencapture)→⌘S→스냅샷 정리 확인. 회귀 하니스 27/27 유지, make ai 에러0·경고0.
  • 버그 발견·수정: native→JS 전달에 atob()만 쓰면 UTF-8(한글) mojibake — Uint8Array+
TextDecoder('utf-8')로 정식 디코딩하도록 수정, 재검증 완료.
  • 문서: /Users/ef/CrownyDoc/projects/2026-07-17-오피스-자동저장복구-Phase2.md
  • 잔여: cdf 왕복은 아직 본문 HTML 통짜(구조 분해 전, 1단계 방침 그대로 상속) — 후속 Phase 2
심화(버전·비교) 및 여러 오피스 탭 동시편집 시 문서별 키 충돌 가능성은 후속 검토.

【완료】 Phase 2 — 내보내기 4종(MD·RTF·DOCX·PDF) (2026-07-17)

  • bundle/office/bridge/내보내기.한선(신규, 111함수) — HTML→블록튜플배열(자체 파서, 위치기반
런상태로 굵게/기울임/밑줄 보존) → 포맷별 조립. crowny-word 엔진 이식 재사용: 마크다운왕복· RTF내보내기·DOCX파일·DOCX조각·PDF텍스트(원본 무수정). 자체시험 30/30 PASS.
  • native: caExportOfficeDocumentFormat:ext:label:(공용) + 4개 셀렉터(Markdown/RTF/DOCX/PDF),
File>내보내기 서브메뉴로 HTML 포함 5종 노출.
  • 실측: file/textutil/unzip+xmllint/qlmanage로 4포맷 전부 진짜 유효 파일 확인(docx=실제
"Microsoft Word 2007+"+textutil 텍스트추출 성공, pdf=Quick Look 썸네일 렌더 성공). make ai 에러0·경고0, 3초 생존, 회귀 27/27 유지.
  • 문서: /Users/ef/CrownyDoc/projects/2026-07-17-오피스-내보내기4종-Phase2.md
  • 잔여: 표 셀 내부 서식·중첩목록·이미지는 1단계 범위 밖. 마우스 조작 메뉴클릭 GUI E2E는
다세션 공유 데스크톱 안전상 미실시(엔진 CLI 경로는 native와 동일 NSTask 배선으로 완전 실측) — 사람 육안 확인 1회 권장.
  • 게이트: cdf 왕복 무손실(Phase2 앞서 완료) + 5포맷 내보내기 실측 + 자동복구(Phase2 앞서 완료)
→ Phase 2 전항 충족.

【완료】 Phase 2 저장/출력 안정화 (2026-07-17)

  • cdf(CWDv2) 정본 저장/열기: 6섹션 컨테이너+본문HTML 무손실 왕복+메타. 정본 문서저장.한선17/17.
  • 자동저장·복구: .autosave/제목.cdf 8초 원자적 쓰기, kill후 복구배너→복원, ⌘S시 정리. 자동복구.한선23/23.
  • 내보내기 5종: HTML·MD·RTF·DOCX·PDF (crowny-word 엔진 연결+HTML→문서모델 파서). 실파일 유효성 검증(file/unzip/xmllint/qlmanage). 내보내기.한선30/30.
  • 문서 라이브러리: 홈 최근문서=실데이터(~/Documents/CrownyOffice 스캔), 카드클릭 열기(런타임 후킹으로 앱무수정 유지). 문서목록.한선37/37.
  • 부수: 상태바 하단고정, 긴문서 스크롤 보강.
  • 회귀 하니스 27/27 유지 전구간. 배포 1.0.7.
  • Phase 2 완료 → 저장/출력 계층 닫힘. 다음 Phase 3(슬라이드·시트·그래프·마인드맵 연결).