Skip to content

About

생활비 변화의 원인을 설명하고 다음 소비를 설계하는 AI 생활금융 Agent

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

머니센스 MoneySense

생활비 변화의 원인을 설명하고 다음 소비를 설계하는 AI 생활금융 Agent

카드내역만으로는 알 수 없는 품목 정보의 복원부터 원인 진단, 절약분의 적금 전환과 지역상생 소비 제안까지 — 역할별 전문 AI Agent들이 협업하는 멀티 Agent 생활금융 서비스

제4회 iM:POSSIBLE Challenger 출품작 · 팀 페이키퍼(PayKeeper)

배포 링크

https://moneysense-tau.vercel.app/

  • 데스크톱: 왼쪽 휴대폰 프레임에서 실제 앱을 조작하고, 오른쪽 패널에서 화면별 설명을 함께 볼 수 있습니다.
  • 모바일: 앱이 화면 전체를 사용합니다.

문제 정의

기존 금융 앱은 사용자가 어디서 얼마를 썼는지 보여주는 데는 강합니다. 하지만 사용자가 실제로 알고 싶은 것은 "왜 생활비가 올랐는지" 입니다.

카드·계좌 내역에는 iM마트 41,000원처럼 가맹점명과 총액만 남습니다. 그 안에서 우유를 샀는지, 즉석식품을 샀는지, 어떤 품목의 가격이 올랐는지 — 생활비 상승의 실제 원인은 데이터에서 사라집니다.

이 문제는 모두에게 공평하지 않습니다. 생활물가 상승의 타격이 가장 큰 계층 — 고령층, 저소득 가구, 1인 가구 — 일수록 가계부 앱을 분석하고 소비 데이터를 해석할 여력이 적어, "왜 올랐는지"를 아는 것 자체가 격차가 됩니다. 머니센스는 온도 하나와 원인 카드 4장이라는 설명 가능한 형태로 소비 분석을 제공해, 금융 이해력과 무관하게 누구나 자기 생활비를 이해할 수 있게 하는 포용금융 도구를 지향합니다.

핵심 차별점

머니센스는 영수증을 자동 입력하는 가계부가 아닙니다. 카드내역이 잃어버린 품목 정보를 복원해 생활비 변화의 원인을 설명하는 AI 생활금융 Agent입니다.

기존 가계부/OCR 앱 머니센스
영수증을 읽고 지출을 기록 영수증과 거래내역을 연결
어디서 얼마 썼는지 확인 무엇을 샀는지 품목 정보 복원
카테고리별 소비통계 제공 생활비 변화의 원인분해
예산 초과 여부 확인 다음 장보기 플랜과 지역상생 전환 제안

주요 기능

입력

  • 영수증 추가: 샘플 영수증 3종(품목형 / 합계형 / 카드매출전표형) 선택 또는 영수증 사진 업로드
  • 영수증 사진 AI 인식: 업로드하면 LLM Vision이 날짜·상호·품목·금액을 인식하고 카테고리까지 분류. 저장 전 확인/수정 화면 제공, 인식 실패·영수증 아님·키 미설정 시 정직한 안내와 함께 직접 입력 유도. 업로드된 이미지는 저장하지 않으며 인식 처리 후 즉시 폐기
  • 직접 지출 입력: 날짜·상호·소비처 유형·결제수단·품목·메모 입력, 저장 시 확인 모달
  • 직접 입력 품목 AI 분류: 품목 추가 시 LLM 분류를 시도하고(키 없음·오류·타임아웃 시 룰 기반 폴백), 분류 출처를 "AI 분류"/"룰 기반" 배지로 표시
  • 빠른 금액 버튼: +1천원 ~ +10만원 버튼 누적 입력 + 초기화 (품목 금액 입력에도 재사용)
  • 합계형 영수증 품목 직접 추가: 총액만 인식된 영수증에 품목을 채워 분석 정확도 향상
  • 카드·계좌 거래내역: 샘플 불러오기 + 직접 추가
  • 영수증 사후 편집/삭제: 수정하면 매칭·분석 자동 재계산

분석 (4단계 리포트)

  • 영수증-거래내역 매칭: 금액(45)·날짜(25)·상호명(20)·결제수단(10) 점수제 매칭, "확인 필요" 건은 사용자가 직접 확정/거절
  • 품목 정보 보강: 총액만 남은 카드내역에 영수증 품목을 연결 (품목 보강 상태)
  • 생활비 온도: 기본 35℃ + 가산 요인으로 0~100℃ 계산 (안정/관심/주의/뜨거움)
  • 온도 계산 근거: "왜 이 온도인가요?" — 요인별 가산값의 합계가 곧 온도임을 시각화
  • 지난 소비 vs 이번 소비 비교: 편의점 식비·대표 품목 가격·간편식 횟수·지역가게 비중
  • 생활비 원인분해: 가격 상승 / 구매량 증가 / 소비처 변화 / 조정 가능한 소비 4개 카드 (절약한 주에는 절약 관점으로 자동 전환)
  • 단위가격 파수꾼 (슈링크플레이션 감지 v0): 동일 품목의 단위가격(원/g·원/ml)이 이전 기록보다 5% 이상 오르고 표시 가격은 같거나 내린 경우를 실질 인상으로 고지. 용량 정보가 없는 품목은 추정하지 않고 감지 대상에서 제외를 명시하며, 감지 분모(용량 정보가 있는 품목 수)를 함께 노출. v0은 고지 전용으로 생활비 온도 계산에는 반영하지 않음
  • 다음 장보기 플랜: 예상 절약 포인트 + 지역상생 전환 제안 — 신선식품·기본 식재료 등 대체 가능한 품목의 금액만 전환 대상으로 계산해 근거(품목·금액)를 함께 표시
  • 발표용 요약 카드: "총액만 남은 카드내역 → 품목 복원 → 원인 → 다음 행동" 흐름을 3문장으로 자동 생성

기타

  • 지출 증가 데모(77℃ 주의)와 지출 절약 데모(36℃ 안정) 두 가지 샘플 시나리오
  • 주간 마감: 이번 주 기록을 다음 주 비교 기준으로 저장 (내 기록 기반 비교)
  • localStorage 저장으로 새로고침 후에도 데이터 유지

AI Agent 흐름

flowchart TD
  A[영수증 / 직접 입력] --> B[OCR·입력 보완 Agent]
  B --> C[거래내역 매칭 Agent]
  C --> D[품목 분류 Agent]
  D --> E[생활비 온도 Agent]
  E --> F[원인분해 Agent]
  F --> G[다음 장보기 플랜 Agent]
Loading
Agent 역할 현재 구현 (lib/services/ai.ts)
OCR·입력 보완 영수증에서 품목·금액 추출, 흐릿하면 직접 입력 유도 parseReceiptImageWithVision — 업로드 사진은 LLM Vision 인식(ANTHROPIC_API_KEY 설정 시), 실패 시 직접 입력 유도. 샘플 영수증은 mockParseReceipt
거래내역 매칭 금액·날짜·상호·결제수단 점수제로 영수증과 거래 연결 matchReceiptsToTransactions, applyMatchOverrides
품목 분류 품목을 필수식료품/간편식/간식·음료 등으로 분류 classifyItemWithLLM — 직접 입력 품목은 LLM 분류(ANTHROPIC_API_KEY 설정 시), 키 없음·오류·3초 타임아웃 시 classifyItem(룰 기반) 폴백
생활비 온도 가산 요인을 합산해 0~100℃ 온도 계산 calculateTemperature, buildTemperatureBreakdown
원인분해 상승(또는 절약) 원인을 4가지로 분해하고 지난 소비와 비교 analyzeCauses, buildComparisons
장보기 플랜 절약 + 지역상생 전환 제안, 발표용 요약 생성 generateActionPlans, generatePresentationSummary

현재 MVP는 mock adapter와 계산 로직으로 Agentic workflow의 골격을 검증한 뒤, 영수증 Vision OCR과 직접 입력 품목 분류를 실제 LLM 호출로 교체했습니다(폴백: 샘플/룰 기반). 나머지 Agent도 함수 시그니처를 유지한 채 내부만 교체하면 확장됩니다. (자세한 내용: docs/architecture.md)

룰 기반이 실제 품목명·가맹점명 앞에서 어디서 무너지고, 각 Agent를 어떤 프롬프트로 교체할지는 docs/prompt-blueprint.md에 설계했습니다. 원칙은 "숫자는 코드가, 언어는 LLM이" — 온도·매칭 점수 같은 수치는 결정적 코드가 계산하고, LLM은 분류·문장·문맥만 담당해 환각을 구조적으로 차단합니다.


데모 시나리오

  1. 홈에서 "지출 증가 데모" 를 실행합니다.
  2. 카드내역에 iM마트 41,000원, 미소24(편의점) 13,800원이 총액만 남아 있습니다.
  3. 영수증을 연결해 우유·계란·세제·즉석식품, 컵라면·에너지드링크·삼각김밥·과자 등 품목 정보가 보강됩니다.
  4. 샛별시장(동네시장) 22,000원 현금 소비는 거래내역에 없어 직접 입력 소비로 처리됩니다.
  5. 생활비 온도 77℃(주의) 와 계산 근거(기본 35℃ + 단가 상승 +10℃ + 간편식 증가 +8℃ …)를 확인합니다.
  6. 지난 소비와의 비교, 원인분해 4개 카드를 확인합니다.
  7. 다음 장보기 플랜과 지역상생 전환 제안(대체 가능한 품목 계란·우유 등 11,000원 기준, 동네시장 비중 29% → 약 42%)을 확인합니다.

"지출 절약 데모" 를 실행하면 반대로 지난주보다 28,000원을 아낀 주(36℃ 안정)의 절약 요인 분석을 볼 수 있습니다.


상생·포용금융 기여

머니센스의 지역상생 제안은 "아껴라"가 아니라 "같은 예산을 어디에 쓸지 바꾸자" 입니다. 사용자가 아낀 돈과 옮긴 소비가 지역경제로 순환하는 구조입니다.

flowchart LR
  A[생활비 원인분해] --> B[대체 가능 품목 식별<br/>계란·채소 등 신선식품]
  B --> C[동일 예산 내<br/>동네시장 전환 제안]
  C --> D[지역 소상공인<br/>매출 증가]
  D --> E[지역상권 활성화]
  E -.->|시장 물가·상품 데이터| A
  C --> F[개인: 생활비 절약<br/>+ 지역상생 비중 상승]
Loading
  • 개인: 편의점 간편식을 줄이고 신선식품 장보기로 바꾸면 생활비 온도가 내려갑니다.
  • 지역: 그 장보기가 전통시장·동네가게에서 일어나면 지역 소상공인 매출로 이어집니다.
  • 선순환: 지역상권이 활성화될수록 시장 물가·상품 데이터가 풍부해져 제안의 정확도가 다시 올라갑니다.

포용 관점에서는, 설명 가능한 소비 분석(온도 + 원인 카드)이 금융 이해력 격차를 줄이는 장치입니다. 복잡한 차트 대신 "계란이 700원 올랐어요"처럼 품목과 원인으로 말하는 리포트라서, 금융 데이터 해석에 익숙하지 않은 사용자도 바로 이해할 수 있습니다.

규제 준수: 금융 데이터 연동은 마이데이터 표준 API 기반(스크래핑 미사용)으로 설계하며, 전송요구권에 따른 사용자의 명시적 동의 흐름을 전제합니다. 업로드된 영수증 이미지는 저장하지 않으며 인식 처리 후 즉시 폐기됩니다.


iM뱅크 비즈니스 가치

머니센스는 조언에서 끝나지 않고 iM뱅크의 금융 상품으로 이어지는 구조를 갖습니다.

연결 고리 구조 iM뱅크 효과
머니센스 챌린지 적금 플랜이 제안한 예상 절약액(예: 8,000원)을 버튼 하나로 소액 적금에 자동이체 조언 → 저축 전환으로 수신 증대, 매주 절약 미션으로 앱 재방문 락인
지역상생 카드 연계 전통시장 전환 제안 시 대구로페이·iM뱅크 지역 활성화 카드 결제 혜택 안내 카드 발급 유도, 결제 수수료 수익, 지역 기반 은행 정체성 강화
마이데이터 락인 주간 마감으로 쌓이는 개인 비교 기준(UserBaseline)은 쓸수록 분석이 정확해지는 데이터 자산 사용 기간에 비례해 이탈 비용 증가 — 옮기면 "내 기준 데이터"를 잃음

절약 조언 앱은 많지만, 절약액이 그 자리에서 저축으로 전환되는 앱은 은행만 만들 수 있습니다. 현재 MVP의 STEP 4 플랜 화면에는 이 흐름을 보여주는 mock CTA("아낀 돈 적금하기")가 들어 있으며, 실제 서비스에서는 iM뱅크 적금 계좌 개설·자동이체 API로 연결됩니다.


기술 스택

  • Next.js 15 (App Router) + React 19 + TypeScript 5
  • Tailwind CSS 4
  • lucide-react (아이콘)
  • localStorage (DB 없이 상태 저장)
  • LLM Vision OCR + 품목 분류 (Anthropic API — 영수증 사진 인식과 카테고리 분류, 폴백: 룰 기반)
  • AI Agent adapter (lib/services/ai.ts — Vision OCR·품목 분류는 실호출, 나머지 분석 로직도 같은 구조로 교체 가능)
  • Vercel (배포)

프로젝트 구조

app/                  # Next.js App Router (레이아웃, 페이지, 전역 스타일)
components/           # UI 컴포넌트
  MoneySenseApp.tsx   #   앱 본체 (탭 네비게이션 + 전역 상태 + localStorage)
  ShowcaseLayout.tsx  #   데스크톱: 휴대폰 프레임 + 설명 패널 레이아웃
  ShowcasePanel.tsx   #   화면 연동형 설명 패널 (데스크톱 전용)
  ...                 #   입력 폼, 매칭 결과, 온도/원인/플랜 카드 등
lib/
  types.ts            # 핵심 데이터 타입 (Receipt, Transaction, AnalysisResult 등)
  mockData.ts         # 샘플 데모 데이터 (증가/절약 시나리오)
  labels.ts           # enum 값 → 한국어 라벨 매핑
  services/
    ai.ts             # AI Agent 함수 모음 (Vision OCR·LLM 분류는 실호출, 일부는 mock adapter)
public/               # 정적 리소스
docs/                 # 아키텍처, 확장 계획

실행 방법

npm install
npm run dev     # 개발 서버 (http://localhost:3000)
npm run build   # 프로덕션 빌드
npm run lint    # ESLint 검사

영수증 사진 AI 인식과 LLM 품목 분류를 켜려면 .env.example을 .env.local로 복사하고 ANTHROPIC_API_KEY를 넣으세요. 키가 없어도 앱은 죽지 않습니다 — 사진 인식은 정직한 안내와 함께 샘플/직접 입력으로 유도하고, 품목 분류는 룰 기반으로 폴백합니다 (샘플 데모는 네트워크 없이도 재현됩니다).


현재 MVP 범위

영역 현재 MVP 실제 서비스 확장
영수증 인식 LLM Vision OCR (폴백: 직접 입력) 전자영수증 제휴 연동으로 무입력 자동화
카드·계좌 내역 샘플 거래내역 금융 API / 마이데이터 연동
품목 분류 룰 기반 + 직접 입력 품목 LLM 분류(폴백: 룰 기반) LLM 분류 Agent 전면 적용
원인분해 계산 로직 기반 개인화 분석 Agent
장보기 플랜 mock AI 제안 LLM 추천 Agent
데이터 저장 localStorage DB / 사용자 계정 기반 저장

향후 고도화

  • 입력 자동화 3단계: 종이 영수증 OCR(과도기) → 네이버·카카오 전자영수증, 대형마트 앱 영수증 연동 → 마이데이터 결합 무입력(zero-input) 자동 매칭
  • 금융 마이데이터/카드 API 연동
  • LLM 기반 품목 분류 및 요약 생성 (프롬프트 설계도)
  • 개인별 반복 구매 품목 기반 생활비 온도 개인화
  • 지역상권 데이터 연동
  • 사용자별 예산/소비패턴 기반 맞춤 플랜

자세한 확장 계획은 docs/mvp-vs-production.md를 참고하세요.


문서


기존 금융 앱은 어디서 얼마를 썼는지 보여줍니다. 머니센스는 영수증으로 무엇을 샀는지 복원하고, 생활비 변화의 원인을 설명하며, 다음 장보기 플랜까지 제안합니다.

About

생활비 변화의 원인을 설명하고 다음 소비를 설계하는 AI 생활금융 Agent

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages