폰 결제 알림을 노션 가계부로 자동 기록하기 (3) — 노션을 대시보드로: 요약·규칙·기간 통계

기록만 쌓이면 안 본다. 노션 코드블록에 월간 요약을 자동으로 그리고, 분류 규칙을 노션 DB로 빼고, 동적 기간 통계를 이벤트형으로 갱신한 이야기. 한글 정렬 삽질 포함.

📌 card2notion 시리즈 (3/3) — 노션을 대시보드로. 1편 · 2편에서 이어진다.

기록만 쌓이면 안 본다

1·2편으로 폰 알림이 노션 가계부에 자동으로 쌓이게 됐다. 근데 줄만 쌓이면 결국 안 본다. 이번 달 얼마 썼고 얼마 모았는지가 한눈에 보여야 계속 보게 된다.

그래서 노션 Budget 페이지에 요약을 자동으로 그렸다. 이게 이 프로젝트에서 내가 제일 자주 보는 화면이다.

결과부터 — 매달 이렇게 그려진다

거래가 들어올 때마다 서버가 노션 코드블록 하나를 다시 그린다. (숫자는 예시)

📊 2026년 X월 가계부
수입      +0원
실지출    -540,000원
순저축    -540,000원

[지출]
식비    ██████████████████ 180,000원 (33%)
교통    ████████··········  95,000원 (18%)
카페    █████·············  60,000원 (11%)

📸 image.png

순저축·저축률·카테고리별 지출이 매달 자동으로 갱신된다. 손댈 게 없다.

숫자를 어떻게 계산하나

핵심은 유형별로 다르게 더하는 거다. 정산으로 받은 돈은 내 지출이 아니라 빼고, 부채상환은 소비가 아니라 저축의 일부로 본다.

if ttype == "이체":       continue            # 자기이체 등은 통계 제외
elif ttype == "수입":      income += amt
elif ttype == "정산입금":  settlement += amt   # 남이 정산으로 준 돈
elif ttype == "부채상환":  debt += amt         # 소비 아님(저축의 일부)
else:                      expense += amt      # 지출/취소

# 실지출 = expense - settlement
# 순저축 = income - 실지출

데이터가 실제로 바뀌었을 때만 다시 그린다. 안 그러면 노션 블록이 계속 깜빡인다.

sig = _summary_signature(agg, title)
if _summary_sig.get(page_id) == sig:
    return                     # 값이 안 바뀌면 노션을 건드리지 않는다

요약을 다시 그릴 때도 지우는 건 요약 블록뿐이다. DB나 다른 페이지는 절대 안 건드리게 막아뒀다. 자동화가 남의 데이터를 날리면 안 되니까.

분류는 코드가 아니라 노션에서

처음엔 “스타벅스 → 카페” 규칙을 코드에 하드코딩했다. 근데 자주 가는 가게가 바뀔 때마다 코드 고치고 재배포하는 게 번거로웠다.

→ 노션에 “카테고리 규칙” DB를 만들어 키워드→카테고리를 거기서 관리한다. 서버가 주기적으로 읽어온다. 이제 코드 안 건드리고 노션에서 분류를 바꾼다. 고정비/변동비 같은 성격도 여기서 덮어쓴다.

📸 image.png

기간을 내 맘대로 — 동적 기간 통계

“6월 1일~15일만 보고 싶다” 같은 걸 하려고 “기간 통계” DB를 만들었다. 행에 시작일·종료일만 넣으면 그 기간 요약이 행 본문에 자동으로 채워진다.

📸 image.png

📸 image.png

5분 폴링은 너무 굼떠서 20초마다 감시하는 워치 루프로 바꿨다. 행이 추가되거나 날짜가 바뀐 행, 진행 중인 기간만 다시 계산한다.

is_open  = end[:10] >= today                       # 오늘까지 포함 = 진행중 기간
changed  = _period_seen.get(page_id) != (start, end)
if not (changed or is_open):
    continue                                       # 안 바뀐 과거 기간은 건너뜀

노션 push 웹훅은 자체서명 인증서라 못 써서, 짧은 폴링으로 이벤트처럼 흉내 냈다.

삽질 한 스푼 — 한글은 칸이 안 맞는다

막대그래프 라벨을 공백으로 맞춰 정렬하려 했는데, 노션 코드블록 폰트에서는 한글 한 글자가 공백 두 칸과 정확히 안 맞는다. 표시폭을 직접 계산해 패딩해도 미세하게 삐뚤빼뚤했다.

표로도 만들어 봤지만 코드블록이랑 통일감이 떨어졌다. 결국 라벨을 왼쪽에 둔 코드블록으로 돌아왔다. 완벽한 정렬은 폰트 한계라 일부는 그냥 감수했다.

결과 & 회고

  • 돈 쓰면 몇 초 안에 노션 가계부에 자동 기록.
  • 이번 달 순저축·저축률·카테고리별 지출이 노션에서 바로 보인다.
  • 분류 규칙은 노션에서 내가 직접 관리.
  • 서버 비용 0원, 집 PC 도커.

✅ 평생 가계부 한 번 안쓰던 내가 하루에도 몇 번씩 노션에 들어가서 가계부를 확인하고 기록하게 됐다.

다음 개선

  • 카테고리가 많아질 때의 요약 가독성
  • 예산 대비 초과 경고
  • 새 카드·은행 알림 형식 대응 (이건 영원한 숙제ㅠㅠ)

이 시리즈는 개인 프로젝트 기록이다. 코드/구조는 계속 바뀔 수 있다.

댓글

익명 댓글입니다. 닉네임과 내용이 저장되며, 서로 존중하는 표현을 부탁드려요. 부적절하거나 광고성 댓글은 예고 없이 삭제될 수 있습니다.