본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 06. 15. 15:32

지출 추적기에 데이터를 입력하는 게 지겨워져서, 스스로 데이터를 입력하는 앱을 만드는 데 몇 년을 보냈습니다

요약

수동 지출 입력의 번거로움을 해결하기 위해 AI 기반 개인 금융 앱 'FinMan'을 개발한 과정을 다룹니다. API 통합, AI를 활용한 은행 명세서 자동 파싱, 사진 기반 데이터 추출 등 자동화 기술을 통해 금융 관리를 혁신한 사례를 소개합니다.

핵심 포인트

  • Webhook API를 활용한 실시간 결제 데이터 자동 수집
  • AI를 이용해 다양한 형식의 은행 명세서를 인식하는 추출 엔진 구축
  • 사진(계량기, 영수증)을 통한 공공요금 및 차량 유지비 자동 입력
  • 입력 자동화가 사용자 지속성을 결정하는 핵심 요소임

요약(TL;DR): 저는 FinMan을 만들었습니다. AI를 통해 어떤 은행 명세서든 가져오고, Telegram/WhatsApp 봇으로 전송된 사진에서 공공요금 계량기 및 연료 영수증을 읽으며, 내 차의 1km 주행 비용이 실제로 얼마인지 알려주는 무료 개인 금융 앱입니다. 이 프로젝트는 Perl 스크립트로 시작되었습니다. 그 과정에서 배운 점들을 소개합니다.

제가 시도했던 모든 금융 앱의 문제점

저는 그저 제 돈이 어디로 가는지 알고 싶었을 뿐입니다. 단순한 바람이죠, 그렇지 않나요?

인기 있는 추적기들을 사용해 보았습니다. 하지만 모든 앱이 똑같은 방식으로 저를 실망시켰습니다. 바로 **너무 많은 수작업 (manual work)**이 필요하다는 점이었습니다. 모든 지출을 수동으로 입력해야 했습니다. 카테고리를 설정하는 데만 한 시간이 걸렸습니다. 그리고 대부분의 앱은 온라인 카드 결제를 자동으로 인식하지 못했습니다. 정작 제 돈의 대부분은 그곳에서 나가고 있었는데 말이죠.

어느 순간 저는 재정 상태를 이해하는 시간보다 추적기에 데이터를 입력하는 데 더 많은 시간을 쓰고 있다는 사실을 깨달았습니다. 그래서 개발자답게 행동했습니다. 직접 만들기로 한 것입니다.

첫 번째 버전은 영광스러울 정도로 구식 이었습니다. 백엔드(backend)는 Perl, 프론트엔드(frontend)는 순수 HTML과 JavaScript로 구성되었습니다. 못생겼지만, 제 것이었습니다. 그리고 세련된 앱들이 하지 못한 한 가지를 해냈습니다. 바로 제가 사는 방식대로 작동한다는 것이었습니다.

돌파구 #1: 스스로 기록되는 지출

첫 번째 진짜 승리는 **Monobank의 웹훅 API (webhook API)**를 통합한 것이었습니다. 카드로 결제하면 1초 뒤에 금액, 가맹점, 카테고리가 제 앱에 나타납니다. 타이핑할 필요도, 잊어버릴 일도 없습니다. 처음으로 제가 아무것도 하지 않고도 지출 현황을 완벽하게 파악할 수 있게 되었습니다.

그것이 이후 모든 것의 설계 원칙이 되었습니다. 만약 어떤 작업에 절제력이 필요하다면, 그것은 결국 실패할 것입니다. 입력을 자동화하십시오.

돌파구 #2: 은행 파서(parser)를 만드는 대신, AI가 명세서를 읽게 하라

다른 은행들은 명세서 가져오기를 의미했습니다. 각 은행은 저마다의 형식을 가지고 있습니다. 여기서는 CSV, 저기서는 PDF, 서로 다른 열(column), 서로 다른 날짜 표기법 등 말이죠. 저는 Privatbank, PUMB, Raiffeisen, Revolut, Wise, Erste, N26... 등 수많은 파서(parser)를 작성했습니다.

결국 저는 지쳐버렸고 다른 메커니즘을 구축했습니다. 바로 AI가 이전에 본 적 없는 명세서(statement)의 구조를 인식하는 선언적 추출 엔진(declarative extraction engine)입니다. 오늘날 FinMan은 어떤 명세서든 가져올 수 있습니다. 새로운 은행이 생겼나요? 새로운 코드는 필요 없습니다.

기술적 교훈: 어려운 부분은 AI가 아니었습니다. 재수입(re-imports) 시 거래가 중복되지 않도록 하는 안정적인 결제 ID(payment IDs)와 행(row)별 통화 처리(currency handling)였습니다. 지루한 부분이 언제나 가장 어려운 법입니다.

돌파구 #3: 카메라는 최고의 입력 장치입니다

두 가지 월간 의례가 조용히 제 저녁 시간을 갉아먹고 있었습니다:

공공요금 계량기. 계량기를 읽고, 지난달 수치를 빼고, 요율을 곱하고, 서비스별로 반복합니다. 이제는: 계량기 사진 → 봇 → AI가 숫자를 읽고, 어떤 공공요금 서비스인지 인식하며, 차액과 납부 금액을 계산합니다.

자동차 비용. 저는 항상 실제 수치를 알고 싶었습니다. 연료비 vs 수리비 vs 유지비를 분리하여 킬로미터당 비용이 얼마인지 말이죠. 이제는: 연료 영수증 사진 + 주행거리계(odometer) 사진 → 앱이 연비(L/100km 또는 MPG)와 km/mile당 비용을 계산합니다.

흥미로운 엔지니어링 요소는 **2단계 인식 파이프라인(two-phase recognition pipeline)**입니다. 1단계는 사진을 분류(계량기? 연료 영수증? 주행거리계?)하는 범용 프롬프트(universal prompt)이며, 2단계는 해당 유형에 특화된 프롬프트를 실행합니다. 하나의 봇으로, 사진을 보내기 전 탐색해야 할 메뉴가 전혀 없습니다.

그리고 로직이 봇이 아닌 코어(core)에 존재하기 때문에, Telegram 옆에 WhatsApp(Meta Cloud API를 통해)을 추가하는 것은 대부분 라우팅(routing)의 문제였습니다. 두 봇은 동일한 흐름(flows)을 공유합니다.

돌파구 #4: 거짓말하지 않는 숫자들

두 가지 작은 기능이 정직한 분석을 위해 가장 중요한 것으로 밝혀졌습니다:

  • 저장된 환율을 활용한 다중 통화(Multi-currency). 제 현지 통화는 항상 안정적이지 않았기에, 이를 기준으로 3월과 10월을 비교하는 것은 의미가 없었습니다. 모든 결제는 해당 환율을 유지하며, 분석은 어떤 기간이든 안정적인 통화로 볼 수 있습니다.
  • 제외된 카테고리(Excluded categories). 비즈니스 프로젝트와 투자는 가계 총계에 섞이지 않지만, 여전히 별도로 분석할 수 있습니다. 일상적인 지출은 읽기 쉬운 상태로 유지됩니다.

개인용 도구에서 제품으로

지난해 저는 모든 것을 현대적인 스택(stack)으로 재구축했습니다 — 백엔드는 FastAPI + SQLAlchemy 2.0 async, 프론트엔드는 Vue 3 + TypeScript를 사용했습니다 — 여기에 가족 그룹(역할 기반의 공유 예산), 임대인을 위한 테넌트 모드(임차인이 계량기 사진을 보내면 임대인이 관리), 그리고 제품을 20개 이상의 언어로 현지화하는 AI 지원 번역 파이프라인을 추가했습니다.

핵심 기능은 무료입니다. 이 도구는 무료로 탄생했습니다 — 처음에는 저 자신을 위해 만들었으며, 지금도 모든 기능은 그런 방식으로 테스트됩니다.

체험하기: finman.vhworx.com · 전체 이야기 · GitHub에서 피드백 및 로드맵 확인

당신의 삶에서 가장 자동화하고 싶은 단 하나의 수동 루틴(manual routine)은 무엇인가요? 이 프로젝트 전체는 바로 그 질문에서 시작되었습니다.

AI 자동 생성 콘텐츠

본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0