이전글 : https://www.gpters.org/nocode/post/developing-hwpx-editing-skills-FecbSM8LaB4G5lk
저는 한글 문서를 교정하는 편집기를 만들고 있습니다.
문서 안의 글자 크기나 굵기, 문단 구조를 자동으로 고칠 수 있었지만 마지막에는 제가 직접 한글을 열어 HWPX와 PDF로 다시 저장해야 했습니다. 두어 번 수동으로 저장해본 뒤에는 편집기 자체를 잘 사용하지 않게 됐습니다.
그래서 이번에는 문서 수정 후 수정된 부분을 검증하고 실제 한글 프로그램을 열어 두 파일을 저장하는 과정을 작은 하네스로 만들어 자동화했습니다.
덕분에 저장 버튼은 제가 누르지 않아도 되었지만, AI가 새로운 반복을 하기 시작했습니다.
AI는 조건에 맞지 않는 문서를 저장했고, 결과를 다시 고친 뒤 또 저장했습니다. 저는 새 파일이 나올 때마다 직접 열어 어디가 달라졌는지 확인해야 했습니다.
한두 번이면 테스트라고 생각했을 겁니다.
버전 번호가 두 자릿수를 넘어가자 조금 다른 생각이 들었습니다.
이거, 끝나기는 하는 걸까? 😧
💦 목차
테스트 첫 결과부터 검수 방식이 의심되었습니다.
열한번째 수정 결과를 보고 다음 수정을 중지시켰습니다
잠들기 전 스물두번째에서 종료선을 그었습니다
반나절 뒤에야 하네스가 놓치던 조건을 보강했습니다
1. 테스트 첫 결과부터 검수 방식이 의심되었습니다.
3페이지 짜리 테스트 파일을 주면서 제가 언급한 조건은 다음과 같았습니다.
수정지침은 지키 면서 결과는 2페이지일 것.
처음 저장된 결과를 열었을 때 지침과 맞지 않는 부분이 보였습니다.
AI는 이미 구조 검사와 화면 검토를 거쳤다고 했습니다. 그런데 제가 실제 한글 파일에서 본 결과는 달랐습니다.
당시 저는 이렇게 말했습니다.
“이 검사를 했는데도 결과가 이것이라면 검토 자체가 문제가 있거나, 검토와 실제 결과물 사이에 어떤 일이 일어나고 있다고 봐야겠거든.”
단순히 한 군데를 다시 고쳐달라는 피드백이 아니었습니다.
AI가 무엇을 보고 합격이라고 판단했는지, 그 판단과 제가 받은 파일 사이에서 무엇이 달라졌는지부터 다시 확인해달라는 요청이었습니다.
이때 반복이 바로 끝난 것은 아닙니다.
검사 항목이 추가되고, 새 파일이 저장되고, 다른 문제가 보이는 과정이 계속됐습니다.
2. 열한번째 수정 결과를 보고 다음 수정을 중지시켰습니다
v11은 3페이지였습니다.
AI는 첫 번째 과제 아래쪽의 간격을 줄이면 2페이지로 맞출 수 있다고 보고 다음 수정을 준비하고 있었습니다.
저는 그 전에 작업을 멈춰달라고 했습니다. 그리고 v11의 1페이지와 3페이지를 캡처했습니다.
제가 보기에는 둘째 줄을 맞추려다가 ㅇ으로 시작하는 첫째 줄 전체가 지나치게 오른쪽으로 밀려 있었습니다. 사용할 수 있는 가로 폭이 줄었고, 내용이 여러 줄로 밀리면서 페이지도 늘어난 것처럼 보였습니다.
그래서 물었습니다.
“내 생각에는 상단 부분에서 내어쓰기가 'ㅇ' 첫번째줄부터 지나치게 가면서 내용이 많이 뒤로 밀린 것 같은데 내가 말하기 전에 알고 있었어? 솔직하게 말해줘.”
AI의 답은 ‘NO’였습니다.
줄 수가 늘어났다는 사실은 알고 있었지만, 첫째 줄의 ㅇ까지 움직였다는 핵심 원인은 알아채지 못했습니다. 이전 화면에도 문제가 보였지만 세로 간격과 페이지 수에 집중하느라 가로 시작 위치를 놓쳤다고 했습니다.
그대로 진행했다면 원인은 남겨둔 채 문서 위쪽 간격을 줄여 페이지 수만 맞췄을 겁니다.
제가 멈춰 세우지 않았다면 또 하나의 파일이 나왔을 가능성이 큽니다.
한 군데를 고쳤더니 이전에 맞던 곳이 다시 깨지는 현상을 개발에서는 ‘회귀’라고 부릅니다. 이 작업에서는 AI 대신 제가 그 회귀를 눈으로 찾아내고 있었습니다.
v11의 원인을 확인한 뒤에는 작업 범위를 줄였습니다.
어절 줄바꿈이나 2페이지 문제를 한꺼번에 해결하지 않고, 먼저 ㅇ의 첫째 줄 위치만 원래대로 돌리기로 했습니다.
v12에서 ㅇ의 첫번째 줄위치가 원래의 자리로 돌아온 것을 확인했습니다.
이 말은 v12가 완성됐다는 뜻이 아니었습니다.
이번에는 첫째 줄 하나만 맞았으니 그 위치는 더 이상 움직이지 않게 고정하고, 다음에는 둘째 줄 이후만 손보자는 뜻이었습니다.
AI가 한 번에 여러 조건을 고치려 할수록 무엇 때문에 결과가 달라졌는지 알기 어려웠습니다. 그래서 제가 실험 범위를 하나씩 잘라주고, 맞은 부분을 직접 잠가야 했습니다.
3. 잠들기 전에 스물두번째에서 종료선을 그었습니다
작업은 밤까지 이어졌습니다.
저는 눈이 감긴다며 진행되는 데까지만 하고 적절한 시기에 잠시 멈춰달라고 했습니다. 이후 다시 시작하면서 조건을 하나 더 붙였습니다.
“그래 시작하자. 많이해도 22번까지 하고 끝내는 걸로 해줘. 다음에는 페이지 공간 활용에 신경써줘.”
제가 여기서 개입한 이유는 v21 결과에 대한 피드백이 아닌, v22라는 상한을 직접 정한 것이었습니다.
AI는 피곤하지 않습니다. 새 원인을 찾으면 v23도 만들 수 있고, 그다음 문제가 보이면 v24도 만들 수 있습니다.
하지만 저는 졸립니다. 이미 지난 버전을 보니 다음 버전에도 영 탐탁지 않은 결과물만 생성한 채 토큰만 태울 것 같았습니다.
그래서 완료 조건보다 먼저 종료 조건을 정했습니다.
지금 돌아보면 이 지점에서 약간의 무한반복지옥을 떠올렸던 것 같습니다.
AI는 ‘조금만 더 고치면 될 것 같다’는 말이 계속 이어지는데, 그 조금이 언제 끝나는지는 아무도 모르는 상태였습니다.
v22는 정확히 2페이지였고, 첫째 줄 위치와 둘째 줄 정렬, 어절 분리, 페이지 공간도 이전보다 많이 나아졌습니다.
“여전히 피드백 줄 것은 있긴 하지만 초반 버전에 비해서 많이 발전했네.”
이 문장이 당시 상태를 가장 정확하게 설명합니다.
초반보다 분명히 좋아졌습니다. 하지만 제가 원하는 문서를 AI가 이제 완전히 이해했다고 느낀 것은 아니었습니다.
아직도 직접 열어보면 말로 설명해야 할 부분이 남아 있었습니다.
저장 자동화는 됐지만, 제가 마음속으로 생각한 ‘잘 교정된 보고서’를 AI가 항상 같은 모습으로 재현하는 단계는 아니었습니다.
이게 이번 작업에서 가장 막막했던 부분입니다.
파일을 못 만드는 문제가 아니었습니다. AI는 파일을 아주 잘 만들었습니다. 문제는 그 파일이 제가 원하는 여러 조건을 동시에 유지하는지 확신하기 어려웠다는 점이었습니다.
최초 결과부터 v22 종료선까지 사용자가 직접 개입한 시점을 보여주는 타임라인
4. 반나절 뒤에야 하네스가 놓치던 조건을 보강했습니다
처음에도 한글로 저장하기 전 검사는 있었습니다. 문서 구조와 일부 문단의 선행 공백, 줄바꿈 수를 확인했고, 실제로 v15는 이 검사에서 막혀 한글 저장까지 가지 않았습니다.
그러니 제가 겪은 반복을 ‘저장 전 검사가 아예 없어서 생긴 일’이라고 설명하면 사실과 다릅니다.
문제는 검사가 무엇을 알고 있었느냐였습니다.
초기 하네스는 한글에서 처음 계산한 쪽수와 파일을 다시 열었을 때의 쪽수가 같으면 다음 확인으로 넘겼습니다. 그래서 요구사항은 정확히 2쪽이었는데도 4쪽 → 4쪽, 3쪽 → 3쪽인 파일이 저장 뒤 화면 확인 단계까지 갔습니다. 굵기 범위나 정확한 문구처럼 이미 합의한 기준도 저장 전 검사에 충분히 담지 못했습니다.
화면 확인 자료만 추가하면 되는 상황에서도 전체 실행을 다시 부르면 한글 저장부터 되풀이하는 구조였습니다.
반복을 겪은 뒤에는 이 세 부분을 보강했습니다.
저장 전 검사에 정확한 문구, 글자 크기와 굵기, 문단 속성처럼 미리 확인할 수 있는 기준을 더 담았습니다.
정확히 2쪽을 필수 조건으로 두고, 한글이 처음 계산한 쪽수와 다시 열었을 때의 쪽수, PDF 쪽수를 각각 확인했습니다.문서는 그대로이고 화면 확인 자료만 부족하다면 이미 저장한 HWPX와 PDF를 다시 사용하게 했습니다.
이 변경이 모든 재작업을 없앤 것은 아닙니다. 실제 화면에서 새로운 조판 문제가 발견되거나 문서를 다시 고치면 새 후보를 한글로 저장하고 확인해야 합니다. AI가 한 조건을 고치면서 다른 조건을 깨뜨리는 일까지 막아준 것도 아닙니다.
정확히 말하면 저장 전에 잡을 수 있는 실패와, 같은 후보를 증거 때문에 다시 저장하는 불필요한 반복을 줄인 것입니다.
하네스를 보강한 뒤에도 저는 HWP 편집기가 제 마음처럼 돌아갈 거라고 생각하진 않습니다.
AI가 문서 전체의 균형과 제가 중요하게 보는 세세한 기준을 언제나 한 번에 이해하는 것도 아닙니다. 한 조건을 고치는 동안 다른 조건을 놓치는 일도 다시 생길 수 있습니다.
후속 보강이 제가 겪은 반복 전체를 없애준 것은 아닙니다. AI가 새로운 조건을 깨뜨리면 여전히 사람이 실제 화면에서 발견하고 설명해야 합니다.
다만 하네스가 미리 알 수 있는 기준은 저장 전에 확인하고, 같은 결과를 불필요하게 다시 저장하지 않게 됐습니다. 사람이 계속 판단해야 하는 부분과 기계가 먼저 막을 수 있는 부분의 경계가 전보다 분명해졌습니다.
처음에는 수동으로 매번 누른 '다른이름으로 저장하기' 버튼을 자동화하고 싶었습니다.
하지 만 저장 버튼을 자동화하는 것만으로는 부족했습니다. 기계가 막을 수 있는 반복은 줄이고, 사람이 정해야 하는 종료선은 처음부터 따로 두는 것도 필요했습니다.
v22에서도 제 피드백은 남아 있었습니다.
그래도 적어도 다음에는, 끝이 어디인지 모르는 채 v23을 기다리지는 않으려고 합니다.