그래서 돈냥이한테 맡겼습니다. 돈냥이는 저희 AI 에이전트 팀에서 투자 자문위원 역할을 하는 에이전트예요. 투자 자문위원이 왜 가계부를? 지출을 파악해야 투자할 여력도 보이니까요.
첫 번째 설계 — 이메일로 받으면 되지 않을까
처음 돈냥이가 제안한 설계는 이랬습니다. 카드사 결제 알림을 이메일로 받고, Gmail에서 Google Apps Script로 파싱해서 구글시트에 자동으로 기입하는 방식. 깔끔했어요. 서버 사이드라 폰 OS에 상관없고, Apps Script는 무료니까요.
그런데 실제로 확인해보니 현대카드와 신한카드는 이메일 결제 알림을 보내지 않았습니다. 3개 중 2개가 안 되면 이 방식은 성립 불가. 설계는 가정 위에 서고, 가정은 검증 전까지 가정일 뿐이라는 걸 다시 한번 느꼈어요.
피벗 — SMS와 Mac의 만남
카드사가 공통으로 제공하는 건 SMS 결제 알림입니다. 문자는 세 카드사 다 보내요.
문제는 저는 아이폰을 쓴다는 거예요. iOS에서 문자를 프로그래밍적으로 읽는 건 불가능합니다. 애플이 허용하지 않아요. 여기서 막힐 뻔했는데, 한 가지 우회로가 있었습니다. 저는 Mac도 씁니다. iPhone과 Mac 사이에 iMessage/SMS 동기화를 켜두면, 문자가 Mac의 chat.db라는 SQLite 데이터베이스에 저장돼요.
경로가 보였습니다. SMS → Mac chat.db → Python 파싱 → Google Sheets API → 가계부 자동 기입. iOS의 벽을 Mac으로 우회하는 아이디어였어요.
구현 — 3개 모듈
돈냥이가 만든 시스템은 파일 세 개로 구성됩니다.
첫 번째는 parse_sms.py. Mac의 chat.db에서 현대카드 결제 문자를 읽어서 파싱합니다. 발신번호 15776200으로 필터링하고, "7,400원 일시불 / 04/22 12:43 / 현대백화점판교" 같은 문자를 날짜, 금액, 가맹점으로 분리해요. 마지막으로 처리한 메시지 위치를 기억해서 중복 처리도 방지합니다.
두 번째는 daily_check.py. 매일 크론으로 실행되는 체크 스크립트예요. 새 결제 내역을 확인하고 Slack 메시지로 포맷합니다. "어제/오늘 현대카드 결제 9건이에요!" 하면서 목록을 보내줘요. 제가 "1. 택시 2. 점심 3. 커피" 형식으로 답하면 각 결제에 내역이 매칭됩니다.
세 번째는 sheets.py. Google Sheets API로 가계부 시트에 기입하는 모듈입니다. 서비스 계정으로 인증하고, 월별 시트의 날짜·내역·금액·결제수단 열에 맞춰 데이터를 추가해요.
근데 간혹, 가맹점명만 써 있으면 어디에 쓴 건지 헷갈릴 때가 있잖아요. 그래서 AI가 결제 내역을 읽고 Slack으로 알려주면, 사람이 "뭐에 쓴 건지"만 한 줄 답하게 만들었어요. 가맹점명이 "백화점"라고 떠도 그게 점심인지 커피인지는 AI도 모릅니다. 사람의 판단이 필요한 부분만 사람이 하고, 나머지는 자동.