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

크라우니 오피스 — React앱↔셸 연결 갭 목록 (다른 세션용 작업 티켓)

목적: crowny://office 의 React 오피스 앱(self-contained, bundle/office/app/index.html)을 네이티브 셸 + 한선씨 엔진과 실제로 연결하는 데 지금 없는 기능 열거. 다른 세션이 미리 만들어 둘 목적. 실측(2026-07-14): 앱은 브릿지·영속성·파일IO 전무.

실측 근거 (앱 내부)

webkit.messageHandlers 0 · window.crowny 0 · chrome.webview 0 · localStorage 0 · IndexedDB 0 · FileReader 0 · exportPDF 0 · toDocx 0 · xlsx 0 · canvas 0 · 수식/formula 0 → 앱은 UI만 있고 데이터는 데모 상수. 편집(문서 contenteditable)은 되지만 저장·왕복 없음.

이미 있는 자산 (연결 대상 — 새로 안 만들어도 됨)

  • 문서 엔진: crowny-word/도구/ 133파일 (편집기코어·HTML왕복·DOCX파일·RTF내보내기·PDF텍스트·마크다운왕복·검색치환·표계산정렬·각주미주·목차생성·자동저장복구·버전비교 등)
  • 시트 엔진: CrownyDoc/한선씨/시트/ 15파일 (수식파서·셀서식·시트차트·시트고급·시트템플릿)
  • 슬라이드 엔진: CrownyDoc/한선씨/슬라이드/ 14파일 (슬라이드엔진·템플릿·도구모음·확장)
  • 편집기/협업/내보내기/오피스네이티브: 18+8+4+14파일 (오피스네이티브에 시트/플랜/마인드맵/아웃라인 CoreText 렌더 실증샷 존재)

갭 A — 앱↔셸 브릿지 (최우선, 다른 것의 전제)

앱이 self-contained 번들이라 무수정 → 셸이 WKUserScript로 브릿지를 주입하는 방식.
  • A1 브릿지 프로토콜 정의: window.crownyBridge = {save, open, export, insert, onCommand} 규약(JSON 메시지). 셸=WKScriptMessageHandler 수신.
  • A2 모듈 상태 추출기(JS): 현재 활성 모듈(문서/시트/슬라이드/…) 감지 + 그 모듈의 편집 데이터를 표준 JSON으로 직렬화(문서=HTML, 시트=2D배열+수식, 슬라이드=슬라이드[])
  • A3 모듈 상태 주입기(JS): 저장본 JSON → 앱 화면에 반영. ⚠React state 덮어쓰기 리스크 → 앱과 협의하거나 "새 문서로 로드" 방식. (1단계 저장/열기는 셸이 새 탭 로드로 우회 중)

갭 B — 모듈별 데이터 왕복 변환기 (한선씨 엔진 입출력)

앱 JSON(A2) ↔ 한선씨 엔진 포맷. 엔진은 있으니 어댑터만.
  • B1 문서: 앱 HTML ↔ crowny-word HTML왕복.한선 (거의 직결, 검증만)
  • B2 시트: 앱 셀데이터 ↔ 시트/수식파서.한선 (수식 문법 매핑)
  • B3 슬라이드: 앱 슬라이드 ↔ 슬라이드/슬라이드엔진.한선
  • B4 아웃라인/플랜/포커스/마인드맵/그래프: 오피스네이티브 엔진 존재 여부 실측 후, 없으면 데이터모델 신규(노드/태스크/간트)

갭 C — 파일 포맷 IO (내보내기/가져오기)

엔진 있음(crowny-word DOCX/RTF/PDF, 시트내보내기) → 브릿지 배선만.
  • C1 저장/열기(.html) — 1단계, 현재 셸 브릿지로 구현 중(별도 세션)
  • C2 DOCX 내보내기/가져오기 (crowny-word DOCX파일.한선)
  • C3 XLSX (시트내보내기.한선)
  • C4 PPTX (슬라이드 내보내기 — 엔진 확인 필요)
  • C5 PDF 출력 (crowny-word PDF텍스트.한선 + 인쇄준비.한선)
  • C6 마크다운 왕복 (crowny-word 마크다운왕복.한선)

갭 D — 로컬 영속 계층 (헌장: 로컬 퍼스트)

앱 localStorage 0 → 셸/엔진이 담당.
  • D1 문서 라이브러리: ~/Documents/CrownyOffice/ 파일 저장소 + 메타(제목·수정일·모듈)
  • D2 자동 저장/복구 (crowny-word 자동저장복구.한선 연결)
  • D3 최근 문서 목록 — 앱 홈 대시보드 "최근 문서"를 데모→실데이터로

갭 E — 클라우드 동기화 (헌장 3접점 中)

  • E1 로컬↔crowny 계정 동기화 어댑터 (로컬 우선 저장 + 온라인 시 업로드)
  • E2 충돌 해결/버전 (crowny-word 버전비교.한선)

갭 F — 미디어/삽입

앱 FileReader 0 → 로컬 이미지·파일 삽입 불가.
  • F1 로컬 이미지 삽입(파일선택→data URI 또는 저장소 참조)
  • F2 표/차트/도형 (crowny-word 표고급·도형글상자, 시트차트)

갭 G — 편집 보조 (앱에 있을 수도, 영속 안 됨)

  • G1 전역 검색/치환 (crowny-word 검색치환·찾기고급)
  • G2 실행취소/재실행 영속 (crowny-word 실행취소.한선)
  • G3 맞춤법/자동교정 (crowny-word 맞춤법기초·자동교정)

우선순위 제안 (다른 세션 착수 순)

  1. A1·A2 브릿지 프로토콜+상태추출 — 모든 연결의 전제
  2. B1·C1·D1 문서 왕복+저장/열기+라이브러리 — 첫 완결 모듈
  3. B2·C3 시트, B3·C4 슬라이드 — 모듈 확장
  4. B4 마인드맵/플랜/포커스/그래프 엔진 실측·보강
  5. C2·C5·C6 DOCX/PDF/MD, E 클라우드, F·G 보조

방침 (플랫폼 헌장 정합)

  • 최종 목표는 React 제거(한선씨 생성 UI) — 하지만 지금은 React 앱을 왕복 연결로 실작동시키고, 엔진(한선씨)을 뒤에 붙인다. 브릿지(A)가 있으면 UI를 나중에 한선씨 HTML로 바꿔도 엔진·저장 계층은 그대로 재사용.
  • 각 티켓 완료 시 실측(앱에서 실제 저장→파일→재열기) 후 CrownyDoc 갱신.