확장자 한 글자 차이, 그릇은 완전히 달라요
한글 문서를 주고받다 보면 같은 내용인데 어떤 파일은 .hwp, 어떤 파일은 .hwpx로 끝나요. 글자 하나 차이라 같은 형식의 새 버전쯤으로 여기기 쉽지만, 두 형식은 내용을 담는 그릇부터 달라요. 이 글은 한글과컴퓨터가 직접 공개한 자료만 읽고 확인한 내용으로 두 형식을 비교하고, 이 사이트의 한글(HWPX) → PDF 변환기가 어디까지 읽는지는 코드와 시험 파일로 확인했어요.
한컴 기술 블로그의 형식 해설에 따르면 HWP는 마이크로소프트가 만든 복합 파일(CFB) 구조 위에 놓인 바이너리 형식이에요. 파일 하나 안에 폴더처럼 여러 데이터 흐름(스트림)을 넣는 방식이라, 해설은 이를 파일 안에 폴더 구조가 들어 있는 형태로 비유해요. HWPX는 XML 파일 여러 개를 ZIP으로 묶은 형식이에요. 같은 블로그는 두 형식의 가장 큰 차이를 바로 이 점으로 꼽아요.
| 항목 | HWP | HWPX |
|---|---|---|
| 겉 구조 | 복합 파일(CFB) 안에 스트림 | ZIP 안에 XML 파일과 폴더 |
| 본문이 든 곳 | BodyText 아래 Section0, Section1… 스트림 | Contents 폴더의 section0.xml, section1.xml… |
| 글자·문단 모양 목록 | DocInfo 스트림 | Contents/header.xml |
| 압축 | DocInfo와 본문 스트림을 zlib으로 압축해 저장 | ZIP 묶음 자체가 압축 |
| 내용 꺼내기 | 레코드 구조를 풀어야 해서 따로 분석이 필요 | XML이라 비교적 쉽게 추출 |
| 표준 | 한컴이 형식 문서를 공개 | 국가표준 KS X 6101(OWPML)을 따름 |
HWPX가 ZIP이라는 점은 직접 확인할 수도 있어요. 한컴 블로그는 확장자를 .zip으로 바꿔 압축을 풀면 안의 파일들이 보인다고 설명해요. HWP는 ZIP이 아닌 복합 파일이라 같은 방법이 통하지 않고, 아래에서 보듯 이 사이트의 변환기도 ZIP이 아닌 파일은 열지 못해요.
공식 자료로 본 두 형식의 내력
한컴 다운로드 센터의 'HWP/OWPML 형식' 페이지는 두 형식의 공개 과정을 이렇게 정리해요. 한컴은 2010년 6월 29일에 바이너리 형식인 HWP와 마크업 언어인 HWPML을 공개했어요. 이때 HWP 2.x/3.x와, HWP 2002부터 HWP 2018까지 쓰는 5.x 형식을 함께 내놓았어요. 2014년 10월에는 HWP 5.0 문서의 보완 자료와 배포용 문서, 수식, 차트 형식 문서를 더했어요.
같은 페이지의 OWPML 탭은 KS X 6101(OWPML)이 2011년 12월 30일에 제정된 표준이며 HWPML을 국가표준으로 옮긴 판이라고 설명해요. 개발은 2010년부터 약 2년 동안 국내 문서 표준화 위원회를 거쳤다고 해요. 표준의 목표로는 여러 프로그램에서 만든 사람의 의도대로 보이고 다시 고칠 수 있게 하는 것, 기존 HWP 문서와의 호환, 문서의 유통과 이전 지원이 적혀 있어요. 확장자 안내도 있어요. HWP 2018부터는 .owpml 확장자로, 그보다 낮은 버전은 HWP 2010부터 .hwpx 확장자로 지원한다고 적혀 있어요.
| 때 | 공식 자료에 적힌 일 |
|---|---|
| HWP 97 | XML 기반 HWPML 1.0 제공 시작(HWP 2002부터는 HWPML 2.1, 확장자 .hml) |
| 2010년 6월 29일 | HWP 바이너리 형식과 HWPML 공개 |
| 2011년 12월 30일 | KS X 6101(OWPML) 제정 |
| 2014년 10월 | HWP 5.0 보완 자료, 배포용 문서·수식·차트 형식 공개 |
한 가지 덧붙이면, 다운로드 센터 문장에는 OWPML을 '국제표준(KS)'이라고 적은 곳이 있어요. 같은 문장에서 국가표준 버전이라 부르고 표준 번호도 KS로 시작하며, 한컴 기술 블로그도 '한국산업표준(KS)'으로 적고 있어서 이 글에서는 국가표준으로 표기했어요.
HWPX 안을 열어 보면 무엇이 있나
한컴 기술 블로그의 HWPX 구조 해설을 바탕으로 주요 파일의 역할을 정리했어요. 문서 내용에 따라 일부 파일은 없을 수도 있다고 해설은 덧붙여요.
| 파일·폴더 | 담긴 내용 |
|---|---|
| mimetype | HWPX 형식임을 알리는 표시 |
| version.xml | OWPML 형식 버전과 저장한 환경 정보 |
| settings.xml | 저장할 때의 커서 위치 같은 설정 |
| Contents/content.hpf | 작성자·제목·만든 날짜 같은 메타데이터, 파일 목록, 읽는 순서(spine) |
| Contents/header.xml | 글자 모양, 문단 모양, 금칙 문자, 변경 추적 정보 등 설정 |
| Contents/section0.xml… | 구역마다 하나씩, 문단과 글자 단위의 본문 |
| BinData/ | 그림, OLE 개체 같은 바이너리 파일 |
| META-INF/ | 컨테이너 파일 목록, 암호 문서라면 파일별 암호화 정보 |
| Scripts/, Preview/ | 스크립트, 미리보기 그림과 글자(암호 문서는 미리보기를 저장하지 않음) |
이 표에서 개인정보와 이어지는 곳이 두 군데 있어요. content.hpf의 작성자 정보와 Preview의 미리보기 글자예요. HWP 쪽도 비슷해서, 한컴의 HWP 구조 해설에는 문서 요약 정보 스트림과 첫 쪽 내용을 담은 미리보기 글자 스트림이 나와요. 한글 파일을 그대로 보내면 화면에 보이는 본문 말고도 이런 정보가 함께 가요.
이 사이트의 변환기가 읽는 범위
변환기의 코드를 따라가 보면, HWPX 묶음을 연 뒤 Contents 폴더의 section 파일들을 번호 순서대로 읽고, header.xml에서 글자·문단 모양과 테두리를 가져와요. content.hpf에서는 그림 파일의 위치 목록만 읽고, 그림은 BinData 등에서 찾아 넣어요. 쪽 크기와 여백은 첫 구역의 용지 설정을 HWPUNIT(7200분의 1인치) 단위에서 포인트로 바꿔 써요. mimetype, version.xml, settings.xml, Scripts, Preview, META-INF는 읽는 코드가 없어요.
이를 확인하려고 두 구역짜리 시험용 HWPX를 만들어 사이트의 변환 함수에 넣었어요. content.hpf 메타데이터에 제목과 작성자를, Preview 폴더에 미리보기 글자를 넣어 두었어요.
| 시험한 상황 | 변환기의 반응 |
|---|---|
| 구역 두 개(section0, section1) | 두 구역의 본문이 순서대로 이어져 나옴 |
| 메타데이터의 제목·작성자, 미리보기 글자 | 미리보기 결과 어디에도 나오지 않음 |
| 각주와 머리말이 든 구역 | '각주·미주 내용은 표시되지 않아요', '머리말은 표시되지 않아요' 안내 |
| 복합 파일 서명으로 시작하는 파일에 .hwpx를 붙인 경우 | ZIP이 아니라서 'HWPX 파일이 아니거나 손상된 파일'이라는 안내 |
| 이름이 .hwp로 끝나는 파일 | 읽지 않고, 한글에서 HWPX로 다시 저장하라는 안내 |
파일은 80MB까지 받아요. 압축을 풀 때는 항목 하나가 150MB, 전체가 400MB를 넘으면 멈추도록 되어 있어서, 크기가 작아도 풀면 지나치게 커지는 파일은 처리하지 않아요. 미리보기 문서의 제목은 메타데이터가 아니라 올린 파일 이름에서 확장자를 뺀 글자로 정해요. 글꼴이 바뀌어 쪽이 밀리는 문제처럼 PDF로 저장할 때의 점검 항목은 문서를 PDF로 바꾸기 전후 점검표에 따로 모아 두었어요.
HWP를 HWPX로 바꿔 저장할 때 알아 둘 점
변환기는 .hwp 파일을 받으면 한글에서 '다른 이름으로 저장'으로 형식을 '한글 문서 (*.hwpx)'로 바꿔 저장하라고 안내해요. 이 과정에서 챙길 점을 공식 자료와 코드에 비추어 정리했어요.
- 원본 보관: 새로 저장한 HWPX와 별개로 원래 HWP 파일은 그대로 두세요. 형식이 바뀌는 저장이라 비교할 원본이 있으면 마음이 놓여요.
- 암호 문서: 한컴 해설에 따르면 HWP는 파일 머리말의 속성 값에 압축·암호·배포용 문서 여부를 표시하고, HWPX는 META-INF의 manifest.xml에 암호화 정보를 둬요. 이 변환기는 암호 정보를 읽는 코드가 없어서, 암호를 푼 사본으로 시도해야 해요.
- 구역 순서: 한컴 해설은 content.hpf의 spine 순서대로 문서를 읽어야 한다고 설명해요. 이 변환기는 section 파일의 번호 순서로 읽어요. 보통은 같은 순서지만, 결과에서 구역이 뒤바뀌어 보이면 원본과 대조해 보세요.
- 숨은 정보: HWPX로 바꿔도 작성자 정보와 미리보기 글자는 파일 안에 따라가요. 파일 대신 PDF를 보내면 이 변환기의 결과에는 둘 다 들어가지 않아요.
열기와 변환 전에 확인하는 순서
- 확장자 확인: 받은 파일이 .hwp인지 .hwpx인지 먼저 봐요. 이름만 바뀐 파일일 수도 있으니 변환기에서 '파일이 아니거나 손상' 안내가 나오면 원래 형식을 의심해 보세요.
- 형식 바꿔 저장: .hwp라면 한글에서 HWPX로 다시 저장하고, 원본은 따로 보관해요.
- 암호 풀기: 암호가 걸린 문서라면 암호를 푼 사본을 만들어요.
- 파일 이름 정리: 미리보기 제목이 파일 이름에서 오니 제출용 이름으로 바꿔요.
- 안내 목록 읽기: 변환기가 알려 주는 '원본과 달라질 수 있는 부분'의 항목과 개수를 확인해요.
- 구역과 쪽 대조: 구역이 여러 개인 문서는 구역 순서와 첫 구역의 용지 크기가 맞는지 미리보기에서 확인하고 저장해요.
팁 상대가 한글 프로그램으로 다시 고쳐야 하는 문서라면 HWPX를, 읽기만 하면 되는 문서라면 PDF를 보내는 식으로 나눠 생각하면 편해요. HWPX를 보낼 때는 파일 안에 작성자와 미리보기 글자가 함께 간다는 점을 기억해 두세요.