첫날부터 757달러 중복 결제를 잡아낸 AI 송장 파이프라인 구축기
요약
n8n과 Google Gemini를 활용하여 송장 데이터를 자동으로 추출하고 검증하는 프로덕션급 AI 파이프라인 구축 사례를 소개합니다. 이 시스템은 중복 결제와 이상 징후를 탐지하여 수동 입력의 오류와 비용 문제를 해결합니다.
핵심 포인트
- n8n 워크플로우를 통한 Gmail-Gemini-Sheets 통합 자동화
- Gemini를 활용한 비정형 PDF 데이터의 구조화된 JSON 추출
- 복합 키(Vendor+Invoice#+Amount) 기반의 중복 결제 탐지 로직
- 검증 실패 및 이상 징후 발생 시 Slack 알림 및 별도 시트 관리
지난주에 저는 실제 송장들을 배치로 사용하여 저의 n8n 송장 추출 워크플로우를 테스트했습니다. 첫 실행 만에, 사람이었다면 두 번 결제했을 757달러 규모의 중복 송장을 잡아냈습니다. 또한, 공급업체의 과거 평균보다 7.4배 높은 3,696달러 규모의 가구 주문을 이상 징후로 표시했습니다.
이것은 데모가 아닙니다. 오류 처리(error handling), 감사 로그(audit logging), 그리고 이상 탐지(anomaly detection) 기능이 포함된 프로덕션 파이프라인입니다. 정확히 어떻게 작동하는지 소개합니다.
문제점
매입 채무(Accounts payable) 팀은 PDF의 송장 데이터를 스프레드시트에 수동으로 입력합니다. 이는 다음과 같은 문제를 야기합니다:
- 느림: 바쁜 팀의 경우 주당 3~6시간 소요
- 오류 발생 가능성: 금액 오타, 잘못된 날짜, 누락된 품목
- 비용 발생: 단 한 번의 중복 결제($500~$2,000)가 1년 치 자동화 비용보다 더 많이 듭니다.
대부분의 "송장 자동화" 도구는 연간 5만 달러 이상의 엔터프라이즈 소프트웨어이거나, 텍스트를 CSV로 쏟아붓는 기본적인 OCR(광학 문자 인식)입니다. 두 가지 모두 추출(extraction) → 검증(validation) → 중복 탐지(duplicate detection) → 이상 징후 표시(anomaly flagging) → 감사 추적(audit trail) → 알림(alerts)으로 이어지는 전체 파이프라인을 처리하지 못합니다.
아키텍처
저의 n8n 워크플로우는 이 흐름에서 12개의 노드(nodes)를 가집니다:
Gmail Trigger → PDF Filter → AI Extraction → Validation → Duplicate Check → Anomaly Detection → Sheets Ledger → Slack Alert
1. Gmail Trigger (송장 감시)
워크플로우는 전용 Gmail 편지함에서 PDF 첨부 파일이 포함된 이메일을 감시합니다. 다음과 같은 기준으로 필터링합니다:
- 제목 패턴 ("invoice", "receipt", "bill", "statement")
- 발신자 도메인 화이트리스트 (선택 사항)
- 첨부 파일 유형 (PDF만 허용)
2. AI Extraction (Gemini)
PDF는 구조화된 프롬프트(prompt)와 함께 Google Gemini로 전송됩니다:
"이 송장에서 다음 필드를 추출하세요: 공급업체 이름, 송장 번호, 송장 날짜, 납기일, 품목(설명, 수량, 단가, 합계), 소계, 세액, 총액, PO 번호, 결제 조건. JSON 형식으로 반환하세요."
Gemini는 스캔된 PDF, 디지털 PDF, 다중 페이지 송장, 국제 양식 등 모든 송장 형식을 처리합니다. 템플릿 매칭(template matching)이 필요하지 않습니다.
3. Validation (검증)
데이터가 원장에 기록되기 전에, 추출된 데이터는 검증 과정을 거칩니다:
- 필수 필드 존재 여부 (vendor, amount, date)
- 금액(Amount)이 양수인지 확인
- 날짜(Date) 파싱 가능 여부
- 송장 번호(Invoice number)가 비어 있지 않은지 확인
검증에 실패한 항목은 사람이 직접 확인할 수 있도록 원본 추출 데이터와 함께 "Review" 시트로 이동합니다. 어떤 데이터도 조용히 누락되지 않습니다.
4. Duplicate Detection (중복 탐지)
이 단계에서 757달러의 중복 결제를 잡아냈습니다. 워크플로우는 복합 키(composite key)를 사용하여 모든 새로운 송장을 기존 원장(ledger)과 대조합니다:
vendor + invoice_number + amount
세 가지 항목이 모두 기존 항목과 일치하면 중복으로 플래그(flag)가 지정됩니다. 워크플로우의 동작은 다음과 같습니다:
- 중복 항목을 "Duplicates" 시트에 기록
- Slack 알림 전송: "⚠️ DUPLICATE: Acme Corp의 송장 #INV-2024-0847 ($757.00)이 2024-03-15의 기존 항목과 일치합니다"
- 원장에 추가하지 않음
5. Anomaly Detection (이상 탐지)
중복이 아닌 송장의 경우, 워크플로우는 해당 공급업체(vendor)의 이동 평균(rolling average, 최근 10개 송장 기준)을 계산하고, 해당 평균의 2배를 초과하는 모든 항목에 플래그를 지정합니다:
IF amount > (vendor_rolling_avg × 2) THEN flag
3,696달러의 가구 주문 건은 해당 공급업체의 평균인 약 499달러의 7.4배였습니다. Slack 알림에는 다음과 같이 표시되었습니다:
"⚠️ ANOMALY: OfficeDepot의 송장 #FURN-8821 ($3,696.00)이 공급업체 평균($499.20)의 7.4배입니다. 결제 전 검토하십시오."
6. Audit Trail (감사 추적)
정상, 중복 또는 이상 항목을 포함한 모든 송장은 다음 정보를 포함하여 Google Sheets 원장에 기록됩니다:
- 타임스탬프 (Timestamp)
- 공급업체(Vendor), 송장 번호(#), 날짜, 금액
- 추출 신뢰도 점수 (Extraction confidence score)
- 상태 (clean / duplicate / anomaly / validation_failed)
- 소스 이메일 ID (추적 가능성을 위해)
7. Error Handling (오류 처리)
워크플로우에는 다음 기능이 포함되어 있습니다:
- Gemini API 호출 시 지수 백오프(backoff)를 적용한 3회 재시도
- 데드 레터 큐 (Dead-letter queue): 추출에 실패한 항목은 "Failed" 시트로 이동하며, 절대 유실되지 않습니다.
- 실패 시 Slack 알림: "❌ 이메일 [ID]의 추출에 실패했습니다. Failed 시트를 확인하세요."
- 멱등성 (Idempotency): 동일한 이메일이 두 번 처리되어도 원장에 중복 항목이 생성되지 않습니다 (이메일 ID가 중복 제거 키 역할을 함)
실제 테스트 결과
23개의 송장 배치(batch)를 대상으로 파이프라인을 실행했습니다:
| 지표 (Metric) | 결과 (Result) |
|---|---|
| 처리된 송장 (Invoices processed) | 23 |
| ... |
757달러의 중복 결제 건은 실제로 두 번 이메일로 발송된 진짜 송장이었습니다. 한 번은 3월에, 또 한 번은 6월에 발송되었습니다. 6월 이메일을 처리하던 사람이었다면 이를 다시 결제했을 것입니다.
기술 스택 (The Stack)
- n8n (self-hosted) — 워크플로 오케스트레이션 (workflow orchestration)
- Google Gemini — AI 추출 (AI extraction) (무료 티어로 월 약 1,500개의 송장 처리 가능)
- Gmail API — 이메일 트리거 (email trigger)
- Google Sheets API — 원장 (ledger) + 감사 추적 (audit trail)
- Slack API — 알림 (alerts)
총 API 비용: 송장 50개당 주당 약 $0.06. Gemini 무료 티어는 대부분의 소규모 비즈니스를 커버할 수 있습니다.
워크플로를 원하시나요?
전체 n8n 워크플로 JSON은 저의 오픈 소스 포트폴리오에 있습니다:
→ github.com/Sasidhar-Sunkesula/n8n-workflow-showcase
워크플로 #07 (Invoice & Document Extraction Pipeline)입니다. JSON을 n8n에 직접 임포트하고, API 키를 추가하면 바로 실행할 수 있습니다.
또한 고객 보고(client reporting), 리드 스코어링(lead scoring), 고객 온보딩(customer onboarding), 경쟁사 모니터링(competitor monitoring), 지원 분류(support triage) 등을 다루는 14개의 다른 프로덕션 워크플로도 보유하고 있습니다.
→ 라이브 포트폴리오 + 사례 연구 (Live portfolio + case studies)
직접 구축을 원하신다면
저는 고객 맞춤형(done-for-you) n8n 자동화 구축 서비스를 제공합니다. 특히 송장 추출의 경우:
- Basic ($100): 수동 업로드 → AI 추출 → Sheets 원장 기록
- Standard ($300): Gmail 자동 감시 → 추출 → 중복 탐지 → Sheets + Slack 알림
- Premium ($600): 전체 파이프라인 + 이상 탐지 (anomaly detection) + ERP/QuickBooks 연동 + 월간 유지보수 (monthly retainer)
저에게 메시지를 보내거나 포트폴리오 사이트를 통해 연락해 주세요. 지속적인 계약 이전에 유료 파일럿 테스트를 진행하는 것도 환영합니다.
저는 Sasidhar입니다 — 프로덕션 n8n 자동화를 전문으로 하는 풀스택 개발자 (Full-Stack Developer)입니다. 8개 도메인에 걸쳐 15개의 워크플로를 프로덕션 환경에서 운영하고 있습니다. 저는 이론적인 AI가 아닌, 실제 테스트 결과가 포함된 실용적인 자동화에 대해 글을 씁.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기