
이번 강의 주제는 영수증 이미지를 올리면 자동으로 정리되는 봇 만들기였다. 이번엔 전체적으로 무난하게 진행된 실습이었다.
전체적으로 만든 흐름은 이렇다.
Form Trigger
↓
Upstage OCR
↓
Edit Fields
↓
Gemini LLM Chain
↓
Structured Output Parser
↓
Google Sheets
최종적으로 뽑아낸 정보는 세 가지. timestamp, 카드번호, 총금액. 영수증 한 장에서 딱 필요한 것만 골라내는 작업이었다.

OCR이 API로 따로 있다는 걸 이번에 처음 알았다
가장 신기했던 부분부터 적어야겠다. 솔직히 그동안 OCR은 그냥 "스캐너 앱에 내장된 기능" 정도로만 생각했다. 명함 인식 앱이나 문서 스캔 앱 켜면 알아서 텍스트 인식되는 그 기능 말이다. 그런데 이게 API로 따로 떼어져 있어서 내가 만든 워크플로우 안에 그냥 가져다 붙일 수 있다는 걸 이번에 처음 알았다.
Upstage OCR을 연결하니까 영수증 이미지에서 이런 식으로 텍스트가 줄줄 뽑혀 나왔다.
승인금액 12,000원
카드번호 1234-****-5678
승인일시 2025-05-01
이거 보면서 "와 진짜 그냥 글자를 읽어주는구나"가 처음 든 생각이었다. 이미지를 보고 뭐가 영수증인지 판단하는 게 아니라, 진짜 글자 모양만 보고 텍스트로 바꿔주는 느낌이라 OCR이랑 LLM이 하는 일이 다르다는 게 그제야 좀 와닿았다.
Edit Fields 거쳐서 Gemini까지
OCR 결과를 그대로 Gemini한테 던지는 게 아니라, 중간에 Edit Fields 노드를 거쳐서 타임스탬프 같은 값을 같이 정리해서 넘기는 구조였다. 강의에서 알려준 대로 따라가니 이 부분은 별 무리 없이 넘어갔다.
그다음 Gemini LLM Chain을 설정해서 OCR 결과를 넘기고, 원하는 출력 형태를 이렇게 정해줬다.
{
"timestamp": "",
"card_number": "",
"total_amount": ""
}
여기서부터는 생각보다 너무 쉽게 풀렸다. 분명 처음엔 "LLM한테 형식 맞춰서 답하게 시키는 거 까다롭지 않을까" 싶었는데, 막상 돌려보니 한 번에 깔끔하게 카드번호랑 총금액을 골라서 뽑아줬다. 응답 속도도 꽤 빨라서 살짝 놀랐다. 여기에 Structured Output Parser를 붙여서 응답을 JSON으로 한 번 더 정리해줬는데, 이거 없으면 Gemini가 가끔 형태를 살짝 다르게 줄 수도 있어서 안정성 잡아주는 용도라고 이해했다.

마지막으로 Google Sheets 노드를 연결해서 새 행으로 추가하게 만들었다. 테스트용 영수증 이미지를 올렸는데 시트에 행이 자동으로 하나 생기면서 timestamp, card_number, total_amount가 채워지는 걸 보고 나도 모르게 "오" 소리가 나왔다. 별거 아닌 거 같은데 직접 손으로 한 줄도 안 쓰고 영수증 정보가 시트에 박히는 거 보니까 묘하게 뿌듯했다.
전체적으로 든 생각
실습 끝내고 나서 든 생각은, 이 정도 워크플로우면 나도 작게나마 비슷한 걸 만들 수 있지 않을까 하는 거였다. 거창한 서비스까지는 모르겠어도, 예를 들어 내가 매달 모아두는 카드 영수증들 사진 찍어서 올리면 자동으로 정리되는 정도는 충분히 시도해볼 수 있을 것 같다.
지금까지는 OCR이든 LLM이든 그냥 "이미 만들어진 걸 쓰는" 입장이었는데, 이번 실습으로 그 안의 구조를 한 번 들여다보고 나니 자동화에 대한 거리감이 좀 줄어든 느낌이다. 다음엔 영수증 말고 명함 정리하는 데도 비슷한 방식을 써볼 수 있을지 한번 시도해볼 생각이다.
'n8n' 카테고리의 다른 글
| [n8n이 다 해줌] CHAPTER 07. AI 투자 리포트 자동 발송 시스템 만들기 (0) | 2026.06.21 |
|---|---|
| [n8n이 다 해줌] CHAPTER 05. AI 회의록 서기 만들기 (0) | 2026.06.20 |
| [n8n이 다 해줌] CHAPTER 03 날씨 자동 알림봇 만들기 — Discord로 매일 아침 날씨 받아보기 (0) | 2026.05.20 |
| [n8n이 다 해줌] CHAPTER 02 주식 뉴스 수집봇 만들기 (0) | 2026.05.17 |