새벽 2시, 대표는 여전히 사무실이었습니다. 스마트스토어, 쿠팡, 11번가, 자사몰, 카페24 마켓플러스. 다섯 개 채널의 정산 데이터를 엑셀에 나란히 놓고 수수료가 맞는지 대조하고 있었죠. 매달 마감 이틀은 그렇게 사라졌습니다.
무엇이 문제였나
이 쇼핑몰(월 매출 4.2억, 주력 카테고리 리빙)의 정산 프로세스는 겉보기엔 단순했습니다. 채널별로 정산 내역서를 받아 자사 ERP 매출 기록과 대조하고, 차이가 나는 항목을 찾아내는 일. 문제는 다섯 채널이 모두 다른 방식으로 데이터를 준다는 점이었습니다.
- 스마트스토어 — 판매자 센터에서 엑셀 다운로드, 주문번호 형식 'N202607…'
- 쿠팡 — 정산 API 제공, 하지만 배송비/쿠폰이 별도 필드로 분리
- 11번가 — CSV 이메일 첨부, 수수료가 상품 카테고리별로 다르게 계산
- 자사몰 — 카페24 어드민 SQL 리포트, VAT 포함/불포함 혼재
- 마켓플러스 — PDF 정산서만 제공, 표 구조가 매달 조금씩 바뀜
담당자(경리팀장 겸 대표)는 이 다섯 소스를 하나의 대조표로 만들어야 했습니다. 채널별 수수료율은 상품 카테고리마다 다르고, 프로모션 참여 여부에 따라 또 달라집니다. 한 줄만 잘못 매핑해도 전체 검산이 어긋났습니다.
저 220만 원이 결정적이었습니다. 채널이 잘못 계산해서 덜 준 금액, 자사 ERP에 잘못 기록된 금액, 환불이 두 번 처리된 건. 이 오차를 잡아내지 못하면 그대로 손실이었고, 잡아내려면 사람이 매일 밤을 새워야 했습니다.
핵심 발상: '전부 검사'에서 '예외만 검사'로
n8n으로 워크플로우를 짤 때 가장 먼저 정한 원칙은 이거였습니다. 정상 건은 사람이 볼 필요가 없다. 사람은 오직 '규칙에서 벗어난 건'만 본다.
어떻게 만들었나
- 매일 새벽 3시 스케줄 트리거로 5개 채널 데이터 수집 (API 3개, 이메일 첨부 파싱 1개, PDF OCR 1개)
- 채널별 필드를 공통 스키마로 정규화 — 주문번호, 상품 SKU, 판매가, 수수료, 배송비, VAT
- 자사 ERP(Postgres)에서 같은 기간 주문 데이터를 조회, 주문번호 매칭
- 채널별 수수료율 규칙 테이블과 대조 — 예상 수수료 계산 후 실제 수수료와 차액 확인
- 차액 500원 이상이거나 매칭 실패한 건만 Google Sheet에 플래그 기록
- 매일 아침 8시 슬랙으로 요약 보고 — 정상 X건, 확인 필요 Y건, 총 오차 Z원
PDF 정산서를 다루는 법
가장 골치 아팠던 건 마켓플러스의 PDF 정산서였습니다. 매달 표 구조가 조금씩 바뀌어서 정규식으로 파싱할 수가 없었습니다. AI Agent 노드에 PDF 텍스트를 넣고 Structured Output으로 뽑도록 했습니다.
// AI Agent 노드 · PDF 정산서 파싱
const schema = z.object({
settlement_period: z.string(),
items: z.array(z.object({
order_id: z.string(),
sku: z.string(),
gross_amount: z.number(),
commission: z.number(),
shipping_fee: z.number(),
net_settlement: z.number(),
})),
total_net: z.number(),
});
// 후속 검증 노드
const sum = $json.items.reduce((s, i) => s + i.net_settlement, 0);
if (Math.abs(sum - $json.total_net) > 10) {
throw new Error(`합계 불일치: 항목합 ${sum} vs 명시 ${$json.total_net}`);
}결과
숫자 중에 특히 눈여겨봐야 할 건 오차 발견율입니다. 사람이 다 볼 때는 오히려 놓치는 게 많았습니다. 새벽 2시에 눈이 침침한 상태에서 500원 차이를 잡아내기는 어려운 거죠. 워크플로우는 그런 걸 지치지 않고 봅니다.
이제 새벽에 정산 안 합니다. 워크플로우가 합니다. 아침에 슬랙 보고서 하나 확인하고, 플래그된 건 서너 개만 사람이 봐요. 예전엔 몰랐던 미수금까지 잡아내니 오히려 매출이 늘었습니다.— 이재현 · 쇼핑몰 대표
구축에 들인 시간과 비용
- 요구사항 정리 및 채널별 수수료 규칙 문서화 — 3일
- n8n 워크플로우 개발 및 채널별 파서 구현 — 5일
- AI 파싱 노드 프롬프트 튜닝 및 검증 룰 추가 — 2일
- 3개월간 병행 운영(사람 대조 + 자동 대조) — 오차 케이스 학습
- 총 구축 기간 10영업일, 병행 검증 3개월
병행 운영 기간을 강조하고 싶습니다. 자동화 워크플로우는 만들자마자 신뢰하면 안 됩니다. 최소 한두 달은 사람이 하던 방식과 나란히 돌리면서, 두 결과가 다를 때마다 원인을 찾아야 합니다. 이 기간이 자동화의 실제 정확도를 결정합니다.
정리
이 사례의 핵심은 도구가 아니라 관점입니다. '전부 확인'에서 '예외만 확인'으로 옮기고, 예외의 정의를 명확한 규칙과 검증으로 코드화하는 것. 그러면 사람은 판단이 필요한 일에만 집중하고, 반복은 워크플로우가 지치지 않고 처리합니다.