📝 한 줄 요약 (바쁘면 이것만)
AI에게 문서 추출을 시켰더니 "잘 됐다"는 보고만 돌아왔습니다. 그 말을 검증할 방법을 만들다 보니 이틀 사이에 재사용 가능한 검증 스킬 4개가 연쇄로 태어났고, 그 과정에서 "테스트 전부 통과 중"이던 우리 파이프라인에서 1,197만 자가 통째로 빠져 있던 구멍을 찾았습니다.
🎯 이런 분께 추천해요
AI로 PDF·스캔·문서 자동화를 만들었는데 "이거 진짜 믿어도 되나?" 싶은 분
회계·세무·법률처럼 숫자 하나 틀리면 사고인 도메인에서 AI를 쓰는 분
에이전트 스터디에서 "스킬을 만든다"는 게 뭘 뜻하는지 실물 예시가 필요한 분
😫 문제 상황 (Before)
저는 AI 에이전트에게 회계·세법 문서 처리를 많이 시킵니다. 그런데 AI의 특성이 하나 있어요 — 뭘 시키든 "잘 됐다"고 보고한다는 겁니다.
OCR을 돌리면 "추출 완료!" — 근데 정확도가 몇 %인지는 아무도 모릅니다.
파서를 만들면 "테스트 전부 통과!" — 근데 그 테스트가 뭘 확인하는지는 별개 문제죠.
새 OCR 라이브러리를 발견하고 "우리도 쓸까?" 고민하던 밤, 결심했습니다. "잘 되는 것 같다"를 숫자로 바꾸기 전엔 아무것도 채택하지 않겠다고요. 이 결심이 이틀짜리 여정의 시작이었습니다.
🛠️ 사용한 도구
Claude 기반 로컬 AI 에이전트 (터미널·파일 작업 가능)
오픈소스 한국어 문서 변환기 (MIT 라이선스, OCR 내장)
법제처 공개 법령 데이터 (Open API)
🔧 작업 과정
1일차 밤 — "정답이 없으면, 정답을 위조하면 되잖아?"
OCR 정확도를 재려면 정답지가 필요합니다. 그런데 진짜 스캔 문서엔 정답이 없어요. 사람이 일일이 옮겨 적으면? 그 타이핑 자체가 오타의 원천이 됩니다.
AI와 논의 끝에 나온 해법이 이 글의 첫 번째 아이디어입니다:
정답이 확정된 문서를 직접 만들어서, 스캔본으로 위조한다.
텍스트가 살아있는 PDF를 생성 (회계 보고서풍 본문 + 괘선 표 + 천단위 콤마 금액) → 이 원문이 곧 100% 확실한 정답
이걸 300dpi 이미지로 변환해 "가짜 스캔본"을 만듦 (텍스트층 0자인지 기계로 검사 — 남아 있으면 OCR이 아니라 텍스트를 읽어 점수가 거짓으로 높아짐)
OCR 결과를 원문과 글자 단위로 대조
사람이 개입하는 단계가 없으니 정답 오류가 0입니다. 결과:
지표
기존 파서
새 OCR 엔진
추출 글자 수
0자
408/408자
문자 정확도
0%
99.26% → 후처리 후 100%
표 셀 복원
0/24
24/24
소요
즉시(빈 결과)
2.2초
기존 파서는 스캔본에서 구조적으로 0점이었습니다. "어느 게 나은가"가 아니라 "한쪽은 아예 대안이 아니었다"는 게 실측으로 드러난 거죠.
그런데 이날 밤에만 함정을 3개 밟았습니다
함정 1 — 같은 결과물이 87.7%로 보였다. 처음 채점했을 땐 정확도가 87.7%였습니다. 불일치 목록을 눈으로 하나하나 보니… 전부 마크다운 표의 | 기호였어요. 오타가 아니라 출력 형식 차이를 오독으로 세고 있던 겁니다. 형식 문자를 벗기고 다시 재니 99.26%. 이걸 모르고 지나갔으면 멀쩡한 엔진을 탈락시킬 뻔했습니다.
함정 2 — 오독 3건이 전부 같은 글자였다. 남은 오독을 분류하니 3건 전부 원문자 ○를 한글 자모 ㅇ로 읽은 것. 오독이 이렇게 한 종류로 뭉치면 엔진 문제가 아니라 치환 한 줄로 해결됩니다. 반대로 여러 종류로 흩어지면 후처리로 못 구하는 엔진 한계고요. 이 구분법 자체가 재사용 자산이 됐습니다.
함정 3 — 고치려다 새 버그를 만들었다. OCR이 먹어버린 공백을 복원하는 규칙을 짰더니, 이번엔 (K-IFRS)에의 조사를 (K-IFRS) 에로 떼어버렸습니다. 한국어 조사를 보호하는 예외를 넣고 반드시 재측정하는 규칙이 추가됐죠. 고친 뒤 다시 재지 않으면, 고침이 새 오염원이 됩니다.
여기까지의 절차 전체 — 정답 위조, 텍스트층 0 게이트, 형식 벗기고 채점, 계통 오독 분류 — 를 AI에게 스킬(재사용 절차 문서 + 스크립트)로 저장시켰습니다. 그리고 저장한 문서의 명령을 깨끗한 폴더에서 그대로 복사해 재실행 → 같은 수치가 나오는 것까지 확인. 이게 1주차 스킬 2개입니다.
2일차 오전 — "그럼 우리 기존 파이프라인은 안 뚫려 있나?"
새 도구를 이 잣대로 검증하고 나니 무서운 질문이 생겼습니다. 몇 달째 "테스트 전부 통과"인 우리 세법 검색 파이프라인은?
점검을 시켰더니 첫 발견: 조문 안의 분수 계산식(세액 계산 공식)이 문서를 조각내는 경계에서 잘릴 수 있는 상태가 4,941개 조각 중 147개. 분수의 분모가 사라진 계산식이 AI 답변의 근거로 쓰일 뻔한 겁니다. 바로 무결성 가드를 만들었습니다.
그리고 이 가드를 검증하는데, 여기서 이 글의 두 번째 아이디어가 나옵니다:
옆방 테스트 — 코드를 만들 때 쓴 데이터가 아니라, 완전히 다른 동네 데이터로 검증한다.
세법으로 만든 가드를 세법으로 검증하면, 세법에 없는 함정은 몇 번을 돌려도 안 나옵니다. 리뷰를 여덟 번 돌려도 여덟 번 다 같은 방이면 의미가 없어요. 그래서 같은 API의 전혀 다른 분야 법령(원자력·건축·의료 등 8개, 1,393개 조문)을 새로 받아 그대로 돌렸습니다.
결과: 0건. 이상 없음.
…이라고 끝냈으면 아무것도 못 찾았을 겁니다. 세 번째 아이디어가 여기서 나옵니다:
"0건"은 두 가지 뜻이다 — 진짜 깨끗하거나, 애초에 안 읽고 있거나.
파서를 거치지 않고 원본에서 직접 세어봤습니다. 원자력안전법 시행규칙 원본에 계산식 박스 문자가 6,999줄. 파서 통과 후엔 0건. 파서가 그 데이터가 담긴 영역(별표)을 한 줄도 읽지 않고 있던 겁니다.
돌아와서 우리 세법 데이터를 다시 세니 — 별표가 949건으로 조문 본문(558건)보다 많았고, 1,197만 자가 코퍼스 밖에 있었습니다. 감가상각 내용연수표 같은 실무 핵심이 전부 그 안에 있었고요. 그런데 기존 검사는 왜 몇 달째 초록불이었을까요? 조문 개수는 정확히 맞았거든요. 조문 바깥이 통째로 빠진 거라, 조문을 세는 검사로는 영원히 통과합니다.
검사는 "옳은가"를 보지 않는다. "내가 확인하기로 정한 것이 맞는가"만 본다.
이 옆방 테스트와 원본 대조 절차도 각각 스킬로 저장 — 1주차 스킬 4개가 완성됐습니다.
✅ 결과 (After)
Before
After
새 도구 채택 판단
"좋다더라" + 눈짐작
문자 정확도 99.26%, 표 24/24 같은 실측 숫자
OCR 검증 정답지
없음 (사람 타이핑 = 오류원)
위조 정답 리그 — 정답 오류 0, 2분 만에 재실행
파이프라인 신뢰
"테스트 전부 통과"
통과 중이던 검사 뒤에서 1,197만 자 누락 발견·복구
다음에 비슷한 일이 오면
처음부터 다시 고민
스킬 4개 — "돌려볼게" 한마디면 숫자가 나옴
이틀간 만든 스킬 4개:
추출기 정확도 벤치 — 정답을 위조해 OCR/파서를 숫자로 재는 리그
문서 추출 채택 판정 — 어떤 입력엔 어떤 엔진 + 필수 후처리 정본
옆방 테스트 — 태어난 데이터 밖에서 검증하는 절차
원본 커버리지 감사 — "다 읽긴 했나"를 원본 대조로 확인하는 게이트
💬 배운 팁
효과적이었던 것
"잘 됐다" 금지, 숫자로 말하게 하기. AI에게 결과 보고를 시킬 때 "정확도 몇 %, 근거는 어느 파일"을 요구하면 행동이 달라집니다.
함정을 밟을 때마다 즉시 스킬에 박기. 87.7% 함정, 조사 파괴 함정 — 글로 남기지 않은 교훈은 다음 세션에서 반드시 재발합니다.
검증 절차 자체를 검증하기. 저장한 스킬의 명령을 깨끗한 환경에서 복사-실행해 같은 수치가 나오는지 확인. 재현 안 되는 절차는 절차가 아닙니다.
하지 말아야 할 것
채점 결과를 눈으로 안 보고 숫자만 믿기 (형식 차이가 오독으로 잡힙니다)
"0건 = 통과"로 끝내기 (안 읽고 있어도 0건입니다)
만든 데이터로만 검증하고 "리뷰 여러 번 했으니 됐다" 하기 (방을 안 옮기면 횟수는 의미 없습니다)
🌍 다른 업무에 적용한다면
경리·회계: 증빙 스캔 → 엑셀 자동화 도입 전, 정답 아는 문서 10장으로 위조 리그부터
법무·계약: 계약서 조항 추출기를 "다른 회사 양식"으로 옆방 테스트
데이터 이관: 구시스템→신시스템 마이그레이션 후 "건수 일치" 말고 원본 대조 (건수는 맞는데 특정 필드가 통째로 빠지는 게 정확히 이 패턴)
🚀 앞으로의 계획 (4주 로드맵)
이 스터디 기간 동안 이 스킬 4개를 한 혈통으로 키워볼 계획입니다:
2주차 (분해·합성): 4개가 서로 겹치는 부분을 분해해 하나의 "검증 게이트" 우산 스킬로 재합성
3주차 (하네스): 모의 분개 데이터로 만드는 미니 회계 파이프라인에 이 게이트들을 부품으로 배선 (차대변 0원 게이트 + 옆방 테스트 + 커버리지 감사)
4주차 (성장 루프): 매일 정해진 시간에 크론이 스킬을 기계 감사하고, 실전에서 잡힌 함정이 스킬로 역류하는 루프
스킬은 만든 날이 아니라 함정을 먹으며 자란 날들이 만든다고 생각합니다. 그 성장기를 매주 이어서 공유하겠습니다.
📋 재사용 프롬프트
새 추출 도구를 검증할 때:
이 OCR/파서를 채택하기 전에 검증 리그를 만들어줘. ①정답이 확정된 테스트 문서를 직접 생성하고(실무 문서와 성격이 닮게 — 표·금액·불릿 포함, 단 실제 내부 데이터 금지) ②이미지로 변환해 텍스트층이 0인지 확인한 뒤 ③후보 엔진들에 같은 파일을 먹여 문자 정확도·표 복원율을 표로 보고해줘. 채점 전에 마크다운 형식 문자는 제거하고, 불일치 목록은 눈으로 볼 수 있게 나열해줘.
만든 파서를 검증할 때:
이 파서를 옆방 테스트해줘. ①지금까지 검증에 쓴 데이터가 뭐로만 구성됐는지 한 줄로 적고 ②같은 계열이지만 분야가 완전히 다른 실데이터를 새로 구해 그대로 돌려줘. ③결과가 0건이어도 끝내지 말고, 원본에서 패턴을 직접 세어 파서 통과 후 숫자와 대조해줘. 두 숫자가 어긋나면 어느 영역을 파서가 안 읽는지 특정해줘.