목록으로 돌아가기

[기술 분석] HWP vs HWPX: 차세대 한글 문서 내부 XML 구조와 파싱 전략

기술 분석2026-08-10· 읽기 시간 5분

기존 HWP 파일이 5.0 레거시 바이너리(OLE/CFB) 구조였다면, HWPX는 Open Word-Processor Markup Language(OWPML) 기반의 ZIP 압축 XML 포맷입니다. 확장자를 .zip으로 변경하여 압축을 풀면 내부 XML 파일들이 드러납니다.

하지만 HWPX가 XML 기반이라고 해서 표(Table)나 텍스트 추출이 쉽다고 생각하면 큰 오산입니다.

1. HWPX 내부 구조 개요 (Contents/section0.xml)

HWPX 파일의 핵심 본문은 Contents/section0.xml에 위치합니다. 구조를 뜯어보면 다음과 같은 XML 태그 위계를 가집니다.

<hp:p id="1" paraPrRef="1"> <hp:run charPrRef="1"> <hp:t>이것은 일반 텍스트입니다.</hp:t> </hp:run> <hp:run charPrRef="2"> <hp:tbl id="2" rowCnt="2" colCnt="2"> <hp:tr> <hp:tc> <!-- 셀 병합 정보는 hp:tc 속성이 아닌 자식 태그 hp:cellSpan에 위치 --> <hp:cellSpan colSpan="2" rowSpan="1"/> <hp:p><hp:run><hp:t>표 1행 1열 (2칸 병합)</hp:t></hp:run></hp:p> </hp:tc> </hp:tr> </hp:tbl> </hp:run> </hp:p>

2. HWPX 파싱 시 발생하는 3가지 기술적 함정

① 문단 부속 요소(hp:run) 내부의 표(hp:tbl) 중첩 문제

HWPX에서는 표가 독립된 레이아웃이 아니라, **문단(hp:p) 내부의 부속 요소(hp:run)**로 포함되어 중첩될 수 있습니다. 단순 DOM Traversal로 XML을 읽으면 표 내부 텍스트가 일반 문단 텍스트와 섞여 순서가 뒤죽박죽됩니다.

② 셀 병합(hp:cellSpan) 자식 태그 조회의 중요성

HWPX 표의 셀 병합 정보(colSpan/rowSpan)는 <hp:tc>의 속성이 아니라, 자식 태그인 <hp:cellSpan> 속성에 담겨 있습니다. 파서 개발 시 이를 파악하지 못하고 <hp:tc> 직접 속성만 조회하면 셀 병합 정보가 통째로 날아가 마크다운 표가 심각하게 깨집니다.

③ 누락되는 엔티티 및 스페이스 처리

XML 특성상 연속된 공백이나 줄바꿈 태그(<hp:lineBreak/>)가 제대로 파싱되지 않으면, 문서의 단락 구분이 사라져 AI가 학습하기 불가능한 통째 뭉개진 텍스트가 됩니다.

3. MDChange의 HWPX 파싱 알고리즘

MDChange는 HWPX의 OWPML 스키마 노드를 재귀적으로 순회하며 표 계층 구조(DOM Tree)와 hp:cellSpan 노드를 정확히 탐색하여 마크다운 Table 문법으로 직렬화(Serialization)합니다.

HWPX 문서를 깨짐 없이 깔끔한 마크다운 및 LLM용 텍스트로 변환하고 싶다면 MDChange 엔진을 활용해 보세요.

지금 바로 무료로 변환해보세요

HWP/HWPX 공공 및 기술 문서를 3초 만에 깨끗한 마크다운으로 추출합니다.

무료로 문서 변환하기