TreeMap
무료 오픈소스 디스크 사용량 시각화 도구로, 사각형 트리맵·중복 파일 탐색·디스크 가득 예측·정리 시 파일을 휴지통으로만 이동한다
댓글을 불러오는 중입니다.
로그인 상태를 확인하는 중입니다.
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
한글 문서를 어디서든 — 설치 없이 브라우저로 HWP/HWPX viewer · editor — powered by rhwp HanPage 는 오픈소스 HWP/HWPX 뷰어·에디터 엔진 rhwp 를 paldyn 이 hanpage.paldyn.com 에서 호스팅·재배포하는 프로젝트입니다. 설치 없이 브라우저에서 한글 문서를 열어볼 수 있습니다. HanPage 가 사용하는 파서·렌더·편집 엔진은 오픈소스 프로젝트 rhwp 입니다. 현재 엔진 버전 v0.7.13 (MIT License, © 2025-2026 Edward Kim 및 기여자 다수). 엔진의 릴리스 사이클별 상세 변경 내역과 외부 기여자 인정은 upstream 의 CHANGELOG 와 Releases 를 참조하세요. paldyn 의 본 저장소는 엔진 자체를 fork 하여 hanpage.paldyn.com 호스팅 및 재배포 산출물을 관리합니다. 혼자 뼈대를 세우고, 함께 살을 붙이고, 모두의 것으로 완성한다. 0.5.0까지 혼자 뼈대를 완성하고 공개하는 이유 — 커뮤니티가 붙었을 때 방향이 흔들리지 않으려면 핵심 아키텍처가 먼저 견고해야 합니다.README 전문 보기 ↗
HanPage 는 오픈소스 HWP/HWPX 뷰어·에디터 엔진 rhwp 를 paldyn 이 hanpage.paldyn.com 에서 호스팅·재배포하는 프로젝트입니다. 설치 없이 브라우저에서 한글 문서를 열어볼 수 있습니다.
온라인 데모 | VS Code 확장 | Open VSX
HanPage 가 사용하는 파서·렌더·편집 엔진은 오픈소스 프로젝트 rhwp 입니다. 현재 엔진 버전 v0.7.13 (MIT License, © 2025-2026 Edward Kim 및 기여자 다수).
엔진의 릴리스 사이클별 상세 변경 내역과 외부 기여자 인정은 upstream 의 CHANGELOG 와 Releases 를 참조하세요. paldyn 의 본 저장소는 엔진 자체를 fork 하여 hanpage.paldyn.com 호스팅 및 재배포 산출물을 관리합니다.
혼자 뼈대를 세우고, 함께 살을 붙이고, 모두의 것으로 완성한다.
0.5 ──── 1.0 ──── 2.0 ──── 3.0
뼈대 조판 협업 완성
| 단계 | 방향 | 전략 |
|---|---|---|
| 0.5 → 1.0 | 읽기/쓰기 기반 위에 조판 엔진 체계화 | 핵심 아키텍처를 혼자 견고하게 |
| 1.0 → 2.0 | AI 조판 파이프라인 위에 커뮤니티 참여 개방 | 기여 진입 장벽을 낮추는 구조 |
| 2.0 → 3.0 | 커뮤니티가 채운 기능 위에 공공 자산화 | 한컴 대등 수준 달성 |
0.5.0까지 혼자 뼈대를 완성하고 공개하는 이유 — 커뮤니티가 붙었을 때 방향이 흔들리지 않으려면 핵심 아키텍처가 먼저 견고해야 합니다.
역공학 완성, 읽기/쓰기 기반 구축
HML은 실제 corpus로 확인된 HWPML 2.9/2.91 구조만 제한 지원합니다. 지원 범위의 수식은 가져와 편집할 수 있고, 보존 불가 요소가 없는 HML 원본은 preflight 검사 후 HML로 다시 저장할 수 있습니다. 그림·내장/외부 리소스 등 미지원 요소는 경고하고 손실 저장을 차단합니다.
AI 조판 파이프라인, 뼈대 완성
커뮤니티가 기능을 채워가는 단계, 살 붙이기
한컴과 대등한 수준, 완전한 공공 자산
자세한 내용은 로드맵 문서를 참조하세요.
--features native-skia)--text-as-paths 지원, 바이트 재현성), native Skia direct opt-in(--features native-skia, --backend direct)PageRenderTree → PageLayerTree (Rust DocumentCore::build_page_layer_tree, WASM getPageLayerTree) — schemaVersion: 1, 호환 변경은 additive 원칙--features native-skia)?renderer=auto를 명시하면 bounded document preflight가 완전하고 적격이며 필요한 문서 폰트를 준비할 수 있는 경우만 CanvasKit으로 고정합니다. 표준 선·도형 점선과 수평 글자 겹침, 탭 리더, 밑줄·취소선·강조점, 위치가 확정된 공백·탭·문단 끝·줄바꿈 부호, nominal glyph replay가 안전한 일반 TextRun의 세로쓰기·장평·음영·그림자·외곽선·양각·음각은 CanvasKit이 직접 재생합니다. 방향과 cluster advance 권한이 아직 없는 복합 shaping 문자, 옛한글·boxed-PUA와 장평 또는 paint effect의 조합, 세로·회전된 특수 시각 op, [표], [그림] 같은 구조 조판 부호를 포함하는 showControlCodes, 판정·초기화·리소스 준비·런타임 실패는 해당 문서 revision 전체를 Canvas2D로 고정합니다. ?renderer=canvas2d와 ?renderer=canvaskit은 명시적 강제 선택입니다.TextRun 폴백 (호환 계약)72/96 변환을 사용합니다. 손실되는 gradient/pattern/shadow/connector/image adjustment는 SVG backend 사용을 안내하며 실패하고, Raw SVG만 --raster-dpi 기반 bounded raster fallback을 사용합니다.웹 페이지에 HWP 에디터를 통째로 임베드합니다. 메뉴, 툴바, 서식, 표 편집 — 모든 기능을 그대로 사용할 수 있습니다.
npm install @rhwp/editor
<div id="editor" style="width:100%; height:100vh;"></div>
<script type="module">
import { createEditor } from '@rhwp/editor';
const editor = await createEditor('#editor');
</script>
WASM 기반 파서/렌더러를 직접 사용하여 HWP 파일을 SVG로 렌더링합니다.
npm install @rhwp/core
import init, { HwpDocument } from '@rhwp/core';
globalThis.measureTextWidth = (font, text) => {
const ctx = document.createElement('canvas').getContext('2d');
ctx.font = font;
return ctx.measureText(text).width;
};
await init({ module_or_path: '/rhwp_bg.wasm' });
const resp = await fetch('document.hwp');
const doc = new HwpDocument(new Uint8Array(await resp.arrayBuffer()));
document.getElementById('viewer').innerHTML = doc.renderPageSvg(0);
| 패키지 | 용도 | 설치 |
|---|---|---|
| @rhwp/editor | 완전한 에디터 UI (iframe) | npm i @rhwp/editor |
| @rhwp/core | WASM 파서/렌더러 (API) | npm i @rhwp/core |
bindings/python 이 CLI --json 봉투와 mcp-serve 세션 계약을 그대로 재포장한다
(런타임 의존성 0 — 표준 라이브러리만).
pip install -e bindings/python # PyPI 배포 전
export RHWP_BIN=$(pwd)/target/release/rhwp
import rhwp
# 1층 — 무상태
meta = rhwp.info("보고서.hwp")
print(meta.page_count, meta.format)
# 2층 — 세션 (같은 문서를 반복해서 만질 때)
with rhwp.open("서식.hwp") as doc:
doc.fill_fields({"성명": "홍길동"})
saved = doc.save("제출본.hwp", verify=True)
assert saved.verify.identical
# 3층 — 계획 (하나라도 불가능하면 아무것도 저장하지 않는다)
plan = rhwp.Plan("서식.hwp", "제출본.hwp").fill_fields({"성명": "홍길동"}).verify()
if plan.check().ok:
plan.run()
문서: README · API · 요리책 · 문제 해결 · 이주 가이드
처음 프로젝트에 참여하는 개발자는 온보딩 가이드를 먼저 읽어보세요. 프로젝트 아키텍처, 디버깅 도구, 개발 워크플로우를 한눈에 파악할 수 있습니다.
rust-toolchain.toml 기준)cargo build # Development build
cargo build --release # Release build
cargo test # Run tests (3,400+ tests)
WASM 빌드는 Docker를 사용합니다. 플랫폼에 관계없이 동일한 wasm-pack + Rust 툴체인 환경을 보장하기 위함입니다.
cp .env.docker.example .env.docker # 최초 1회: 환경변수 템플릿 복사
docker compose --env-file .env.docker run --rm wasm
빌드 결과물은 pkg/ 디렉토리에 생성됩니다.
cd rhwp-studio
npm install
npx vite --host 0.0.0.0 --port 7700
Open http://localhost:7700 in your browser.
rhwp 는 MCP(Model Context Protocol) 서버를 내장한다 — 설정 한 줄이면 Claude Code 등 MCP 호스트가 HWP/HWPX 를 읽고·검색하고·채우고·변환한다:
// .mcp.json
{ "mcpServers": { "rhwp": { "command": "rhwp", "args": ["mcp-serve"] } } }
첫 호출 3종 (조사 → 위치 → 채움):
hwp_info { "path": "문서.hwp" } // 규모·형식 파악
hwp_search { "path": "문서.hwp", "query": "위임전결" } // 몇 쪽 어느 셀인지
hwp_fill_fields { "path": "서식.hwp", "data": {"성명":"홍길동"} } // 누름틀 채움
대형 문서는 hwp_open → hwp_doc_* 세션 도구로 재파싱 없이 반복 조회·편집한다.
전체 도구 지도·오류 의미론은 MCP 통합 가이드,
막히면 에이전트 실패 사전.
CLI 만 쓸 때의 입구는 rhwp capabilities 한 번이면 된다(전 명령 기계 계약 자기서술).
rhwp export-svg sample.hwp # Export to output/
rhwp export-svg sample.hwp -o my_dir/ # Export to custom directory
rhwp export-svg sample.hwp -p 0 # Export specific page (0-indexed)
rhwp export-svg sample.hwp --debug-overlay # Debug overlay (paragraph/table boundaries)
rhwp export-png sample.hwp -o out/ # PNG (requires --features native-skia build)
rhwp export-pdf sample.hwp -o out.pdf # PDF (byte-reproducible)
rhwp export-pdf sample.hwp --text-as-paths # Text as vector paths (font-free)
rhwp dump sample.hwp # Full IR dump
rhwp dump sample.hwp -s 2 -p 45 # Section 2, paragraph 45 only
rhwp dump-pages sample.hwp -p 15 # Page 16 layout items
rhwp info sample.hwp # File info (size, version, sections, fonts)
export-svg --debug-overlay → Identify paragraphs/tables by s{section}:pi={index} y={coord}dump-pages -p N → Check paragraph layout list and heightsdump -s N -p M → Inspect ParaShape, LINE_SEG, table propertiesNo code modification needed for the entire debugging process.
src/
├── main.rs # CLI entry point
├── parser/ # HWP/HWPX file parser
├── model/ # HWP document model
├── document_core/ # Document core (CQRS: commands + queries)
│ ├── commands/ # Edit commands (text, formatting, tables)
│ ├── queries/ # Queries (rendering data, pagination)
│ └── table_calc/ # Table formula engine (SUM, AVG, PRODUCT, etc.)
├── renderer/ # Rendering engine
│ ├── layout/ # Layout (paragraph, table, shapes, cells)
│ ├── pagination/ # Pagination engine
│ ├── equation/ # Equation parser/layout/renderer
│ ├── typeset.rs # Typeset engine (main pagination)
│ ├── svg.rs # SVG output
│ ├── web_canvas.rs # Canvas output
│ └── skia/ # Native Skia PNG/PDF (--features native-skia)
├── paint/ # PageLayerTree paint IR + replay planes
├── emf/ # EMF parser + SVG converter
├── ooxml_chart/ # OOXML chart parser + SVG renderer
├── serializer/ # HWP/HWPX/HML serializer (save)
└── wasm_api.rs # WASM bindings
rhwp-studio/ # Web editor (TypeScript + Vite)
├── src/
│ ├── core/ # Core (WASM bridge, types)
│ ├── engine/ # Input handlers
│ ├── hwpctl/ # hwpctl compatibility layer
│ ├── ui/ # UI (menus, toolbars, dialogs)
│ └── view/ # Views (ruler, status bar, canvas)
├── e2e/ # E2E tests (Puppeteer + Chrome CDP)
│ └── helpers.mjs # Test helpers (headless/host modes)
npm/editor/ # @rhwp/editor (iframe embed package)
rhwp-chrome/ rhwp-firefox/ # Browser extensions (+ rhwp-safari, rhwp-vscode)
rhwp-shared/ # Shared frontend modules
assets/fonts/ # Canonical open-source font root
mydocs/ # Project documentation (Korean)
├── orders/ # Daily task tracking (archives/: past months)
├── plans/ # Task plans (archives/: completed)
├── working/ report/ # Stage reports / final reports
├── pr/ # External PR review records (archives/)
├── feedback/ # Code review feedback
├── tech/ manual/ # Technical docs / guides
└── troubleshootings/ # Troubleshooting records
scripts/ # Build & quality tools
├── metrics.sh # Code quality metrics collection
└── dashboard.html # Quality dashboard with trend tracking
이것은 바이브 코딩이 아닙니다. AI가 주는 코드를 읽지도 않고 수락하는 것이 아닙니다. 모든 계획은 검토되고, 모든 결과물은 검증되며, 모든 결정의 뒤에는 사람이 있습니다.
바이브 코딩 — AI 출력을 읽지 않고 수락하고, AI에게 아키텍처 결정을 맡기고, 이해하지 못하는 코드를 배포하는 것 — 은 함정입니다. 겉보기에는 동작하지만, 이해하지 못했기 때문에 문제가 생겨도 진단할 수 없는 코드가 만들어집니다.
이 프로젝트는 정반대의 접근을 취합니다. 사람 작업지시자가 방향, 품질, 아키텍처 결정의 완전한 소유권을 유지하고, AI는 혼자서는 불가능한 속도와 규모로 구현을 수행합니다. 핵심 차이: 사람은 절대 생각을 멈추지 않습니다.
| 바이브 코딩 | 이 프로젝트 | |
|---|---|---|
| 사람의 역할 | AI 출력 수락 | 지시, 검토, 결정 |
| 계획 | 없음 — "그냥 만들어" | 계획서 작성 → 승인 → 실행 |
| 품질 관문 | 동작하길 바람 | 3,400+ 테스트 + Clippy + CI + 코드 리뷰 |
| 디버깅 | AI에게 AI 버그 수정 요청 | 사람이 진단, AI가 구현 |
| 아키텍처 | 우연히 형성 | 의도적 설계 (CQRS, 의존성 방향) |
| 문서 | 없음 | 10,000+개 파일의 프로세스 기록 |
| 결과물 | 취약, 유지보수 어려움 | 프로덕션 수준, 450K+ 라인 |
AI는 배율기입니다. 하지만 배율기는 기존 프로세스를 증폭시킵니다. 프로세스 없음 × AI = 빠른 혼돈. 좋은 프로세스 × AI = 비범한 결과물.
이 프로젝트는 Claude Code (Anthropic AI 코딩 에이전트)를 페어 프로그래밍 파트너로 사용하여 개발합니다. 전체 개발 과정이 투명하게 문서화되어 있습니다.
작업지시자 (사람) AI 페어 프로그래머 (Claude Code)
──────────────── ─────────────────────────────
방향 설정, 우선순위 결정 → 분석, 계획, 구현
계획 검토, 승인 ← 구현 계획서 작성
도메인 피드백 제공 → 디버깅, 테스트, 반복
아키텍처 결정 → 정밀하게 실행
품질 및 정확성 판단 ← 코드, 문서, 테스트 생성
mydocs/ 디렉토리(10,000+개 파일, 영문 번역: mydocs/eng/)에 전체 개발 기록이 있습니다: 일일 작업 기록, 구현 계획서, 코드 리뷰 피드백, 기술 연구 문서, 트러블슈팅 기록.
mydocs/는 코드에 대한 문서가 아닙니다 — AI로 소프트웨어를 만드는 방법에 대한 문서입니다. 오픈소스 방법론입니다.
Hyper-Waterfall 방법론 — 거시적 워터폴 + 미시적 애자일, AI가 이 둘을 동시에 가능하게 한다.
local/task{N} ──커밋──커밋──┐
├─→ local/devel merge (작업 단위)
├─→ devel merge + push (검증 후)
├─→ main merge + 태그 (릴리즈 시점, PR 기반)
| 브랜치 | 용도 |
|---|---|
main | 릴리즈 (태그: v0.8.0 등) |
devel | 개발 통합 (원격 push 대상) |
local/devel | devel 의 로컬 작업 브랜치 |
local/task{N} | GitHub Issue 번호 기반 타스크 브랜치 |
M{버전} (예: M100=v1.0.0, M05x=v0.5.x)mydocs/orders/yyyymmdd.md — M100 #1 형식으로 참조Task #1: 내용 — closes #1로 Issue 자동 종료gh issue create → GitHub Issue 등록 (마일스톤 지정)local/task{issue번호} 브랜치 생성closes #{번호}export-svg --debug-overlay → 문단/표 식별dump-pages -p N → 배치 목록과 높이dump -s N -p M → ParaShape, LINE_SEG 상세
mydocs/의 문서는 AI 기반 소프트웨어 개발의 교육 자료로 활용됩니다.
모든 문서는 한국어로 작성합니다.
mydocs/
├── orders/ # 오늘 할일 (yyyymmdd.md)
├── plans/ # 수행 계획서, 구현 계획서
│ └── archives/ # 완료된 계획서 보관
├── working/ # 단계별 완료 보고서
├── report/ # 기본 보고서
├── feedback/ # 코드 리뷰 피드백
├── tech/ # 기술 사항 정리 문서
├── manual/ # 매뉴얼, 가이드 문서
└── troubleshootings/ # 트러블슈팅 관련 문서
| 문서 유형 | 위치 | 파일명 규칙 |
|---|---|---|
| 오늘 할일 | orders/ | yyyymmdd.md — 마일스톤(M100)+Issue(#1) 형식 |
| 수행 계획서 | plans/ | Issue 번호 참조 |
| 완료 보고서 | working/ | Issue 번호 참조 |
| 기술 문서 | tech/ | 주제별 자유 명명 |
graph TB
HWP[HWP/HWPX File] --> Parser
Parser --> Model[Document Model]
Model --> DocumentCore
DocumentCore --> |Commands| Edit[Edit Operations]
DocumentCore --> |Queries| Render[Rendering Pipeline]
Render --> Pagination
Pagination --> Layout
Layout --> SVG[SVG Output]
Layout --> Canvas[Canvas Output]
DocumentCore --> WASM[WASM API]
WASM --> Studio[rhwp-studio Web Editor]
Studio --> hwpctl[hwpctl Compatibility Layer]
본 저장소(paldyn/HanPage)는 엔진 rhwp의 재배포·호스팅 산출물 관리용입니다. 기여는 성격에 따라 다음과 같이 나뉩니다.
엔진 자체 (파서·렌더·페이지네이션·편집·CLI·WASM·확장): upstream edwardkim/rhwp에 PR을 제출해주세요. PR base 는 upstream 의 devel 입니다.
HanPage 호스팅·재배포 (CI, gh-pages 워크플로우, 도메인 설정 등): 본 저장소의 Issues / PRs로 제출해주세요.
PR base 는 devel 입니다 (main 아님). GitHub 기본 브랜치는 main 이지만 기여 PR 은 모두 devel 로 받습니다.
이슈 먼저 확인: 동일 영역에 진행 중인 작업이 있는지 열린 이슈 와 열린 PR 을 먼저 확인해 주세요. 중복 작업을 방지합니다.
Claude·Codex 재사용 기능: 에이전트나 Skill을 새로 만들기 전 capability 카탈로그에서 기존 기능과 Issue 기반 CAP-<N> 등록 규칙을 확인해 주세요.
이슈 close 는 메인테이너: 작업 완료 후 PR 만 제출해 주세요. 이슈는 PR 머지 시 메인테이너가 close 합니다.
한컴 PDF 는 정답지가 아닙니다: 한컴 도구 (편집기 / Viewer / 한컴독스), 버전 (2010 / 2020 / 2022), 출력 경로 (한컴 자체 / OS 인쇄) 별로 PDF 결과가 다릅니다. 자세한 내용과 환경별 비교 자료는 한컴 PDF 환경 의존성 위키 를 참고하세요.
상세한 엔진 기여 절차 (Fork → 브랜치 → 커밋 → PR) 는 CONTRIBUTING.md 를 참고하세요.
엔진 (rhwp) 의 기술 권위 자료는 upstream rhwp Wiki 에 정리되어 있습니다:
본 제품은 한글과컴퓨터의 한글 문서 파일(.hwp) 공개 문서를 참고하여 개발하였습니다.
"한글", "한컴", "HWP", "HWPX"는 주식회사 한글과컴퓨터의 등록 상표입니다. 본 프로젝트는 한글과컴퓨터와 제휴, 후원, 승인 관계가 없는 독립적인 오픈소스 프로젝트입니다.
"Hangul", "Hancom", "HWP", and "HWPX" are registered trademarks of Hancom Inc. This project is an independent open-source project with no affiliation, sponsorship, or endorsement by Hancom Inc.
엔진 rhwp: MIT License — Copyright (c) 2025-2026 Edward Kim 외 기여자
HanPage 재배포 산출물 (본 저장소 추가분): MIT License — Copyright (c) 2026 paldyn
본 저장소는 MIT 라이선스의 권한에 따라 rhwp 를 fork 하여 hanpage.paldyn.com 호스팅용으로 재배포합니다. 자세한 재배포 안내는 LICENSE 와 동봉된 라이선스 고지 파일을 참조하세요.