InvoicePilot: 프리랜서를 위한 개인 인보이스 관리 시스템
요약
InvoicePilot은 프리랜서와 1인 사업자를 위해 설계된 로컬 우선 인보이스 관리 도구입니다. 사용자가 청구서나 영수증 텍스트를 붙여넣거나 파일을 가져오면, 공급업체, 클라이언트, 날짜, 총액 등 핵심 정보를 자동으로 추출합니다. 이 도구는 복잡한 클라우드 서비스 없이도 빠르고 사적인 지출 내역 관리를 가능하게 합니다.
핵심 포인트
- 프리랜서 및 1인 사업자를 위한 로컬 우선 인보이스 관리 시스템입니다.
- 텍스트 기반의 청구서/영수증에서 핵심 재무 정보를 자동으로 추출합니다.
- 클라우드 서비스 의존 없이 사적인 워크플로우를 중요시하는 사용자에게 적합합니다.
InvoicePilot: 프리랜서를 위한 개인 인보이스 관리 시스템
이 글은 Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle에 제출하는 내용입니다.
제가 만든 것 (What I Built)
InvoicePilot은 클라이언트 청구서와 영수증을 수동으로 정리하는 데 지친 프리랜서 및 1인 사업자를 위한 로컬 우선(local-first) 인보이스 관리 도구입니다. 인보이스 텍스트를 붙여넣거나 .txt 파일을 가져오면, 공급업체(vendor), 클라이언트, 인보이스 번호, 날짜, 소계(subtotal), 세금(tax), 총액(total), 그리고 품목별 내역(line items)을 추출합니다. 감지된 항목들을 카테고리로 그룹화하고, 인보이스 총액과 (소계 + 세금)을 비교하는 확인 기능도 포함되어 있습니다.
제가 이 도구를 만든 대상은 다른 클라우드 회계 서비스에 가입하지 않고도 빠른 지출 내역 스냅샷을 원하는 프리랜서입니다. InvoicePilot은 아직 유료 고객이 있는 비즈니스가 아닌 프로토타입입니다. 사적인(private) 경량 워크플로우를 중요하게 생각하는 프리랜서를 위한 일회성 구매 또는 소액 구독 형태의 유료 제품이 가능할 수 있지만, 저는 사용자들과 가격 책정에 대해 검증하지 못했습니다.
데모 (Demo)
실시간 데모: InvoicePilot on Render. Try sample을 클릭하고 호스팅된 데모의 개인 정보 보호 고지(privacy notice)를 확인한 후, Organize invoice를 클릭하여 대시보드, 카테고리 분류, 조정 확인(reconciliation check), 그리고 내보내기/저장 작업을 확인하세요. 이 공개 데모는 제출된 텍스트를 처리하기 위해 Render 서비스로 전송하므로, 실제 인보이스가 아닌 가상의/테스트 데이터만 사용해 주세요.
로컬 사용을 위해서는 의존성(dependencies)을 설치하고, python app.py를 실행한 후, http://127.0.0.1:5000에 접속하면 됩니다. InvoicePilot은 붙여넣기 텍스트와 .txt 파일을 받으며, PDF나 이미지 OCR 기능은 지원하지 않습니다.
코드
저장소(Repository): github.com/anshika361/InvoicePilot
이 앱은 Python과 Flask로 구축되었습니다. 코덱에는 인보이스 파서, 로컬 Ollama 통합 기능, 그리고 CSV 내보내기 및 브라우저 로컬 저장 기능을 위한 브라우저 인터페이스가 포함되어 있습니다.
제작 과정(How I Built It)
InvoicePilot은 두 가지의 로컬 처리 경로를 가지고 있습니다:
- 결정론적 파서(deterministic parser)는 일반적인 인보이스 필드와 라인 항목을 추출합니다. 또한 디자인, 개발, 출장, 소프트웨어 등 간단한 카테고리를 할당합니다.
- 만약 Ollama가 로컬에서 실행되고
llama3.2모델이 설치되어 있다면, 앱은 이 오픈 웨이트(open-weight) 모델에게 인보이스 텍스트 구조화에 도움을 요청할 수 있습니다. 만약 Ollama를 사용할 수 없다면, 내장 파서(built-in parser)는 클라우드 AI 요청 없이도 사용 가능합니다.
모델이 계산기 역할을 하는 것은 아닙니다. 인보이스 소스에서 파싱된 숫자 합계는 모델이 다른 숫자를 반환하더라도 권위적(authoritative)으로 유지됩니다. 대시보드는 소계와 세금을 명시된 총액과 비교하고, 일치하지 않을 경우 경고를 표시합니다. 이는 그럴듯하지만 잘못된 숫자가 명백한 경고보다 더 위험할 수 있는 금융 데이터에 중요합니다.
인터페이스는 또한 CSV 다운로드, 복사 가능한 요약(copyable summaries), 그리고 브라우저의 로컬 스토리지에 최대 12개의 인보이스 요약을 저장하는 기능을 지원합니다. 이렇게 저장된 요약은 해당 브라우저 내에만 남아 있으며, 공유 계정이나 서버 측 데이터베이스가 아닙니다. 로컬 모드는 사용자의 장치에서 인보이스 텍스트를 처리합니다. 공개 Render 데모는 다릅니다: 제출된 텍스트는 호스팅 서비스로 전송되므로, 가상의/테스트 데이터와만 사용해야 합니다.
이번 개발 실행에서는 Ollama가 설치되지 않았기 때문에 폴백(fallback) 경로를 확인했습니다. 이는 실제 모델 추론이 아닙니다. 충돌하는 모델 합계를 시뮬레이션하여 인보이스의 파싱된 총액을 덮어쓸 수 없는지 확인하는 테스트를 추가했습니다. 프로젝트의 일곱 가지 테스트가 통과했습니다. 오픈 모델 추출 기능을 시연으로 설명하기 전에 실제로 Ollama 기반의 인보이스를 실행하고 기록해야 합니다.
오픈 혁신이 중요한 이유?
인보이스에는 이름, 고객 관계, 그리고 돈이 담겨 있습니다. 로컬 모드에서는 인보이스 텍스트가 제3자 AI 서비스로 전송되지 않고 사용자 장치에 머무릅니다. 오픈 가중치 모델(open-weight model)은 사용자가 통제하는 하드웨어에서 실행될 수 있으며, 인보이스 형식과 사용자 요구 사항이 변경됨에 따라 모델을 교체하거나 조정할 수 있습니다. 이 로컬 설정에서는 요청당 모델 API 요금이 없지만, 모델을 실행하는 데에는 여전히 하드웨어 및 전기 비용이 발생합니다. 공개 Render 데모는 샘플 워크플로우를 시도해 보는 편의 기능일 뿐이며, 실제 고객 인보이스를 처리할 사적인 공간은 아닙니다.
폴백 경로 역시 중요합니다. 기본 워크플로우는 계정, 네트워크 연결 또는 유료 모델 엔드포인트에 의존하지 않습니다. 오픈 도구(open tools) 덕분에 한 제공업체의 가격 책정이나 데이터 정책에 갇히는 대신 처리 경로를 검사하고 변경하는 것이 가능해집니다.
저는 경계를 명확하게 유지하겠습니다. 현재 앱은 로컬 Ollama 추론을 지원하지만, 제가 확인한 샘플 세션은 Ollama가 사용 불가능했기 때문에 결정론적 폴백(deterministic fallback)을 사용했습니다. 오픈 모델 경로의 경우, 폴백 대비 추출 품질이 개선되었다고 주장하기 전에 직접적인 테스트가 필요합니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기
