흐름
세 동작이면 됩니다.
01
올린다
영수증이나 보증서를 사진 한 장으로 올립니다. 업로드는 브라우저에서 저장소로 바로 가고, 처리 직전에 서버가 크기와 형식을 다시 확인합니다.
02
읽는다
OCR이 글자를 읽고, 규칙 추출기가 상호·구매일·금액을 먼저 채웁니다. 규칙이 못 잡은 칸만 LLM이 보완하고, 결과는 저장 전에 범위 검사를 거칩니다.
03
알린다
환불·보증 마감이 다가오면 이메일이나 텔레그램으로 알립니다. 같은 제품, 같은 기한, 같은 채널에는 한 번만 보냅니다.
정확도
숫자로 관리합니다.
규칙 추출기의 필드별 F1을 재고, 기준선보다 떨어지면 CI가 배포를 막습니다. 아래는 개선 전후 값입니다.
상호 F1
9%100%
구매일 F1
89%99%
금액 F1
98%100%
KORIE OCR 테스트 스플릿 314예제, 2026-07-05 실측. KORIE는 필드별 크롭 전사라 상호·금액 지표는 위치 찾기가 아니라 값 파싱 능력에 가깝습니다. 시드 골드셋 10건은 세 필드 모두 F1 100%를 회귀 기준점으로 잡고 있습니다.
운영
조용히 실패하지 않게.
실제로 운영하면서 고친 것들입니다. 기능보다 먼저 막아 둔 구멍이 여기 있습니다.
- 인증 실패는 닫힌 쪽으로
- 크론·웹훅 시크릿이 비어 있으면 통과가 아니라 500으로 막습니다.
- LLM 출력은 믿지 않고 검사
- 날짜는 정규화, 금액은 10억 원 상한, 텍스트는 길이 상한을 넘으면 버립니다.
- 알림은 정확히 한 번
- 제품·종류·임계일·채널 조합마다 발송 기록을 남겨 중복을 막습니다.
- 하루 30건
- 사용자마다 하루 처리 건수를 제한해 OCR·LLM 비용이 튀지 않게 둡니다.
- 콜백은 같은 출처만
- 로그인 뒤 돌아갈 주소는 같은 사이트의 상대 경로만 허용합니다.
- 서울 리전
- 함수는 icn1 에서 돌고, 이미지는 R2 에 둡니다.
왜 여기서 멈췄나
기능은 끝났고, 시장이 멈추라고 했습니다.
같은 기능을 전부 무료로 주는 앱이 이미 있었고, 카드사·은행 알림도 비슷한 일을 해 줍니다. 업로드마다 OCR·LLM 비용이 붙는 구조에서 무료로 버티면 손해가 커지고, 유료로 받을 이유는 시장에 없었습니다. 결제 연동은 실험까지만 하고 과금을 켜지 않았습니다. 그래서 성장은 멈추고, 코드는 공개 스냅샷으로 남겼습니다.