-
Beancount를 이용해 10년간 개인 재정을 일반 텍스트 파일로 기록하며, 약 45,000줄의 데이터와 10,000건의 거래를 관리
- 매달 30~45분을 들여 은행 명세서 CSV 파일을 가져와 수동·자동으로 정리하고, 연도별 파일로 분리해 가독성을 유지
- 독일 은행용 Python 기반 importer 라이브러리를 직접 개발해 Beancount와 연동, 일부는 현재도 유지 관리 중
- Beancount 입문자의 어려움을 느껴 초보자용 입문서를 집필했으며, 커뮤니티에서 긍정적 평가를 받음
- 모든 데이터가 자신의 로컬 기기와 Git 저장소에 보관되어, 특정 앱이나 서비스보다 지속성과 통제력이 높음
10년간의 Beancount 원장 구조
- 2016년부터 Beancount로 재정 데이터를 관리해 왔으며, 총 45,011줄의 항목이 16개의 .beancount 파일에 저장
-
main.beancount 파일을 중심으로 연도별 파일을 include 방식으로 연결
- 전체 거래는 약 9,895건, 그 안의 posting(분개) 은 19,743개
- 총 1,086개의 계정(account) 이 존재하지만, 이는 실제 은행 계좌가 아닌 가상 분류 계정으로 구성
- 예: 슈퍼마켓 지출, 수입, 구독 서비스 등 세부 항목별 계정 생성 가능
-
507개의 PDF 문서가 거래에 첨부되어 있으며, 세금 신고 시 관련 영수증을 쉽게 확인 가능
- 연도별 posting 수는 2016년 715건에서 2023년 2,651건으로 증가, 2023년이 가장 활발한 해로 기록
월별 관리 절차
- 매달 약 30~45분을 투자해 은행 명세서를 CSV로 다운로드 후 Beancount에 가져오기
- CSV는 PDF보다 파싱이 용이해 사용
- Python 기반 importer가 CSV 데이터를 Beancount 형식으로 변환
- 변환된 거래를 .beancount 파일에 추가 후, 이중부기 원칙에 따라 잔액이 0이 되도록 조정
- 새해가 시작되면 이전 연도의 거래를 <year>.beancount 파일로 이동하고, main.beancount에 포함시켜 관리
- 모든 거래 내역이 하나의 디렉터리 내 텍스트 파일로 정리되어 있음
독일 은행용 Beancount Importer 개발
- Beancount는 기본적으로 은행 명세서 형식을 알지 못하므로, importer 클래스를 통해 변환 필요
- 독일 은행 계좌를 사용하기 때문에 직접 여러 importer를 개발
- 첫 세 라이브러리는 현재도 활발히 유지·사용 중
사용자에서 저자로
- Beancount의 문서는 방대하지만, 초보자에게는 진입 장벽이 높음
- 시행착오 끝에 익힌 경험을 바탕으로 입문서를 집필
마무리
- 모든 재정 데이터가 Git으로 버전 관리된 로컬 텍스트 파일로 저장되어 있음
- 데이터가 자신의 기기에 존재하고, 특정 앱이나 서비스에 종속되지 않음
- Beancount 생태계의 도구를 활용해 자유롭게 분석 가능
- 이러한 plaintext accounting 방식은 어떤 앱보다 오래 지속될 수 있는 강력한 재정 관리 형태임