[바이브코딩 도전기] 직접 만든 NAS 가계부를 쓰면서 느낀 장점과 한계

시리즈를 시작할 때만 해도 “그냥 간단하게 만들자”는 생각이었다. 그런데 어느새 7편까지 왔다. 카드 내역 파싱, 월급 관리, 대시보드, 튜토리얼 툴팁, 아이콘 문제까지. 처음 예상보다 손이 훨씬 많이 갔다.

이번 글은 시리즈 마무리 겸 솔직한 후기다. 직접 만든 가계부가 실제로 어떻게 쓰이고 있는지, 어디서 편하고 어디서 불편한지 있는 그대로 적어보려 한다.


쓰면서 느낀 장점들

내 데이터가 내 서버에만 있다는 안도감

시중 가계부 앱을 쓸 때 가장 찜찜했던 건 카드 내역이 어디에 저장되는지 모른다는 점이었다. 지금은 NAS 안 SQLite 파일 하나에 전부 들어있다. 외부 서비스로 나가는 데이터가 없으니 마음이 편하다.

물론 NAS가 고장나거나 집 인터넷이 끊기면 접근 자체가 안 되는 단점도 있다. 하지만 그건 내가 감수하기로 한 트레이드오프다.

카드사별 청구월 로직을 내 상황에 맞게 짤 수 있었다

이게 생각보다 큰 장점이었다. 카드마다 결제일과 사용기간이 다르다. 예를 들어 어떤 카드는 매월 14일 결제인데, 전월 15일~당월 14일 사용분이 청구된다. 이걸 앱에서 자동으로 맞춰주는 서비스는 많지 않다.

카드사별로 결제일과 사용기간 오프셋을 설정해두면, 거래 날짜를 기준으로 어느 달 사용분인지 자동으로 재분류되도록 만들었다. 처음 이 로직을 적용했을 때 하나카드 거래 일부가 6월 내역에서 5월 사용분으로 옮겨갔다. 당황스럽기도 했지만, 실제로 맞는 분류였다. 시중 앱에서는 이런 세밀한 조정이 거의 불가능하다.

화면이 내 취향대로다

불필요한 배너, 추천 광고, 강제 업그레이드 팝업이 없다. 내가 보고 싶은 정보만 대시보드에 올려두면 된다. 대시보드 상세 모달도 필요하다 싶어서 붙였고, 카드 내역 필터에 기간 조건도 추가했다. 쓰다가 불편하면 바로 고칠 수 있다는 게 생각보다 쾌적하다.

일괄 수정 기능을 원하는 대로 만들 수 있다

카드 내역을 여러 건 선택해서 태그, 메모, 국내외 여부를 한 번에 바꾸는 기능을 만들었다. 해외 결제 내역이 몇십 건씩 들어오면 일일이 수정하는 게 고역인데, 체크박스로 전체 선택 후 일괄 처리가 되니까 훨씬 낫다.

체크박스 드래그 선택 구현할 때 첫 번째 행이 토글이 안 되는 버그가 있었다. mousedown 이벤트에서 직접 토글 처리를 따로 해줘서 해결했는데, 이런 자잘한 버그를 내가 직접 고칠 수 있다는 것도 장점이라면 장점이다.


솔직히 불편하거나 한계라고 느낀 점들

모바일 접근성이 아직 아쉽다

PWA로 홈 화면에 추가해서 쓰려고 했는데, iOS Safari에서 아이콘이 아예 안 나왔다. 알고 보니 apple-touch-icon은 SVG를 인식 못 하고 PNG가 필요했다. qlmanage와 sips로 180×180, 192×192, 512×512, 32×32 PNG를 만들고 manifest.webmanifest도 추가하고 나서야 정상적으로 표시됐다.

이런 식으로 플랫폼마다 신경 써야 할 게 생각보다 많다. 상용 앱이었으면 그냥 됐을 일이다.

초기 세팅 비용이 크다

카드 내역 CSV 파싱 규칙, 카드사별 오프셋 설정, 태그 체계 잡기까지 처음 세팅하는 데 시간이 꽤 걸렸다. 가족 중에 나 말고 다른 사람이 쓰려면 설명하기도 어렵다. 이건 어쩔 수 없는 한계다.

모듈 초기화 타이밍 문제가 종종 생겼다

대시보드, 월급, 카드 화면에서 연도·월 이동 버튼과 오늘 버튼이 가끔 반응을 안 하는 문제가 있었다. 원인은 모듈 초기화 타이밍이 맞지 않아서였다. 이벤트를 직접 바인딩하는 대신 이벤트 위임 방식으로 바꿨더니 안정됐다. 이런 종류의 버그는 쓰다가 갑자기 발견되는 경우가 많아서 피로감이 있다.

튜토리얼 툴팁이 엉뚱한 곳에 뜨는 문제

튜토리얼 하이라이트 요소 위에 툴팁이 가려지는 문제가 있었다. z-index와 stacking context 문제였는데, 툴팁 요소를 body 최상위로 분리하고 style.css에서 z-index와 visibility를 직접 조정해서 해결했다. 원인을 파악하고 나면 간단한 문제지만, 처음엔 왜 가려지는지 한참 헤맸다.


보안과 백업, 외부 접속에 대한 생각

NAS 가계부를 집 밖에서도 쓰고 싶다면 외부 접속 설정이 필요한데, 이 부분은 신중하게 접근하는 게 좋다. 포트를 직접 열어두는 방식은 가능하면 피하는 편이 낫다. VPN을 통해 접속하거나, 접근 가능한 IP를 제한하는 방식이 그나마 안전하다.

개인 금융 데이터가 들어있는 만큼 인증 없이 접근 가능한 상태는 절대 만들면 안 된다. 아무리 로컬 전용이라도 기본 인증 정도는 꼭 걸어두자.

백업도 중요하다. SQLite 파일 하나에 모든 데이터가 있으니, 정기적으로 다른 드라이브나 외부 저장소에 복사해두는 습관이 필요하다. NAS 자체가 RAID를 지원하더라도, RAID는 백업이 아니다. 실수로 파일을 지우거나 데이터가 꼬이면 RAID는 아무 소용이 없다.


월급 관리에서 추가한 것들

월급명세서 화면에서 정기급여 외에 수시로 들어오는 항목 이름을 직접 입력할 수 있게 했다. 처음엔 종류가 정해진 항목만 있었는데, 명절 상여나 프로젝트 수당처럼 이름이 제각각인 경우가 생기다 보니 필요해졌다. salary_records 테이블에 label 컬럼을 추가하고, API와 화면을 함께 수정했다.

이런 식으로 쓰다가 필요한 게 생기면 바로 추가할 수 있다는 게 직접 만든 앱의 핵심 장점이다. 상용 서비스에 “이 기능 추가해주세요” 문의를 넣어봤자 반영될 가능성은 거의 없다.


앞으로 고치고 싶은 것들

지금 당장 불편한 건 아니지만 언젠가는 손봐야 할 것들이 있다.

  • 카드 내역 CSV 파싱 규칙을 UI에서 직접 관리할 수 있게 만들고 싶다. 지금은 파일을 직접 수정해야 한다.
  • 월별 예산 대비 실적 비교 화면이 있으면 좋겠다. 지금은 지출 현황만 보인다.
  • 정기 지출 항목을 등록해두고 달마다 자동으로 입력되게 하는 기능도 있으면 편할 것 같다.
  • 모바일에서 입력 경험이 아직 데스크톱에 비해 떨어진다. 터치 영역이나 폼 UI를 더 다듬어야 한다.

욕심을 부리면 끝이 없다. 지금은 쓰는 데 불편함이 없는 수준이 됐으니 일단 여기서 멈추고, 실제로 쓰다가 불편한 게 생기면 그때그때 고치는 방식으로 유지할 생각이다.


시리즈를 마치며

처음 NAS에 가계부를 만들겠다고 했을 때 주변에서는 “그냥 앱 쓰면 되는데 왜 그렇게 복잡하게 하냐”는 반응이었다. 솔직히 그 말도 틀리지 않다. 만드는 시간 대비 효율만 따지면 상용 앱이 훨씬 낫다.

그런데 직접 만들면서 얻는 게 있다. 내 데이터가 어디에 있는지 안다는 것, 불편한 부분을 내가 고칠 수 있다는 것, 그리고 카드 청구월 분류처럼 내 상황에 딱 맞는 로직을 넣을 수 있다는 것. 이게 이 프로젝트를 계속 이어온 이유다.

완성도가 높은 앱은 아니다. 버그도 있었고, 지금도 있을 수 있다. 하지만 내가 쓰는 도구를 내가 이해하고 있다는 감각은 꽤 다르다.

시리즈 내내 읽어준 분들께 감사하다. 비슷한 걸 만들어보려는 분께 조금이라도 도움이 됐으면 좋겠다.


시리즈 글 모아보기

댓글 남기기