목록으로
지역사회 문제해결을 위한 AI 활용
한글 프로그램 없이 공고문 읽기: 규격서 36개로 검증했습니다
👤 초록고양이636 📅 2026-09-13 👁 조회 31
지자체·공공기관이 아직도 HWP로만 배포하는 공고문을 AI가 읽을 수 있는 형태로 바꿨습니다. 공공조달 규격서 실물 36개 전부를 예외 없이 열었고, 본문 한글 단어의 99.6%를 살려냈으며, 파일 1건을 여는 데 평균 0.4초가 걸립니다.
1. 어떤 상황에서 AI를 활용했나요

공공기관은 공고를 올릴 때 파일 하나만 올립니다. 그리고 그 파일이 HWP입니다. 스마트폰에서는 열리지 않고, AI 챗봇에 올리면 "지원하지 않는 형식"이라며 거절당합니다.

저는 대전 서구에서 혼자 소프트웨어를 만드는 1인 개발자입니다. 지역 지원사업·공모·용역 공고를 매주 확인해야 하는데, 대전시청·구청·지역 진흥기관이 올리는 공고문은 지금도 대부분 .hwp 나 .hwpx 파일 한 개가 전부입니다.

문제는 세 가지였습니다. 첫째, 스마트폰에서 안 열립니다. 밖에서 알림을 받아도 집에 가서 PC를 켜야 내용을 볼 수 있습니다. 둘째, AI 챗봇에 붙여넣을 수가 없습니다. PDF는 대부분의 챗봇이 읽지만 HWP는 업로드해도 "지원하지 않는 형식"으로 거절당합니다. 셋째, 본문의 핵심이 표 안에 있습니다. 마감일·자격요건·제출서류·지원금액은 거의 항상 표 셀 안에 들어 있어서, 어쩌다 텍스트를 복사해도 줄이 뒤엉켜 읽을 수가 없습니다.

그래서 저는 공고 1건마다 이 일을 반복했습니다. PC를 켜고, 파일을 내려받고, 한글 프로그램을 열고, 표를 눈으로 훑고, 네 항목을 캘린더와 메모에 옮겨 적습니다. 공고 하나에 사람 손이 다섯 번 들어갑니다. 그러다 보니 실제로는 눈에 띄는 것 몇 건만 확인했고, 열어보지 않은 채로 마감이 지나간 공고가 쌓였습니다.

2. 어떤 AI를 어떻게 활용했나요

"AI에게 HWP를 읽어달라"가 아니라, AI가 읽을 수 있는 형태로 HWP를 먼저 바꾸는 것이 핵심이었습니다. 순서를 뒤집은 것이 이 사례의 전부입니다.

① 입력: HWP/HWPX 본문 추출기를 직접 만들었습니다

hwpx는 사실 zip 압축된 XML 묶음입니다. 다만 그냥 압축을 풀어서는 안 됩니다. 걸린 지점이 두 갈래였습니다.
- 확장자를 믿으면 안 됩니다. 확장자가 .hwpx인데 속은 구형 .hwp(OLE 복합문서)인 파일이 섞여 있습니다. 규격서 36개를 세어 보니 11개가 여기에 해당했습니다. 확장자만 믿고 압축을 풀면 세 개 중 하나꼴로 그 자리에서 실패합니다. 그래서 파일 앞부분 매직바이트로 포맷을 판정하게 했습니다.
- 핵심 정보가 본문 바깥에 있습니다. 마감일·자격요건·제출서류·지원금액은 거의 언제나 표 셀 안이나 도형 안에 들어 있습니다. 그런데 이 두 자리는 XML 트리에서 별도 계층에 놓여 있어서 일반 추출기가 통째로 빠뜨립니다. 두 계층을 재귀로 순회해 읽게 했고, 그림으로 박혀 있는 글자는 래스터로 바꿔 이미지 인식 모델에 넘깁니다.

이 추출기의 정확도는 감으로 말하지 않고 실제로 쟀습니다. 공공조달 규격서 실물 36개 파일을 코퍼스로 두고 한 파일씩 추출기에 넣어 36개 전부가 예외 없이 파싱되는지 자동 테스트로 확인했습니다. 그중 내부가 실제로 압축 포맷인 16개 파일은 원본 XML에서 본문 글자를 직접 긁어 정답 집합을 만들고, 추출기 결과와 단어 단위로 대조했습니다. 한글 단어 26,514개 중 놓친 단어가 102개, 커버리지 99.6%입니다. 놓친 쪽은 대부분 도면 안의 품번 같은 숫자 토큰이고, 문장을 이루는 한글은 사실상 전부 살아남았습니다.

② 처리: 4필드만 뽑는 좁은 프롬프트

추출된 텍스트 전체를 AI에게 요약시키지 않았습니다. 요약을 시키면 "지역 소상공인을 지원하는 사업입니다" 같은, 읽어도 아무 결정을 못 내리는 문장이 나옵니다. 대신 판단에 필요한 4개만 뽑게 했습니다. 실제로 쓰는 프롬프트 원문입니다.

아래는 공공기관 공고문의 전체 텍스트다. 다음 4개만 JSON으로 뽑아라.
- 마감일: YYYY-MM-DD HH:MM. 시각이 없으면 시각 필드를 null로 두고 추측하지 마라.
- 자격요건: 원문 문장을 그대로 인용. 요약하지 마라.
- 제출서류: 문서명 배열. 서식 번호가 있으면 함께.
- 지원금액: 숫자와 단위. 범위면 최소-최대.
원문에 없는 항목은 반드시 null. 추론해서 채우면 안 된다.
각 값마다 원문 몇 번째 문단에서 가져왔는지 근거 위치를 함께 적어라.

두 줄이 이 프롬프트의 핵심입니다. "추론해서 채우면 안 된다"와 "근거 위치를 함께 적어라". 공고문에서 AI가 마감일을 그럴듯하게 지어내면 그건 도움이 아니라 사고입니다. 근거 문단 번호를 같이 받으면 의심스러울 때 원문 그 자리만 눈으로 확인하면 됩니다.

모델은 용도를 나눠 씁니다. 4필드 추출과 근거 대조에는 Claude 를 쓰고, 개인정보가 섞인 문서는 인터넷에 올리지 않고 PC 안에서 도는 로컬 오픈모델(Gemma) 로만 처리합니다. 두 모델에 같은 공고를 넣어 결과가 갈리면 그 건만 원문을 직접 확인합니다.

③ 출력: 스마트폰에서 열리는 한 쪽

열리지 않던 파일이 이 단계에서 스마트폰 화면 한 쪽이 됩니다. 맨 위에는 요약 한 줄이 옵니다.

[대전 서구] 소상공인 디지털전환 지원 / 마감 10-24 18:00 / 최대 300만원 / 사업자등록 1년 이상 / 서식1,3 필요

그 아래에는 네 값이 각각 원문 몇 번째 문단에서 나왔는지가 붙습니다. 밖에서 공고 파일을 받아도 그 자리에서 열어 보고 지원할지 말지를 정할 수 있습니다.

3. 활용 결과 어떤 변화가 있었나요
지표 / 도입 전 / 도입 후 / 근거한글 프로그램 없이 본문 열기 / 불가능 / 36개 중 36개 성공 / 실측
본문 한글 단어 보존율 / 표·도형이 통째로 빠짐 / 99.6% (26,514개 중 102개 누락) / 실측
확장자와 실제 포맷이 다른 파일 / 열면 그 자리에서 실패 / 11개 전부 자동 판별 후 처리 / 실측
파일 1건 본문 추출 / 사람이 한글을 열어야 함 / 평균 0.4초 (중앙 0.16초, 최대 1.5초) / 실측
사람 손이 들어가는 횟수 / 5회 (내려받기·열기·훑기·옮겨 적기·저장) / 1회 (파일 건네기) / -
필요 장비 / PC + 한글 프로그램 / 스마트폰만 / -
측정 방법: 규격서 실물 36개 파일을 코퍼스로 두고 한 파일씩 추출기에 넣어 전량 파싱을 자동 테스트로 확인했습니다. 추출 시간은 같은 36개를 순차 처리하며 파일별로 잰 값입니다(합계 13.8초). 보존율은 내부가 압축 포맷인 16개 파일에서 원본 XML 본문 노드를 정답지로 삼아 단어 단위로 대조한 값입니다. 세 수치 모두 같은 코퍼스에 같은 명령을 다시 돌리면 그대로 나옵니다.

숫자보다 중요한 변화는 결정의 성격이 바뀐 것입니다. 전에는 "이 공고를 열어볼 가치가 있나"를 먼저 판단해야 했습니다. 열어보는 데 사람 손이 다섯 번 들어갔으니까요. 지금은 그 판단 자체가 사라졌습니다. 파일을 건네기만 하면 되므로, 고를 필요 없이 다 봅니다.

4. 나만의 방식 또는 개선 포인트

"AI 문서 요약, 다들 하는 거 아닌가요?" 아닙니다. 남들이 하는 것은 이미 AI가 읽을 수 있는 PDF·워드를 요약하는 일입니다. 한국 공공행정 문서의 실제 병목은 요약이 아니라 그 앞단, AI가 파일을 열지도 못하는 지점에 있습니다. 저는 요약 프롬프트를 잘 쓴 게 아니라, 열리지 않던 파일을 열리게 만들었습니다.

제가 추가로 한 것 세 가지입니다.

1. 정확도를 감이 아니라 수치로 증명했습니다. 파일 안에 이미 들어 있는 원본 XML 본문 노드를 공짜 정답지로 쓴 덕분에, 사람이 라벨을 한 개도 붙이지 않고 전량을 자동 채점할 수 있었습니다. 그리고 이 채점이 제가 믿고 있던 숫자를 깎았습니다. 저는 다 읽는 줄 알았는데 실제로는 99.6%였고, 원고에는 잰 값을 그대로 적었습니다.
2. AI를 최소한만 씁니다. 마감일·금액처럼 형태가 정해진 값은 정규식으로 먼저 뽑고, 사람의 해석이 필요한 자격요건 판정에만 AI를 붙였습니다. 그래서 처리 비용이 공고 1건당 몇 원 수준이고, 값이 흔들리지 않습니다.
3. 모든 값에 원문 근거 위치를 붙였습니다. AI가 틀렸을 때 어디를 봐야 하는지가 결과에 이미 들어 있습니다.

한계도 적습니다. 스캔해서 이미지로만 넣은 공고문은 이 방식이 약합니다. 이미지 인식 모델을 거치면 표 구조가 깨지면서 정확도가 눈에 띄게 떨어집니다. 그리고 자격요건은 문장을 그대로 옮길 뿐 "내가 해당되는지"를 AI가 최종 판정하게 두지 않습니다. 그 판정은 사람이 합니다. 틀리면 손해가 큰 판단은 AI에게 넘기지 않는다는 것이 제 원칙입니다.

5. 다른 사람도 따라 할 수 있나요

제가 프로그램을 만들 줄 안다는 점 때문에 이 사례가 남의 일로 보일 수 있습니다. 그래서 추출기가 아예 없어도 같은 결과에 닿는 경로를 따로 정리했습니다. 준비물은 스마트폰과 무료 AI 챗봇 하나이고 비용은 0원이며, 설치할 것도 가입할 것도 없습니다.

1. HWP를 PDF로 바꿉니다. 한컴독스 웹(무료)에 HWP 파일을 올리면 브라우저에서 그대로 열리고 PDF로 내려받을 수 있습니다. 스마트폰 브라우저에서도 됩니다. 이 한 단계가 앞에서 말한 「AI가 파일을 열지도 못하는 지점」을 지나가게 해 줍니다.
2. PDF를 챗봇에 올리고, 요약이 아니라 4개만 물어봅니다. "이 공고문에서 마감일, 자격요건, 제출서류, 지원금액만 뽑아줘. 원문에 없으면 없다고 해. 추측하지 마." 마지막 두 문장을 반드시 붙이십시오. 이게 있고 없고가 결과를 가릅니다. 여기에 "어느 문단에서 가져왔는지도 같이 적어줘"를 한 줄 더 붙이면, 의심스러울 때 원문 그 자리만 확인하면 됩니다.
3. 받은 답을 캘린더에 마감 3일 전 알림으로 넣습니다. 여기까지가 읽은 것을 실제 지원으로 잇는 마지막 한 칸입니다. 앞의 두 단계만 하고 이걸 빼면 결국 또 놓칩니다.

제 방식과 다른 점은 자동화 여부뿐이고, 얻는 정보는 같습니다. 손이 가는 단계가 셋뿐이라, 한 주에 몇 건을 보는 분에게는 이 경로만으로 충분합니다. 공고를 자주 보는 분이라면 1번과 2번을 매번 반복하지 말고, 챗봇에 "공고문을 주면 항상 이 4개만 뽑아라"라는 지시를 저장해 두십시오.

같은 방법을 다른 곳에도 그대로 옮길 수 있습니다. 주민센터 안내문, 아파트 관리사무소 공지, 학교 가정통신문처럼 HWP로만 오는 문서는 전부 같은 3단계로 열립니다. 지역 창업지원기관이나 주민자치센터가 이 3단계를 한 장짜리 안내문으로 만들어 붙여 두면, 프로그램을 한 줄도 만들지 않고 동네 단위로 퍼집니다.

덧붙이면, 이 문제는 받는 쪽보다 보내는 쪽에서 훨씬 싸게 끝납니다. 공고를 올리는 기관이 HWP 옆에 텍스트나 PDF를 한 벌 더 붙이는 비용은 파일 하나입니다. 그 파일 하나면 그 지역에서 공고를 기다리는 사람 전부가 앞의 세 단계를 통째로 건너뜁니다. 지금은 그 비용을 수천 명이 각자 한 번씩 나눠 내고 있습니다.
← 목록