‘풀리퀘’는 깃허브에서 타인의 코드에 리뷰를 요청하는 기능인 ‘풀 리퀘스트’의 줄임말입니다. 풀리퀘를 통해 코드는 더 발전하는데요. 알아두면 쓸모 있는 IT업계의 크고 작은 사건들을 변규홍 스켈터랩스 개발자가 격주로 ‘풀리퀘’ 드립니다.

공공기관 홈페이지의 첨부파일이 하나는 ‘hwpx’, 또 하나는 ‘odt’ 조합인 경우가 있다.[1] 그런데 동일한 내용의 ‘hwpx’ 파일과 ‘odt’ 파일을 열었을 때 화면에 보이는 문서 모양이 다른 경우가 있다. 예를 들어 표의 형태가 다소 깨지거나 취소선 등 서식이 다른 것이다. 어째서 같은 문서 파일이 서로 다르게 보이는 걸까? 오늘 풀리퀘에서는 ‘hwp' 파일 형식을 조금 더 살펴보면서 그 원인을 알아본다.
'hwp’ 의존도를 낮추기 위한 'odt’ 로의 전환 시도, 절반의 성공?
공공기관에서 사용되는 문서 파일에 ‘hwp’가 쓰인 것은 상당히 오래된 일이다. 그동안 이로 인한 여러 불편과 문제제기도 이어졌다. 특히 공공기관의 문서 파일을 여는 데 오직 특정 기업의 문서 편집 프로그램을 통해서만 열어볼 수 있는 상황이 문제라는 지적이었다.[2] 따라서 ‘hwp’ 외에 다른 파일 형식도 사용해야 한다는 지적도 꾸준히 나왔다.[3] 특히 ‘odt’ 파일 형식을 사용하자는 제안이 주를 이뤘다. 'odt’는 개방형문서표준(ODF, Open Document Format for Office Application)에 따른 문서 파일 형식이다. ‘ISO/IEC 26300-1:2015’ 국제 산업표준으로 등록되어 있고 파일의 구조가 투명하게 공개되어 있다.[4][5]
이에 2018년부터는 공공기관 공문서 기안에 한해 ‘hwp’가 아닌 ‘odt’ 를 사용하자는 결정이 내려졌다.[6] 그런데 이 결정에 따른 현장 내 적용은 매우 독특한 형태로 이뤄졌다. 공문서 작성은 ‘hwp’ 로 하고, 파일을 공유할 때는 ‘odt’ 로 변환하는 방식이 채택된 것이다.[7][8] 그 결과는 어땠을까? 2022년 기준으로 절반은 성공, 절반은 애매함에 머물러 있다고 볼 수 있겠다.

먼저 K-에듀파인 등 실제 현장에서는 이런 형태의 ‘odt’ 파일 사용과 관련된 여러 가지 크고 작은 불편이 지속되고 있다. 프로그램의 오류, 추가 기능 설치 등에서 벌어지는 문제도 있고, 생성된 ‘odt' 파일이 협력기관에서 지원되지 않는 문제도 있다.[9][10] 특히 ‘odt’ 지원 기능이 추가된 '한글' 문서 편집기에서 열어본 문서의 모양새와, 리브레오피스(Libre Office) 등 ‘odt’ 형식을 지원하는 다른 프로그램에서 동일한 문서를 열어봤을 때 큰 차이가 있는 경우도 있다.
문서 편집 프로그램에서 중요한 개념 중 하나가 위지위그(WYSIWYG, What you see is what you get)다.[11] 화면에 표시되는 문서의 형태가 종이에 출력하거나 다른 컴퓨터로 옮겼을 때 다르지 않다는 의미다. ‘hwp’ 파일 형식과 함께 '한글' 문서 편집기의 강점이 바로 위지위그였다. 서로 다른 컴퓨터에서 출력해도 똑같은 형태의 문서가 표시되고 출력되는 점은 '한글'의 강점 중 하나였다.
따라서 ‘hwp’ 파일 형식 및 '한글' 문서 편집 프로그램의 기능을 최대한으로 담아낸 문서 파일을 저장할 때만 ‘odt’ 파일로 변환하는 방식에는 한계가 따랐다. 두 형식은 형식 설계에 담긴 주안점과 구현 방식에 차이가 있기 때문이다. 구체적으로는 문서 내에서 다양한 구성 요소를 담아내는 데 주안점을 둔 것과, 구성 요소들의 정확한 위치나 배치가 틀어지지 않도록 하는 데 주안점을 둔 것의 차이다.[12] 따라서 'odt'로 변환했을 때는 위지위그가 보장되지 않을 수 있다.
'한글' 없이 'hwp’ 문서를 읽을 수 있으려면
2010년부터 한글과컴퓨터는 '한글' 문서 파일 형식, 즉 ‘hwp’에 대한 세부 사항을 공개하기 시작했다. 2022년 현재는 'HWP 3.0', 'HWP 5.0', 'OWPML'('hwpx') 등의 내부 구조를 자사 홈페이지에서 설명하고 있다.[13] 'HWP 3.0' 의 경우 MS-DOS에서 작동하던 '한글 3.0' 버전부터 쓰이던 파일 포맷으로 1990년대에 작성된 ‘hwp’파일들의 내부 규격이며, ‘HWP 5.0'의 경우 2000년 10월 이후에 작성된 ‘hwp’ 파일들의 내부 규격이다. 2010년 이전까지는 파일 형식이 공개되지 않았기에 '한글' 없이 ‘hwp’ 파일을 열어보기 어려웠다.
'hwp' 파일 형식을 분석하고, 한글과컴퓨터에서 만든 프로그램을 사용하지 않고도 'hwp' 파일의 내용을 화면에 표시하거나 출력할 수 있는 프로그램을 만들기 위한 노력은 꾸준히 이어졌다. 이와 관련해선 'pyhwp', 'hwplib', 'hwp.js' 등 다양한 프로그래밍 언어로 작성된 여러 오픈소스 프로젝트들이 존재한다.[14][15][16] 또한 공개된 파일 포맷과 실제 'hwp' 파일을 분석하면서 발견된 차이점에 대해 토론하는 커뮤니티도 있다.[17][18] 이로써 지금은 '한글' 없이 ‘hwp’ 파일을 여는 방법에 대해 많은 진전이 이뤄졌지만 여전히 모든 형태의 ‘hwp’ 파일을 다룰 수 있게 되려면 갈 길이 많이 남았다.[19]
현재 마이크로소프트(Microsoft)나 구글(Google), 사이냅소프트(Synapsoft) 같은 기업에서는 공개된 자료를 토대로 자사의 워드프로세서 프로그램에 ‘hwp’ 파일의 내용을 표시할 수 있도록 하는 기능을 추가하고 있는 중이다.[20][21] 상황이 지금보다 더 나아지려면 앞으로도 한글과컴퓨터 측에서 공개한 내용의 보완, 또한 그 내용을 토대로 개발자들의 기술 개발 및 구현이 이뤄지고 지속적으로 보급되는 선순환 구조가 필요하다.

'hwpx’의 장점과 한계
'hwpx’는 KS X 6101 산업표준으로 제정된 OWPML(개방형 워드프로세서 마크업 언어)을 따르는 파일 형식이다. 2011년 마련된 이래 한글과컴퓨터에서 ‘hwp’ 대신 ‘hwpx’를 기본값으로 변경하기까지 10년의 시간이 걸렸다.
'hwpx' 파일 형식에 딸린 선물 중 하나는 'hwpx' 파일 속에 어떤 문장이 들어있는지를 살펴보기가 전보다 훨씬 용이해졌다는 것이다.[22] 이는 마이크로소프트에서 'doc' 파일 형식을 'docx' 파일 형식으로 바꾸면서 이뤄진 변화와 비슷하다.[23] 'hwpx'는 사실 'zip' 형식의 압축 파일이고, 'hwp' 파일과 달리 XML(eXtensible Markup Language) 파일의 모음으로 이뤄져 있다. 따라서 XML 파일로부터 문서 속에 담긴 내용, 이를테면 문서 속 문장을 매우 쉽게 추출할 수 있다. 파일 형식이 상당 부분 공개됐어도 그 문서 속 내용을 추출하기 상대적으로 까다로운 ‘hwp’에 비하면 빅데이터 등을 다루는 개발자들에게는 희소식이라 하겠다.
하지만 그건 프로그래밍 기술로 'hwpx' 파일 속 문장을 추출하는 영역에서의 이야기이다. '사람 또한' 별도의 상용 프로그램 없이 쉽게 읽을 수 있다는 걸 뜻하지는 않는다. 단순히 산업표준이 제정되고 파일 형식이 공개되는 것과, 이를 참고로 하여 이를 활용하는 소프트웨어가 개발되는 것은 전혀 다른 일이기 때문이다.
2022년 현재, 여러 기업의 기술 블로그에 ‘hwpx’ 파일 형식 등에 대한 분석 자료가 공개되고 있다. [24] 많이 나아졌지만 앞으로도 개발자들의 더 많은 노력이 이어진다면, ‘hwpx’ 파일도 조금 더 여러 환경에서 편리하게 활용될 수 있지 않을까? 다음 풀리퀘에서는 지금까지의 논의를 토대로, ODT를 포함하는 국제표준인 ODF(Open Document Format for Office Application)의 현황을 살펴볼 것이다.

[1]: https://www.korea.kr/news/pressReleaseView.do?newsId=156511966
[2]: https://zdnet.co.kr/view/?no=20111212111638
[3]: https://www.ddaily.co.kr/news/article/?no=72957
[4]: https://www.iso.org/standard/66363.html
[5]: https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=office
[6]: https://zdnet.co.kr/view/?no=20171019155724
[7]: https://zdnet.co.kr/view/?no=20201116092722
[8]: https://zdnet.co.kr/view/?no=20201116094217
[9]: https://blog.naver.com/dlwlstjd0070/221757352971
[10]: https://blog.naver.com/548312/222413817810
[11]: https://ko.wikipedia.org/wiki/%EC%9C%84%EC%A7%80%EC%9C%84%EA%B7%B8
[12]: https://www.comworld.co.kr/news/articleView.html?idxno=48777
[13]: https://www.hancom.com/etc/hwpDownload.do
[14]: https://github.com/mete0r/pyhwp
[15]: https://github.com/neolord0/hwplib
[16]: https://github.com/hahnlee/hwp.js
[17]: https://groups.google.com/g/hwp-foss
[18]: https://docs.google.com/spreadsheets/d/1jqXPUVZv1QYcoruJgek2GKYXkhbyaZ68cDjbb1MeyYk/htmlview
[19]: https://zdnet.co.kr/view/?no=20160216090604
[20]: https://www.microsoft.com/ko-kr/download/details.aspx?id=36772
[21]: https://www.synapsoft.co.kr/blog/17033/
[22]: https://www.ajunews.com/view/20210427190629821
[23]: http://officeopenxml.com/
[24]: https://meetup.toast.com/posts/311
Copyright © 블로터