현재 다니는 회사에 입사하고 처음 맡았던 작업이 보고서 파일을 hwp로 추출할 수 있는 기능을 구현하는 것이었다. 적절한 라이브러리를 찾아서 한글 문서 파일 구조 5.0를 읽어가며 구현했었다. 하지만 우리의 한글 기대를 저버리지 않게 기능하나 구현하기 위해서는 한글 문서가 어떻게 만들어지는 지 충분히 이해하는 과정이 필요했다. 공식 문서가 도움은 되었지만 근본적인 이해를 위해서는 직접 예제 파일을 만들어보고 코드에 break point를 걸어보면서 내부 데이터 구조가 어떻게 바뀌었는지 일일이 분석해야 했다. 이게 정말 힘들었다.
구체적으로 다음과 같은 단계를 거친다. 내가 만약 문장 일부분을 볼드체로 바꾸고 싶다면:
- 아무런 스타일이 적용되지 않은 문장이 담긴 파일을 준비한다 (파일 A)
- 파일 A의 텍스트에 볼드체를 적용한 새로운 파일 B를 준비한다
- 라이브러리를 사용해 두 파일을 읽고 어떤 property가 바뀌었는지 직접 확인한다
사실 1번, 2번은 그리 시간이 걸리는 작업은 아니다. 그렇지만 3번이 굉장한 시간이 걸린다. 문서에서 굉장히 짧게 설명한 property의 정의를 가지고 이 property가 실제로 어떤 식으로 변하는 지 내가 직접 reverse engineering을 해야 했기 때문이다. 특히 스타일 관련해서는 스타일 객체가 따로 정의되고 그걸 문장 또는 문단에서 레퍼런스해서 사용하는데 스타일 객체가 어떤 원리로 생성되는지 이해하는데 너무나도 어려웠다. 어찌저찌 이해를 해서 구현은 완료했지만 워낙 직관적이지 않다보니 기능을 변경할 때마다 다시 이해하는 수고스러움이 컸다.
요즘엔 LLM이 패턴 분석을 굉장히 잘해주기 때문에 사용하는 도구가 AI 친화적인지도 중요한 요소인 것 같다. 그 점에 있어서 hwpx 확장자를 추천한다. docx처럼 hwpx는 OpenXML을 기반으로 파일을 저장한다. .hwpx 파일 확장자를 .zip으로 변경하고 압축을 해제하면 그 안의 내용물을 확인할 수 있다. 주로 document.xml 파일 내용이 변경되는데 위의 설명에서 1번, 2번을 수행하고 두 개의 document.xml 파일을 AI한테 분석해달라고 하면 굉장히 잘 해준다. 특히 나의 경우 스타일 객체 관련해서 골머리를 앓고 있었는데 저장하기 전에 래퍼런스 값을 다 날려버리고 저장하면 해결된다는 걸 AI를 통해 발견해서 1년동안 묵혀뒀던 문제를 해결했다.
요즘엔 많은 공공기관에서 hwpx로 보도 자료를 내는 것으로 보인다. 아직까지 지방자치단체 소속의 공공기관들에서는 hwp도 여전히 많이 쓰이는 것 같지만 말이다. 프로그래밍으로 hwpx 파일을 동적으로 만들어야 입장에서 hwpx의 존재는 분석이라도 쉬워진게 hwp보단 나은 점이다. 그거 하나만으로 옮길 사유가 생긴다. 그리고 AI를 적극 활용할 수 있는 포맷이라는 점에서도 큰 이점이 있었다.