![[AI 가계부] AI와 상담하며 가족 전용 가계부 시스템을 만들어 보았다 ② ~시스템 구성과 서비스 선정~ 대표 이미지](https://static.zenn.studio/images/drawing/discussion.png)
[AI 가계부] AI와 상담하며 가족 전용 가계부 시스템을 만들어 보았다 ② ~시스템 구성과 서비스 선정~
요약
Gemini API와 LINE을 활용하여 사용자의 입력 번거로움을 최소화한 가족 전용 AI 가계부 시스템의 구성 방식을 소개합니다. Cloud Functions와 Google Spreadsheet를 연동하여 영수증 이미지를 구조화된 데이터로 자동 변환하는 워크플로우를 구축했습니다.
핵심 포인트
- LINE을 인터페이스로 활용하여 가계부 입력의 심리적 장벽을 낮춤
- Gemini-1.5-flash-lite 모델을 사용하여 영수증 이미지의 구조화된 데이터 추출
- Cloud Functions를 통해 LINE, Gemini, Google 서비스 간의 로직 처리
- Human-in-the-loop 방식을 채택하여 데이터의 정확성 확보
서론
제1회에서는 가계부 시스템을 만들게 된 배경과, 완전 자동화가 아닌 Human-in-the-loop(인간에 의한 확인)를 채택한 이유에 대해 소개했습니다.
이번에는 실제로 어떤 기술을 조합하여 시스템을 구축했는지 소개합니다.
계속해서 비엔지니어 분들에게도 전달될 수 있도록 의식하며 작성하겠습니다.
이번에 사용한 주요 서비스는 다음과 같습니다.
- LINE
- Gemini API
- Google Spreadsheet
- Cloud Functions: Google Cloud 상에서 프로그램을 실행하는 환경
- LIFF (LINE Front-end Framework): LINE 앱 안에서 동작하는 Web 앱을 만들기 위한 메커니즘
- GAS (Google Apps Script): Google 서비스를 조작하기 위한 JavaScript 환경
- Looker Studio (데이터 포털): 스프레드시트 등과 연동할 수 있는 BI 툴
이렇게 정리해 보니 여러 서비스로 분산되었다는 인상이 드네요.
더 집약할 수도 있겠지만, Gemini와 상담하며 단계적으로 개발한 결과 이렇게 되었습니다.
비엔지니어 분들을 대상으로 쓴 직후이긴 합니다만, 거부감이 있는 분들은 이것만 봐도 싫어질 것 같네요..
참고로 GAS, LIFF, Looker Studio는 이번에 AI의 추천을 받아 처음 접해 보았습니다.
각 서비스의 역할은 다음과 같습니다.
1. 왜 LINE을 입구로 삼았는가
영수증 이미지를 AI가 처리한다고 생각했을 때, 우선 "이미지를 어떻게 AI에게 전달할 것인가"를 고민했습니다.
심플한 방법으로는 정해진 폴더에 이미지를 저장하고, 그 폴더를 감시하여 AI 처리를 실행하는 메커니즘이 있습니다.
하지만 이 방법은 인간 측의 조작으로서,
촬영
↓
이미지 복사
↓
지정 폴더로 저장
↓
AI 처리 실행
과 같이 다소 번거로워지며, 그것은 싫다고 느꼈습니다.
가계부가 지속되지 않는 큰 이유는 "입력이 귀찮다"는 점입니다.
따라서 등록 내용을 확인하는 작업과는 달리, AI에 의한 처리 시작까지의 조작은 최대한 줄이고 싶다고 생각했습니다.
이상적인 흐름은,
촬영
↓
AI 처리 시작
입니다.
그래서 평소에 이용하고 있는 LINE을 입력 인터페이스로 이용하기로 했습니다.
LINE을 입구로 함으로써 새로운 앱을 열거나 정해진 장소에 파일을 저장하는 번거로움을 없애고, 가계부 입력까지의 심리적 장벽을 낮추는 것을 목표로 했습니다.
또한 LINE을 이용함에 따라 리치 메뉴(Rich Menu)도 정비했습니다.
그래프 참조나 카메라 실행 등이 가능하도록 하여 조금이라도 사용하기 편하게 만드는 것을 의식했습니다.
2. Gemini API를 통한 영수증 해석
이번에 영수증 이미지 해석에는 Gemini API를 이용했습니다.
사용한 모델은 gemini-3.1-flash-lite입니다.
고성능 모델도 검토했지만, 이번에 필요했던 영수증 이미지에서 상품명·금액·카테고리를 읽어내는 용도로는 Flash-Lite로 충분했습니다.
또한 단순히 글자를 읽는 것뿐만 아니라,
영수증 이미지
↓
Gemini API
↓
구조화 데이터 (Structured Data)
라는 흐름으로 처리하고 있습니다.
AI는 이미지의 이해와 상품 분류를 수행하고, 후속 처리에서 다루기 쉬운 데이터 형식으로 출력하도록 설계했습니다.
참고로 고성능 모델 쪽의 출력 결과가 오히려 부정확했습니다. 프롬프트(Prompt)를 잘 만들었다면 달랐을지도 모르지만, 용도에 맞는 모델을 선택하는 것이 중요하네요.
3. Cloud Functions의 역할
LINE에서 보낸 이미지를 Gemini에게 전달하거나, 해석 결과를 저장하는 처리는 Cloud Functions에서 실행하고 있습니다.
담당하고 있는 처리는,
- LINE으로부터 전달된 이미지를 받음
- Gemini API로 이미지를 전송
- 해석 결과를 스프레드시트의 임시 저장 시트에 기록
- LINE으로 처리 완료 메시지를 통지
와 같은 시스템 전체의 제어 부분입니다.
Cloud Functions는 필요할 때만 사용할 수 있는 일시적인 PC와 같습니다.
이벤트가 발생하면 기동하여 처리를 수행하고, 처리가 끝나면 역할을 마칩니다.
가계부 등록 빈도는 많아도 하루에 몇 번 정도이므로, 상시 동작하는 서버를 준비하는 것보다 필요할 때만 동작하는 Cloud Functions가 이번 용도에는 적합하다고 판단했습니다.
4. Spreadsheet를 데이터베이스로 이용
가계부 데이터의 저장소로는 본격적인 데이터베이스(Database)가 아닌 Google Spreadsheet를 채택했습니다.
이유는 간단합니다.
- 무료로 사용할 수 있다
- 브라우저에서 내용을 직접 확인할 수 있다
- 수동으로 수정하기 쉽다
- 그래프나 집계 기능이 충실하다
- 원래 가계부를 스프레드시트(Spreadsheet)로 관리하고 있었다
그리고 무엇보다, 제가 데이터베이스에 익숙하지 않았습니다
때문입니다.
Notion 등도 후보로 추천받았지만, 이번에는 '데이터를 저장하는 것'이 목적이었기에 새로운 도구를 배우는 비용보다 익숙한 스프레드시트를 선택했습니다.
결과적으로 시트 수는 생각보다 늘어났지만, 각각 AI 분석 결과의 임시 저장, 확정 데이터, 집계용 데이터 등 용도별로 시트를 나누어 관리하기 쉽게 만들 수 있었다고 생각합니다.
솔직히 "스프레드시트를 데이터베이스로 사용하는 것이 맞느냐"라는 의견도 있을 것이고, 제대로 된 데이터베이스를 사용하는 편이 시스템으로서도 더 멋질 것이라고 생각합니다. 다만, 개인 개발이기 때문에 기술적으로 최적인 것보다 오래 사용하기 편한 것이 더 중요하다고 판단했습니다.
5. LIFF를 통한 확인 화면
제1회에서도 썼듯이, AI 분석 후 바로 가계부에 등록하는 것이 아니라 한 번 확인 화면을 거치도록 설계했습니다.
처음에는 AI가 읽어들인 내용을 LINE 메시지로 답장받고, 그에 답변하는 형태로 수정할 수 있게 할까 생각했습니다.
하지만 다음과 같은 문제가 있었습니다.
- 상품 수가 많을 경우, 메시지 형식으로는 확인하기 어렵다
- 카테고리 입력의 표기 불일치(表記揺れ)를 방지할 필요가 있다
- 수정 처리를 위해 추가적인 AI 판정을 도입해야 할 가능성이 생긴다
그래서 LINE 내에서 웹 페이지를 표시할 수 있는 LIFF를 이용하기로 했습니다.
LIFF는 LINE에서 웹 페이지를 열 수 있는 기능이며, LIFF를 통해 임시 저장된 분석 결과를 목록으로 표시하고 사람이 내용을 확인 및 수정할 수 있습니다.
LINE의 간편함을 유지하면서도 편집 화면으로서 필요한 자유도를 확보할 수 있다는 점이 장점이었습니다.
6. GAS를 통한 확정 등록
LIFF에서 확인 및 수정한 데이터는 GAS를 경유하여 정식 가계부 데이터로 등록합니다.
이번 역할은 간단합니다.
LIFF
↓
GAS
↓
Spreadsheet (명세)
라는 가교 역할을 담당하고 있습니다.
Cloud Functions 측에서 등록 처리를 수행하는 방법도 생각해보았지만, Spreadsheet 조작과의 궁합 및 구현의 용이성 때문에 GAS를 채택했습니다.
7. Looker Studio를 통한 시각화
등록된 가계부 데이터는 Looker Studio와 연동하여 그래프화하고 있습니다.
이번 목적은 고도의 분석이 아니라,
- 월별, 연도별 지출 추이
- 카테고리별 비율
을 간단히 확인할 수 있도록 하는 것입니다.
가계부를 다시 살펴볼 때마다 스프레드시트를 매번 여는 것은 번거롭고, 스마트폰에서 스프레드시트를 열면 보기 불편하다는 단점도 있기 때문에 대시보드를 통한 시각화를 선택했습니다.
요약
이번에는 가계부 시스템을 구성하는 각 서비스와 그 선정 이유에 대해 소개했습니다.
언뜻 보면 많은 서비스를 조합하고 있어 복잡해 보일지도 모릅니다.
하지만 각각을 하나의 커다란 시스템으로 만드는 것이 아니라,
- LINE: 입력 장벽을 낮춤
- Gemini: 이미지 이해 및 분류를 담당
- Cloud Functions: 처리 흐름을 제어
- Spreadsheet: 데이터를 관리
- LIFF: 사람이 확인하기 쉬운 화면을 제공
- GAS: Google 서비스 간을 연결
- Looker Studio: 축적된 데이터를 시각화
하는 방식으로, 각각의 특기 분야를 조합하고 있습니다.
이번 개발을 통해 느낀 점은, 생성 AI 시대의 개인 개발은 허들이 상당히 낮아졌다는 것입니다.
편리한 서비스는 무수히 제공되고 있으며, 생성 AI와 상담하며 이들을 조합함으로써 개인이라도 실용적인 시스템을 단기간에 구축할 수 있다고 느꼈습니다.
한편, AI에게 모든 것을 맡기기만 하면 되는 것은 아닙니다.
제1회에서도 썼듯이, 중요한 것은 "AI에게 무엇을 맡길 것인가", "사람이 어디서 확인할 것인가"라는 역할 분담이라고 느꼈습니다.
다음 회차에서는 실제 구현 내용이나 고안한 점, 화면 이미지 등을 소개할 수 있으면 좋겠습니다.
※ 이 기사도 ChatGPT를 통해 초안을 작성했습니다.
이하는 일본어 기사를 수작업으로 영어로 옮기고, ChatGPT가 수정한 영문입니다.
English Summary
이 기사는 AI 기반 가계부 시스템의 개발 로그입니다.
두 번째 기사에서는 시스템 구성 요소(LINE, Gemini API, Cloud Functions, Google Spreadsheet, LIFF, GAS, Looker Studio)를 소개하고, 왜 이러한 서비스들을 선택했는지 설명합니다.
기존 서비스들을 결합함으로써, 개인 개발자도 짧은 시간 안에 실용적인 시스템을 구축할 수 있습니다.
이 기사에서는 서비스 선정의 이유와 이러한 구성 요소들이 어떻게 함께 작동하는지에 대해 기술합니다.
논의 (Discussion)

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