피드로 돌아가기
Dev.toFrontend
원문 읽기
NCX 앵커 기반 EPUB 파싱으로 다권图书 컬렉션을 개별 파일로 자동 분리함
How to Split an EPUB Collection into Individual Books
AI 요약
Context
EPUB 컬렉션이 단일 파일로 번들 제공되어 개별 도서 관리가 어려운 상황이 많음. 출판사 번들, 시리즈 컴파일, 박스 세트 등이 대표적 사례임.
Technical Solution
- NCX 파싱: navPoint 구조에서 책 경계를 식별함. href 속성에서 HTML 파일 경로와 앵커를 분리하여 각 도서의 시작/끝 지점을 판단함
- 비도서 필터링: copyright, introduction, preface, dedication, acknowledgments 등의 키워드를 기준으로 메타데이터 챕터를 제외함
- 앵커 기반 추출: 여러 책이 같은 HTML 파일을 공유할 때 id 속성(정규표현식 /^<a[^>]id=["']${anchor}["'][^>]>/)을 활용하여 범위 지정함
- 스파인 처리: 책이 여러 HTML 파일에 걸쳐 있을 때 spine 배열 순서대로 콘텐츠를 순차 연결함
- EPUB 생성: mimetype 파일을 압축 없이 ZIP 첫 번째 항목으로 배치하고 OEBPS 디렉토리 구조를 유지함
Impact
완전한 브라우저 기반 처리로 서버 업로드 없이 프라이버시 보호됨. 10권 이상 컬렉션도 일괄 분할 가능함.
Key Takeaway
EPUB 분리의 핵심은 NCX의 navPoint 계층 구조에서 href와 앵커를 정확히 파싱하여 도서별 경계를 설정하는 것임.
실천 포인트
EPUB 분할 도구를 개발할 때 toc.ncx 파일의 navPoint 구조를 먼저 분석하고, 각 도서의 startAnchor와 endAnchor를 정규화해야 함. HTML 엔티티 디코딩(&, Ӓ)과 상대 경로 처리(../, ./)를 반드시 구현해야 리소스 참조가 깨지지 않음.