입금 통보 파서에 AI 검증 얹어 정산 수기 보정 60% 줄임
목차
배경
이커머스 결제 플랫폼에서 파트너별 입금 통보 메시지를 수신해 자동 매칭하는 기능이 있었음. 문제는 결제대행사·은행마다 포맷이 제각각이라 정규식이 폭발적으로 늘어났다는 것.
기존 파서는 새 포맷 하나 추가될 때마다 분기 로직이 누더기처럼 붙음. 입금자명 한 글자 누락되면 매칭 실패했고, 그게 누락 데이터로 쌓여서 운영팀이 매일 수기 보정함.
구조 변경
핸들러 레지스트리 패턴으로 정리함. 은행/결제대행사 식별자로 적합한 파서를 골라내고, 공통 추상 계층에서 검증·정규화·로깅을 처리하게 분리.
| 레이어 | 역할 |
|---|---|
| 진입 컨트롤러 | 메시지 수신, 인증 |
| 레지스트리 | 식별자 기반 핸들러 라우팅 |
| 추상 핸들러 | 공통 검증/저장/멱등성 |
| 구체 핸들러 | 은행별 파싱 로직 |
이 분리만으로도 신규 은행 추가가 30분짜리 작업이 됐음. 기존엔 반나절이었는데.
AI 검증 레이어
진짜 핵심은 여기. 정규식이 통과해도 의미가 깨진 케이스(예: 입금자명 자리에 광고 문구가 섞임)를 잡으려고 LLM 검증을 끼움.
- 1차: 룰 기반 추출 → 후보 필드 도출
- 2차: AI가 원문 + 후보를 받아 "이 필드가 실제 입금자/금액/시각이 맞는가" 판정
- 3차: 신뢰도 임계값 미달이면 보류 큐로
처음엔 모든 메시지를 AI로 보내려 했는데 비용·지연 때문에 1차 룰이 통과한 케이스만 검증으로 돌리는 게 맞다고 결론냈음. 룰이 못 잡은 건 어차피 재처리 큐 행이라.
부수 효과
- 운영팀 수기 보정 건수가 직전 주 대비 60%대로 감소
- 신규 포맷 대응 PR 사이즈가 평균 3배 작아짐
- 파서 단위 테스트 커버리지가 올라감 (공통 로직 분리 덕)
회고
핸들러 분리는 진작 했어야 했음. AI 검증을 먼저 넣었으면 정규식 누더기 위에 또 누더기가 쌓였을 거고, 룰부터 정리한 뒤 AI를 위에 얹은 게 순서로 맞았다.
LLM을 "최후의 검증자"로 쓰는 건 비용 통제만 잘하면 꽤 강력함. 다만 응답 포맷을 강제하지 않으면 파싱 자체가 또 다른 정규식 지옥이 되니 스키마는 처음부터 못 박을 것. 그리고 모든 케이스를 AI로 흘리고 싶은 욕망은 처음부터 차단해야 함 — 룰이 잡을 수 있는 건 룰이 잡게 두는 게 운영비 측면에서 정답.
다음
댓글 0
첫 댓글 달아줘.