콘텐츠로 이동

HWPX 문서 수정 후 한글에서 열리지 않음

11/11(수)

한 줄 요약: 한글 프로그램 밖에서 HWPX의 글자를 고쳤더니 파일이 안 열렸다. 원인은 문단의 줄 배치 정보(<hp:linesegarray>)가 짧아진 글의 길이를 넘는 위치를 가리킨 것이었다. 글자가 바뀐 문단에서 이 정보를 지워 해결했다.

🚨 증상

  • 데이터 수집·통합 프로토타입 설계서 v0.7(HWPX)을 한글 밖에서 고친 뒤, 한글에서 파일이 열리지 않았다.
  • 예전에 겪은 문제와 똑같은 증상이었다.
  • 오류 메시지 원문은 기록에 없다. zip(HWPX는 XML 파일들을 묶은 zip이다) 구조는 멀쩡해 보였다.

📍 상황

  • 2026-11-11 15:03 — 재난 과제 문서를 검토하던 중이었다(→ 작업 7). 특허 출원 때문에 아키텍처 수준을 넘는 내용을 빼느라, v0.7의 18곳(문장 수정 12, 문단 삭제 6)을 HWPX와 MD에 같이 고친 직후였다. → 그날 일지

🔍 원인

HWPX는 문단마다 줄 배치 정보(<hp:linesegarray>: 한글이 저장할 때 계산해 둔 "각 줄이 몇 번째 글자에서 시작하는지" 목록, textpos)를 함께 저장한다.

제2장 8절 표의 접근 제어 칸 문장이 두 줄에서 한 줄(27자)로 줄었다. 그런데 줄 배치 정보는 여전히 "49번째 글자에서 둘째 줄 시작"을 가리켰다. 한글은 문단 길이를 넘는 이 위치 때문에 파일을 열지 못했다.

겉으로는 "파일이 깨진 것"처럼 보였다. 실제로는 zip도 메타데이터도 멀쩡했고, 문단 하나의 낡은 계산값이 문제였다.

"예전과 같은 문제"였던 이유(추정): 예전에 고친 문단들은 원본에서부터 줄 배치 정보가 지워져 있었다. 그때 같은 문제를 이 방법으로 풀었던 흔적으로 보인다. 이번에 처음으로 줄 배치 정보가 남아 있던 문단(표 칸 등)을 고치면서 다시 생겼다.

🧭 해결 과정

  1. zip 구조·메타데이터 의심 → 원본과 바이트 단위로 같았다. 원인이 아니었다.
  2. 문단 전수 검사 → 문단 728개(표 칸 포함)에서 textpos가 문단 글자 수를 넘는 곳을 찾았다. 원본은 0개, 고장 난 파일은 접근 제어 칸 1개뿐이었다.
  3. 최종 해결 → 원본과 글자가 달라진 문단 25개를 모두 찾았다. 그중 줄 배치 정보가 남아 있던 6개(표 칸 3, 글머리표 문단 3)에서 지웠다. 나머지 19개는 원래 없었다.

문제 문단의 모양은 대략 이렇다(속성은 줄였다).

<hp:p>
  <hp:run><hp:t>접근 제어는 …(27자)</hp:t></hp:run>
  <hp:linesegarray>                    <!-- ① -->
    <hp:lineseg textpos="0" />         <!-- ② -->
    <hp:lineseg textpos="49" />        <!-- ③ -->
  </hp:linesegarray>
</hp:p>
① 줄 배치 정보 묶음. 한글이 저장 시점에 계산해 둔 값이다. ② 첫 줄은 0번째 글자에서 시작한다. ③ 둘째 줄이 49번째 글자에서 시작한다고 적혀 있다. 글은 27자뿐이라 열기에 실패한다. → <hp:linesegarray> 묶음을 통째로 지웠다.

한글은 줄 배치 정보가 없으면 열 때 다시 계산한다. 이 파일에도 처음부터 정보가 없는 문단이 118개 있었고, 정상으로 열렸다.

  1. 확인 → 글자 수를 넘는 문단 0개, zip 무결성 정상, 본문 텍스트 변화 없음. 같은 날 손댄 v0.6도 검사했는데 넘는 문단이 없었다.
  2. 재발 방지 → 저장소 README §9의 HWPX 항목에 "한글 밖에서 글자를 고쳤으면 그 문단의 <hp:linesegarray>를 지운다"와 이유를 적었다.

사용자는 이후 바로 v0.7 본문 검토를 이어 갔다. 파일이 다시 열린 것으로 본다.

✅ 다음에 같은 증상이 보이면

  • 한글 밖에서 글자를 고쳤나? 그렇다면 바뀐 문단에 <hp:linesegarray>가 남아 있는지부터 본다.
  • textpos가 문단 글자 수를 넘는 문단을 찾는다. 원본에는 0개여야 정상이다.
  • zip 구조나 메타데이터 비교는 그다음이다. 이번에는 원인이 아니었다.
  • 그래도 안 열리면 수정 직전 판으로 되돌리고, 바꾼 곳을 하나씩 나눠 적용해 범인을 좁힌다.

재발 방지: 스크립트로 HWPX 글자를 고칠 때는 그 문단의 줄 배치 정보도 같이 지우는 것을 규칙으로 둔다. 저장 뒤에는 "넘는 문단 0개" 검사를 돌린다.

🔗 관련

  • 참고 자료: KS X 6101 개방형 워드프로세서 마크업 언어(OWPML) 문서 구조 (국가표준) — HWPX가 따르는 XML 문서 구조 표준

🗓️ 이력

  • 2026-11-11: v0.7 HWPX를 한글 밖에서 고친 뒤 안 열림. 낡은 줄 배치 정보가 원인이었고, 바뀐 문단 6개에서 지워 해결 → 일지