본문으로 건너뛰기

© 2026 Molayo

Zenn헤드라인2026. 06. 25. 21:32

AI 팀이 야간에 FAX 계상 오류를 자율적으로 복구한 이야기

요약

FAX OCR 데이터 처리 과정에서 발생한 회계 오류를 AI 에이전트 팀이 자율적으로 복구한 사례를 다룹니다. 단순 수치 계산이 아닌 감사성을 고려하여 취소와 정정 문서를 각각 명세로 등록하고, 다단계 검증 체계를 통해 데이터 무결성을 확보했습니다.

핵심 포인트

  • AI의 단락적 판단을 방지하기 위해 fail-closed 원칙 적용
  • 감사성(Auditability) 확보를 위해 순액이 아닌 원본 단위 등록
  • OCR, 출처 대조, 4자 리뷰, 파수꾼, 인간 승인, Read-back의 6단계 검증 체계 구축
  • AI의 속도보다 AI가 임의로 수정할 수 없는 구조 설계가 더 중요함

이것은 무엇에 관한 이야기인가

업무용 FAX를 OCR(광학 문자 인식)하여 스프레드시트에 등록하는 운용 과정에서, 야간에 「취소」와 「정정」 페어가 혼재되어 있다는 사실을 발견했습니다. 처음에는 일부 매출이 사라진 것처럼 보였고, 복구 작업 도중에 동일한 화물에 대해 「오래된 확정값」, 「취소 전표」, 「정정 전표」가 중첩되어 있다는 사실이 밝혀졌습니다.

여기서 위험한 점은, AI가 "부족하니까 붙인다", "오래되었으니까 지운다"라고 단락적으로 판단하는 것입니다. 재무 데이터에서 삭제와 추가는 되돌릴 수 없는(irreversible) 것에 가까운 조작입니다. 그래서 이번에는 AI 팀에게 작업을 분담시키면서, 모든 판단을 fail-closed(실패 시 차단) 방향으로 기울여 복구했습니다.

문제: 취소와 정정이 같은 묶음에 들어있었다

FAX 묶음에는 여러 문서가 포함되어 있었습니다. 어떤 문서는 과거 입고분의 취소로 모든 행이 마이너스(-)였습니다. 다른 문서는 동일한 화물의 정정으로 모든 행이 플러스(+)였습니다.

단순히 차분(difference)만 보면 순액(net amount) 차이는 작아 보입니다. 하지만 운용 규칙은 "확정 FAX는 전건 등록"입니다. 즉, 순액만을 1행으로 넣는 것이 아니라, 취소 문서와 정정 문서를 각각 명세로 등록하고, 회계표 측에도 차감액을 별도 셀로 남겨야 합니다.

이 방침을 택한 이유는 감사성(auditability) 때문입니다. 나중에 확인했을 때 "왜 이 금액이 되었는가"를 차분 요약이 아닌 원본 서류(source document) 단위로 추적할 수 있도록 하기 위함입니다.

witness 체인을 만든다

이번 복구에서는 작업을 6단계로 나누었습니다.

첫 번째는 OCR 담당자에 의한 삼점 검산입니다. 행 수, 합계 금액, 단가×수량의 일치를 확인하여, 하나라도 어긋나면 확정 CSV를 내보내지 않도록 했습니다. 실제로 도중에 행 누락이 검출되어 확정 전에 중단되었습니다.

두 번째는 source reconciliation(출처 대조)입니다. CSV가 어떤 FAX 페이지에서 왔는지를 source_set_idpage_sha256으로 결속하여, 다른 문서의 명세를 섞지 못하도록 했습니다.

세 번째는 4자 리뷰입니다. OCR, 설계, 부착, 파수꾼(witness)의 역할을 나누어, 동일한 사람이 "읽기", "판단", "붙이기", "검증"을 겸임하지 않도록 했습니다.

네 번째는 파수꾼(witness)입니다. 사전에 기대치를 커밋(commit)하고, 부착 후의 read-back(재읽기) 값과 대조했습니다. 이를 통해 실행 후의 자기 보고가 아니라, 사전 계산과의 일치 여부로 검증할 수 있습니다.

다섯 번째는 인간 승인입니다. 되돌릴 수 없는 운영 환경의 변경은 AI끼리의 GO 신호만으로는 진행할 수 없도록 규칙을 정했습니다.

여섯 번째는 read-back입니다. 부착 후 대상 범위, 합계, 변경되지 않은 셀, 보류 건수를 다시 읽어 들여 diff 0을 확인했습니다.

결과

취소 문서와 정정 문서는 각각 별도의 그룹으로서 명세 등록되었습니다. 시장별 집계표에도 취소 차감액과 정정 차감액을 각각 별개의 내역 셀로 남겼습니다. 순액만을 등록하지 않음으로써 나중에 원본 서류와 대조할 수 있습니다.

부착 후의 read-back에서는 명세 행 수, 합계, 집계표의 수식 결과, 기존 행의 불변성, 다른 날짜의 기존 수정분 불변성이 모두 일치했습니다. 보류 및 제외 건수는 0건이었습니다.

나아가 송장 측의 보조 대조를 통해, 순액 차이가 일부 품목의 재가격 책정(re-pricing)에서 기인했다는 것도 확인할 수 있었습니다. 여기서도 추가 부착은 하지 않고 대조 리포트로 처리했습니다.

배움

가장 큰 배움은 "AI가 빠르게 고치게 하는 것"보다 "AI가 멋대로 고칠 수 없는 구조를 만드는 것"이 더 중요하다는 점입니다.

특히 효과적이었던 것은 다음 4가지입니다.

  • 합계가 일치하지 않는 CSV는 FINAL로 만들지 않는다
  • 원본 서류와 CSV를 해시(hash)로 결속한다
  • 부착 전에 preflight(사전 점검)를 필수화한다
  • 부착 후에는 read-back으로 사전 기대치와 대조한다

OCR은 편리하지만, 원본 서류 묶음, 정정, 취소, 부분판이 섞이면 쉽게 파탄 납니다. 그렇기 때문에 AI의 출력을 신뢰하는 것이 아니라, AI에게 검산과 정지를 의무화할 필요가 있습니다.

이번 복구는 AI 팀이 야간에 자율적으로 진행한 작업이었습니다. 하지만 성공한 이유는 AI가 똑똑했기 때문이 아닙니다. 멈춰야 할 곳에서 멈추고, 증적이 갖춰질 때까지 붙이지 않았으며, 붙인 후에 다시 읽어 들였기 때문입니다.

실제 운용되는 AI 에이전트에게 필요한 것은 강력한 추론뿐만 아니라, 강력한 브레이크입니다.

Discussion

AI 자동 생성 콘텐츠

본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0