3개월 전에 NAS 위에 간단한 가계부 웹앱을 올렸다. 처음엔 수입·지출 항목을 입력하고 월별 합계를 보는 수준이었는데, 막상 매일 쓰다 보니 불편한 부분이 하나씩 눈에 들어왔다. 기능을 추가하거나 고칠 때마다 Claude Code를 열어서 수정했고, 그 과정에서 바이브코딩 방식의 유지보수가 어떤 느낌인지 조금씩 감이 잡혔다. 완성된 결과물이 아니라 진행 중인 기록이다.
처음 3주, 가장 먼저 손댄 부분
초기 버전에서 제일 먼저 문제가 된 건 카테고리였다. 처음엔 식비, 교통, 기타 세 개만 만들었는데 실제로 쓰다 보니 구분이 너무 뭉개졌다. 구독 서비스, 의료비, 경조사비가 전부 기타로 들어가니 월말에 내역을 봐도 어디서 돈이 나갔는지 파악이 안 됐다.
Claude Code에 현재 코드를 붙여 넣고 “카테고리를 사용자가 직접 추가·삭제할 수 있게 바꿔달라”고 요청했다. 몇 번 주고받으니 설정 페이지가 생겼고, 카테고리 목록을 로컬 JSON 파일에 저장하는 구조로 바뀌었다. 생각보다 빠르게 됐지만, 기존 데이터의 카테고리 값이 그대로 남아 있어서 마이그레이션을 따로 처리해야 했다. 그 부분은 Claude Code가 처음 제안에서 빠뜨렸고, 내가 직접 문제를 발견해서 추가 요청했다.
반복 지출 자동 입력 기능 추가
매달 고정으로 나가는 항목들이 있다. 월세, 통신비, 각종 구독료 같은 것들인데, 매번 수동으로 입력하는 게 번거로웠다. 한 달쯤 지나서 이걸 자동으로 등록해주는 기능을 만들기로 했다.
요청 자체는 단순했다. “매달 특정 날짜에 지정한 항목이 자동으로 추가되도록 해달라”는 것이었다. Claude Code가 제안한 방식은 앱 실행 시점에 마지막 실행 날짜와 오늘 날짜를 비교해서 처리하는 방식이었다. NAS가 항상 켜져 있으니 크론잡보다 이 방식이 더 단순하다고 판단해서 그대로 적용했다. 실제로 두 달째 잘 작동하고 있다.
다만 한 가지 문제가 있었다. 앱을 오래 켜두다가 자정을 넘기면 날짜 비교 로직이 꼬이는 경우가 있었다. 이것도 직접 재현해서 Claude Code에 설명하니 수정 코드를 받을 수 있었다. 버그를 글로 설명하는 능력이 생각보다 중요하다는 걸 느꼈다.
월별 리포트 화면을 다듬은 과정
초기에는 월별 합계 숫자만 텍스트로 보여줬다. 카테고리가 늘어나면서 어느 항목이 얼마나 차지하는지 한눈에 보고 싶어졌다. 간단한 막대 차트를 추가하기로 했다.
외부 차트 라이브러리를 쓰는 방법도 있었지만, 의존성을 늘리기 싫어서 순수 CSS로 막대를 그리는 방식을 요청했다. Claude Code가 제안한 코드는 동작은 했는데 막대 비율 계산에서 최댓값 기준이 아니라 고정값 기준으로 처리돼 있었다. 지출이 많은 달에는 막대가 화면 밖으로 넘쳤다. 이런 식의 작은 논리 오류는 코드를 직접 읽어봐야 잡힌다. 전체를 맡기고 결과만 확인하면 놓치기 쉬운 부분이다.
수정 후에는 카테고리별 비율이 꽤 직관적으로 보이게 됐다. 화면이 단순해서 모바일 브라우저에서도 레이아웃이 크게 깨지지 않는다는 건 처음부터 신경 쓴 덕분이다.
Claude Code 유지보수 방식에서 느낀 점
Claude Code 공식 문서를 보면 컨텍스트 관리나 파일 참조 방식에 대한 설명이 있다. 실제로 써보면 코드베이스가 커질수록 어느 파일을 같이 넘겨야 하는지 판단하는 게 중요해진다. 관련 없는 파일을 잔뜩 붙여 넣으면 엉뚱한 부분을 건드린 코드가 돌아오는 경우가 있었다.
유지보수 방식으로 정착된 패턴이 있다. 기능 하나를 바꿀 때 관련 파일 두세 개만 골라서 넘기고, 변경 범위를 최대한 좁게 설명하는 것이다. 처음엔 “전체적으로 개선해줘” 같은 식으로 요청했다가 의도치 않은 부분까지 바뀌어서 되돌리는 데 시간을 썼다. 범위를 좁게 잡을수록 결과물을 검토하기도 쉽다.
아직 남아 있는 한계
가장 불편한 건 모바일 입력이다. NAS 웹앱이라 모바일 브라우저로 접근은 되는데, 입력 폼이 데스크톱 기준으로 만들어져 있어서 손가락으로 조작하기가 어색하다. 반응형으로 다듬는 작업을 한 번 더 해야 한다.
데이터 백업도 아직 수동이다. NAS 자체 백업에 포함되긴 하지만, 가계부 데이터만 따로 내보내는 기능이 없다. CSV 내보내기 정도는 추가할 수 있을 것 같아서 다음 작업 목록에 넣어뒀다.
검색 기능도 없다. 특정 항목을 찾으려면 월별 목록을 직접 스크롤해야 한다. 데이터가 쌓일수록 불편해질 텐데, 아직 데이터 양이 많지 않아서 미뤄두고 있다. 필요성이 충분히 느껴질 때 만드는 게 낫다고 판단했다.
3개월 쓰면서 정리된 생각
직접 만든 도구는 불편한 점을 발견하면 바로 고칠 수 있다는 게 가장 큰 장점이다. 시중 가계부 앱에서 원하는 방식으로 카테고리를 구성하지 못해서 포기했던 경험이 있는데, 그 답답함은 없다. 대신 고치는 데 시간이 들고, 그 시간을 낼 수 있어야 유지가 된다.
Claude Code를 쓰는 방식은 점점 단순해졌다. 처음엔 기능 전체를 한 번에 만들려고 했는데, 지금은 작은 단위로 쪼개서 요청하고 결과를 확인한 뒤 다음 단계로 넘어간다. 코드를 직접 짜는 것보다 빠르지만, 결과물을 이해하지 않으면 나중에 수정할 때 막힌다는 것도 경험으로 알게 됐다. 도구가 만들어준 코드도 결국 내가 관리해야 하는 코드다.
함께 읽으면 좋은 글