PDF 에디터를 직접 만들기로 했다 — 아크로벳과 한글의 핵심 빌려오기 (ICEPDF #1 기획)
아크로벳 리더의 기본기와 한글 문서 변환을 한 프로그램에. mupdf.js와 kordoc이라는 '정품 열쇠'를 빌려 ICEPDF를 시작한 이야기.
아크로벳 리더의 기본기와 한글 문서 변환을 한 프로그램에 담고 싶었다. 그래서 AI(클로드)와 함께 PDF 뷰어·에디터를 직접 만들기로 했다. 이름은 ICEPDF.
무엇을 원했나
머릿속 요구사항은 분명했다. "아크로벳 리더에서 매일 쓰는 것들 + 내가 늘 아쉬웠던 몇 가지"였다.
- 텍스트를 드래그로 선택·복사
- 페이지 삽입·삭제, 다른 PDF에서 가져오기
- 책갈피(Ctrl+B)로 목차 만들기
- PPT처럼 여러 페이지를 한눈에 보는 썸네일/그리드
- 형광펜, 이미지 삽입 후 저장
- PDF를 한글 문서(HWPX)나 마크다운으로 변환
- 의존성 문제 없는 단일 설치파일
이걸 다 만족하는 무료 프로그램이 마땅치 않았다. 그래서 "아크로벳과 한글의 핵심을 리버스 엔지니어링하자"는 생각으로 시작했다.
리버스 엔지니어링? 사실은 정품 열쇠를 빌렸다
자물쇠를 분해하는 대신 정품 열쇠 두 개를 빌리는 게 정답이었다.
- mupdf.js — 수많은 상용 PDF 도구의 심장인 MuPDF 엔진의 공식 WebAssembly 포트. 렌더링, 텍스트 선택(quad 기반), 주석, 페이지 편집, 책갈피(PDF outline)를 아크로벳과 같은 방식으로 처리한다. 그래서 ICEPDF로 만든 형광펜·책갈피가 아크로벳에서도 그대로 보인다.
- kordoc — 한국 공문서 파서 라이브러리. 처음엔 단순 hwp 파서인 줄 알았는데, 열어보니 PDF→마크다운 파서와 마크다운→HWPX 생성기를 모두 내장하고 있었다. 한글 변환 기능이 이걸로 완결됐다.
- Electron — 이 둘이 다 Node.js 기반이라, Electron으로 감싸면 함수 호출로 곧장 연동되고 단일 설치파일로 패키징된다.
스택 정리
| 역할 | 선택 | 이유 |
|---|---|---|
| 문서 엔진 | mupdf.js (WASM) | 렌더·선택·주석·편집·저장 일체 |
| 변환 | kordoc | PDF→MD, MD→HWPX 내장 |
| 셸 | Electron + React | 단일 설치파일, in-process 연동 |
| OCR(이후) | tesseract.js | 이미지 PDF 글자 인식 |
설계는 단순했다. 무거운 문서 작업은 별도 스레드(worker)에서 돌리고, 화면(React)은 좌표를 전부 PDF 포인트 공간으로 통일해 그린다.
다음 글에서는 이 계획을 실제로 0에서 1로 옮긴 과정 — 엔진이 정말 되는지 먼저 검증하고, 뷰어와 편집·변환을 세워 하루 만에 설치 가능한 첫 버전까지 간 이야기를 적는다.