이중 언어 인보이스-JSON API 구축기 (전체 스택 공개)
요약
PDF/이미지 형태의 인보이스를 JSON 데이터로 변환하는 REST API 구축 과정을 공유합니다. Python FastAPI와 PaddleOCR을 사용하여 이중 언어(영어, 베트남어) 지원 및 다양한 문서 유형 처리가 가능하며, 특히 테이블 행 분할과 악센트 처리 등 실제 구현에서 겪은 어려움과 해결책을 제시했습니다.
핵심 포인트
- PDF/이미지 인보이스를 구조화된 JSON으로 변환하는 API 구축 가이드입니다.
- PaddleOCR 사용 시 베트남어 악센트 및 저화질 스캔 파일 처리에 강점을 보였습니다.
- 테이블 행 분할은 위치 기반 휴리스틱(positional heuristics)을 활용하여 해결했습니다.
- RapidAPI를 통해 인증, 속도 제한 등 인프라 구축 과정을 간소화했습니다.
제가 만난 모든 회계팀은 같은 문제를 겪고 있었습니다. 바로 인보이스가 PDF나 스캔 파일 형태로 도착하는데, 누군가 그것을 스프레드시트에 다시 타이핑해야 한다는 것이었습니다. 기존의 OCR API들은 비싸거나, 영어 전용이거나, 구조화된 데이터 대신 단순한 텍스트 덩어리를 반환하는 문제가 있었습니다.
그래서 저는 문서를 받아서 JSON 형태로 반환하는 작은 REST API를 만들었습니다.
기능 설명
이미지나 PDF를 POST하면 다음과 같은 결과가 반환됩니다:
{
"vendor": "ACME Ltd",
"date": "2026-09-14",
...
}
별도의 설정 없이 이중 언어(영어와 베트남어)를 지원합니다. 인보이스, 영수증, 이력서, 계약서, 구매 주문서 등 총 8가지 문서 유형을 처리할 수 있습니다.
사용 스택 (The stack)
- 서비스 레이어: Python + FastAPI
- 텍스트 추출: PaddleOCR (베트남어 악센트를 잘 처리함)
- 필드 매핑: 문서 유형별 커스텀 규칙 및 정규 표현식(regex) 계층
- 배포: Railway
- 프론트엔드/결제 시스템: RapidAPI
PaddleOCR을 선택한 이유
Tesseract는 베트남어 악센트와 저화질 전화 스캔 파일 처리에서 어려움을 겪었습니다. 반면, PaddleOCR은 이 두 가지 모두를 눈에 띄게 더 잘 처리했으며, CPU 전용으로 작동하여 호스팅 비용을 낮게 유지할 수 있었습니다.
Stripe 대신 RapidAPI를 선택한 이유
저는 인증(auth), 속도 제한(rate limiting), API 키, 결제 시스템 구축 과정을 건너뛰고 싶었습니다. RapidAPI는 이 네 가지 기능을 모두 제공하며, 사람들이 이미 API를 검색하는 마켓플레이스까지 갖추고 있습니다. 개인 프로젝트의 경우 (수수료를 가져간다는 단점에도 불구하고) 그 트레이드오프(tradeoff)가 가치가 있었습니다.
어려웠던 점들
- 라인 아이템 감지: 총액은 쉽습니다. 하지만 테이블을 행으로 분할하는 것이 대부분의 API가 실패하는 지점입니다. 저는 OCR 박스에 대한 위치 기반 휴리스틱(positional heuristics)을 사용하게 되었습니다.
- 베트남어 처리: 악센트 부호(diacritics)가 단순 토크나이저를 망가뜨립니다. NER 전에 정규화(Normalising)하는 것이 큰 도움이 되었습니다.
- 혼합 언어 인보이스: 어떤 문서는 영어 헤더와 베트남어 라인 아이템을 가지고 있습니다. 문서 전체 감지보다는 필드별 언어 감지가 더 효과적이었습니다.
사용해 보기
https://rapidapi.com/tuyentn23/api/invoice-to-json-extractor1
무료 등급(Free tier)이 활성화되어 있습니다. 만약 인보이스나 이력서와 관련된 무언가를 구축하신다면, 어떤 문서 유형을 다음에 원하시는지 알려주시면 감사하겠습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기