흐름
세 동작이면 됩니다.
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 비용이 붙는 구조에서 무료로 버티면 손해가 커지고 시장에는 유료로 쓸 이유가 없었습니다. 결제 연동은 실험 단계까지만 진행하고 과금은 켜지 않았습니다. 그래서 성장은 멈추고 코드는 공개 스냅샷으로 남겼습니다.