본문으로 건너뛰기

커뮤니티 쇼케이스: 실제 Beancount 설정

실제 Beancount 설정

소개

community-showcase

Beancount는 다재다능한 일반 텍스트 회계 시스템이며, 사용자는 다양한 실제 요구 사항에 맞게 시스템을 구성했습니다. 이 커뮤니티 쇼케이스에서는 프리랜서와 소규모 사업주부터 개인 재무 애호가에 이르기까지 다양한 사람들이 Beancount 회계 워크플로우를 구성하고 사용하는 익명화된 사례를 제시합니다. 이러한 사례는 메타데이터로 거래에 태그 지정, 사용자 정의 스크립트로 원장 업데이트 자동화, 다중 통화 처리, 예산 책정 및 예측, 플러그인 또는 통합(예: Fava 웹 인터페이스)으로 Beancount 확장과 같은 창의적인 방법을 강조합니다. 목표는 회계사, 개발자 및 재무에 능통한 사용자에게 Beancount의 유연한 시스템으로 가능한 것에 대한 영감을 주고 정보를 제공하는 것입니다.

Fava 인터페이스 예시: 많은 Beancount 사용자가 Fava – 오픈 소스 웹 대시보드 – 에 의존하여 재정을 시각화합니다. Fava는 Beancount 원장을 대화형 보고서 및 차트로 바꿀 수 있습니다. 예를 들어, 위의 스크린샷은 소득 및 비용을 범주별로 분류하여 돈이 어디서 들어오고 나가는지에 대한 빠른 개요를 제공하는 손익 계산서 트리 맵을 보여줍니다. 사용자는 시간, 계정 또는 태그별로 이 보기를 필터링하여 특정 프로젝트 또는 기간을 자세히 살펴볼 수 있습니다. 이러한 시각화는 일반 텍스트 데이터에 더 쉽게 접근할 수 있도록 하여 사용자가 추세와 이상 징후를 한눈에 파악할 수 있도록 합니다.

각 Beancount 설정은 고유하지만 공통된 주제가 나타납니다. 아래에서는 프리랜서, 소규모 사업주 및 개인 재무 파워 유저의 세 가지 시나리오를 자세히 살펴보고 계정을 구성하고 Beancount 기능을 활용하는 방법을 알아봅니다. 모든 개인 정보는 제거되거나 일반화되었으며 기술 및 구성에만 중점을 둡니다.

프리랜서: 프로젝트 태깅 및 송장 추적

첫 번째 예는 Beancount를 비즈니스 재정의 중추로 사용하는 프리랜서 컨설턴트입니다. 이 프리랜서의 원장은 프로젝트별로 수입과 지출을 추적하고 여러 고객에 대한 송장을 관리하도록 구성되어 있습니다. 각 고객에 대해 자산 아래에 외상 매출금(A/R)에 대한 전용 계정을 설정하여 누가 무엇을 빚지고 있는지 분리하는 데 도움이 됩니다. 프로젝트를 완료하고 고객에게 송장을 발행할 때 고객의 A/R 계정을 차변하고 수입 계정을 대변하는 거래를 기록합니다. 예를 들어 새 송장은 다음과 같이 기록될 수 있습니다.

2025-08-01 * "프로젝트 X 완료" ^INV-0001
Assets:AccountsReceivable:ClientA 5,000 USD
Income:Consulting -5,000 USD

여기서 ^INV-0001 표기법은 이 거래에 송장 번호를 태그하는 데 사용되는 링크 (내장된 Beancount 메타데이터 기능)입니다. 고객이 해당 송장 금액의 일부 또는 전부를 지불하면 지불 거래에는 동일한 ^INV-0001 링크가 포함되어 두 항목을 함께 묶습니다. 이 링크를 사용하면 특정 송장에 지불금을 할당하고 미결 잔액을 쉽게 확인할 수 있습니다. 한 커뮤니티 회원이 설명했듯이 이러한 태그 또는 링크를 사용하여 송장 항목과 지불 항목 모두에 대해 부분 지불(예: 30달러 송장에 대한 20달러 지불)을 표시할 수 있습니다. 해당 송장 링크에 대해 원장을 쿼리하면 프리랜서는 송장 금액 중 얼마가 지불되었고 얼마가 남아 있는지 즉시 확인할 수 있습니다.

링크 외에도 프리랜서는 분류를 위해 태그를 많이 사용합니다. Beancount의 태그는 나중에 필터링하기 위해 거래를 표시할 수 있는 # 접두사가 붙은 레이블입니다. 이 사용자는 고객에게 청구할 수 있는 각 비용에 프로젝트 코드(예: #ProjectX)로 태그를 지정하고 상환 가능한 비용에 #Reimbursable로 태그를 지정합니다. 예를 들어 고객 프로젝트를 위해 항공권을 구매하는 경우 비용 항목에 #ProjectX #Reimbursable이 포함될 수 있습니다. 이 방법을 사용하면 태그를 필터링하여 프로젝트 또는 고객별 보고서를 생성할 수 있습니다. 프로젝트가 끝난 후 프리랜서는 쿼리를 실행하여 해당 프로젝트에 대한 모든 #Reimbursable 비용을 나열하고 각 비용에 대해 고객에게 송장을 발행해야 합니다. 한 Beancount 사용자는 출장 비용에 태그를 지정하면 상환되지 않은 비용을 파악하는 데 도움이 되었다고 언급했습니다. 이상적으로는 고객으로부터 모든 환불을 받으면 출장 비용이 0달러로 순 감액됩니다. 이는 태깅이 Beancount의 쿼리 기능과 결합되어 청구 가능한 비용을 관리하는 프리랜서에게 추가적인 감독 계층을 제공하는 방법을 강조합니다.

미결제 상태를 관리하기 위해 프리랜서는 미결제 외상매출금에 대한 특별한 규칙을 사용합니다. 아직 전액 지불되지 않은 모든 송장 거래에 #UNRESOLVED 태그를 적용합니다. Beancount(및 Fava)는 이 태그를 강제 적용하지 않지만 결제를 기다리는 거래를 표시하는 데 사용되는 커뮤니티에서 설정한 패턴입니다. 예를 들어 Client A가 5,000달러를 전액 지불할 때까지 위의 송장 거래에는 #UNRESOLVED가 포함됩니다. 해당 태그를 필터링하면 프리랜서는 언제든지 모든 미결제 송장을 나열할 수 있습니다. 지불이 접수되어 적용되면(해당 A/R 거래가 입력됨) #UNRESOLVED 태그를 제거하거나 무시하면 해당 고객의 외상매출금 계정은 0으로 균형이 맞춰집니다. 이 시스템은 송장이 "누락"되지 않도록 합니다. 기본적으로 일반 텍스트로 수행되는 미결제 보고서입니다. A/R이 0이 아니고 미해결 태그가 지정된 상태로 유지되면 주의가 필요합니다.

프리랜서는 종종 여러 지불 방법과 때로는 여러 통화를 처리하기 때문에 Beancount 설정은 이를 원활하게 수용합니다. 예를 들어 컨설턴트는 일부 고객에게는 USD로, 다른 고객에게는 EUR로 청구할 수 있습니다. 다중 통화 처리는 Beancount에서 간단합니다. 모든 계정은 여러 상품(통화는 상품으로 취급됨)을 보유할 수 있습니다. 프리랜서는 각 통화에 대해 별도의 하위 계정(예: Assets:AccountsReceivable:ClientA:EUR...:USD)을 유지하거나 동일한 계정에서 해당 통화로 거래를 게시할 수 있습니다. Beancount는 통화별로 잔액을 자동으로 추적합니다. 한 사용자는 "Beancount가 USD 또는 티커 기호와 같은 모든 통화로 수량을 추적할 수 있다는 점이 좋습니다"라고 강조했습니다. 프리랜서는 보고를 위해 통화를 변환해야 할 때마다 price 지시문으로 환율을 기록하여 이를 활용합니다. 주기적인 환율 또는 시장 가격을 입력하면 자국 통화로 변환된 소득 보고서를 생성할 수 있습니다.

마지막으로 이 프리랜서는 Beancount 원장을 실용적인 도구와 통합하여 워크플로우를 간소화합니다. 예를 들어 문서 메타데이터를 사용하여 각 송장의 PDF 사본을 원장에 첨부합니다. 일반적인 송장 지불 항목은 다음과 같습니다.

2025-08-30 * "ClientA" "INV-0001에 대한 지불" ^INV-0001
Assets:Bank:Checking 5,000 USD
Assets:AccountsReceivable:ClientA -5,000 USD
document: "Invoices/ClientA/INV-0001.pdf"

Beancount의 document 지시문 또는 메타데이터를 사용하면 항목과 파일을 연결할 수 있으며 Fava는 이러한 첨부 파일에 대한 하이퍼링크를 표시합니다. 즉, 프리랜서(또는 회계사)는 원장 보고서에서 직접 클릭하여 원본 송장 PDF를 볼 수 있으므로 백업 문서에 쉽게 액세스할 수 있습니다. 프리랜서는 또한 Fava 보고서를 사용하여 비즈니스를 모니터링합니다. 손익 계산서 또는 대차 대조표를 고객별로 필터링하면 고객별 수익성을 확인하고 모든 프로젝트가 지불되었는지 확인할 수 있습니다. 요약하면 이 프리랜서의 Beancount 시스템은 프로젝트 기반 회계를 관리하기 위해 태깅 및 링크를 많이 사용하는 것을 보여줍니다. 일반 텍스트 원장을 강력한 프리랜서 회계 도구로 전환하여 프로젝트 비용, 다중 통화 수입 및 송장 상태에 대한 명확한 가시성을 제공합니다.

프리랜서 설정의 주요 사례: 프로젝트 또는 목적별로 거래를 그룹화하기 위해 태그 사용, 고유 ID로 송장 및 지불 연결, #UNRESOLVED 태그로 미결제 외상매출금 표시, 참조를 위해 원장 항목에 송장 문서 첨부, 번거로움 없이 국제 고객에게 청구할 수 있도록 Beancount의 다중 통화 지원 활용. 이 모든 것은 몇 가지 도우미 도구와 함께 일반 텍스트 항목으로 달성되어 Beancount의 메타데이터의 힘을 보여줍니다.

소규모 기업: 자동화 및 다중 통화 회계

다음으로 회사 장부를 운영하기 위해 Beancount를 채택한 소규모 기업 소유자, 특히 스타트업 창업자를 살펴봅니다. 소규모 기업은 프리랜서와 유사한 요구 사항(송장, 비용, 다중 통화)이 있지만 종종 더 큰 규모로 자동화, 일관성 및 협업에 더 중점을 둡니다. 이 경우 창업자는 기술에 능통했으며 수동 장부 기록을 최소화하기 위해 고도로 자동화된 Beancount 워크플로우를 구축했습니다. QuickBooks와 같은 기존 회계 소프트웨어를 평가한 후 데이터에 대한 완전한 제어를 유지하기 위해 Beancount의 일반 텍스트 방식을 선택했습니다. 몇 년에 걸쳐 반복적으로 사용자 정의 도구를 개발하여 95% 자동화된 장부 기록 프로세스를 달성했습니다.

자동화된 가져오기 및 조정: 첫 번째 과제 중 하나는 다양한 소스(은행 계좌, 신용 카드, 지불 처리기)에서 원장으로 거래를 가져오는 것이었습니다. 각 거래를 입력하는 대신 이 사용자는 데이터를 가져와 Beancount 형식으로 변환하는 가져오기 스크립트를 설정했습니다. 각 금융 기관의 CSV 또는 API 형식에 대한 사용자 정의 Python 가져오기를 작성하여 한 명령으로 새 거래를 가져와 원장에 추가할 수 있도록 했습니다. 예를 들어 Beancount의 bean-extract 프레임워크를 사용하여 창업자는 다운로드 폴더에서 새 명세서를 검색하고 Beancount 항목으로 출력하는 스크립트를 실행할 수 있습니다. 또 다른 사용자인 Rhyd Lewis는 각 은행에 대한 별도의 가져오기 스크립트가 있고 간단한 명령(Justfile 사용)을 통해 스크립트를 호출하여 원장을 업데이트할 수 있는 유사한 설정을 설명했습니다. 우리의 소규모 기업 소유자는 동일한 작업을 수행합니다. 모든 은행 거래, 신용 카드 스와이프, 심지어 PayPal 또는 Stripe 거래까지 자동으로 가져와서 적절한 계정으로 분류합니다.

이러한 항목이 자동으로 추가되더라도 데이터 무결성을 보장하기 위해 Beancount의 유효성 검사 도구 및 플러그인도 사용합니다. 예를 들어 beancount.plugins.noduplicates 플러그인을 활성화하여 동일한 거래를 실수로 두 번 가져오는 것을 방지하고 beancount.plugins.nounused는 항목이 없는 계정을 플래그합니다(오래된 계정 정리하는 데 유용). 창업자는 또한 포맷터(예: bean-format 또는 커뮤니티 도구인 beancount-black)를 사용하여 원장 파일의 스타일을 일관되게 유지합니다. 이는 많은 자동 편집을 통해 균일한 스타일을 유지하면 차이점과 감사가 더 쉬워지기 때문에 중요합니다. 실제로 창업자는 원장을 Git 리포지토리에 보관하여 원장 업데이트를 코드 변경처럼 취급합니다. 가져온 새 거래 배치가 Git 커밋이 되고 변경된 내용을 확인하기 위해 차이점을 검토할 수 있습니다. 한 스크린샷에서 그들은 "Costco"에 대한 신용 카드 거래가 수동 개입 없이 원장에서 보류 중인 상태에서 지워진 상태로 변경되는 Git 기록을 보여줍니다. 버전 제어는 감사 추적을 제공합니다. 거래가 추가되거나 수정된 시기를 정확히 확인하고 잘못 가져온 경우 변경 사항을 되돌릴 수도 있습니다. 이것은 회계 기록에 소프트웨어 개발 모범 사례(예: 소스 제어)를 도입하는 좋은 예입니다.

다중 통화 및 국제 거래: 소규모 기업은 종종 여러 통화로 거래합니다. 예를 들어 스타트업은 USD 비용이 있지만 EUR로 지불금을 받거나 GBP 은행 계좌를 보유할 수도 있습니다. 쇼케이스 회사는 Beancount의 다중 통화 기능을 사용하여 이 모든 것을 하나의 원장으로 통합합니다. 각 통화에 대해 별도의 계정(예: Assets:Bank:Checking:USDAssets:Bank:Checking:EUR)을 열었습니다. 이는 일반적인 접근 방식 중 하나입니다. 그러나 통화가 다른 경우에도 Beancount는 각 통화의 잔액을 별도로 추적하고 거래가 통화별로 균형을 이루도록 요구합니다. 창업자는 회사의 총 잔액을 기준 통화로 변환하여 보기 위해 가치 평가 보고서를 자주 실행합니다. Beancount는 가격 조회를 지원하므로 bean-price 도구 또는 플러그인을 사용하여 환율(및 투자에 대한 주가)에 대한 일일 가격 피드를 설정했습니다. 그 결과 언제든지 최신 환율로 변환된 EUR 계정을 포함하는 USD로 대차 대조표를 생성할 수 있습니다. 커뮤니티 회원은 원장 스타일 회계에서 여러 통화를 처리하는 것이 간단하다고 지적합니다. 필요한 경우 지정된 통화로 거래를 추가하고 환율을 기록하기만 하면 됩니다. 예를 들어 한 사용자는 Beancount에서 통화 변환을 관리하는 방법으로 중간 계정을 통해 USD를 EUR로, EUR를 CAD로 변환하는 예를 공유했습니다. 이 경우 소규모 기업은 거래에서 통화를 반드시 변환하지는 않지만(자국 통화로 유지) 보고서를 사용하여 통합합니다. 이 유연성은 스타트업이 전 세계로 확장됨에 따라 매우 중요했습니다.

사용자 정의 스크립트 및 확장: 창업자가 필요한 모든 것을 즉시 사용할 수 있는 것은 아니었으므로 사용자 정의 플러그인으로 Beancount를 확장했습니다. 시간이 지남에 따라 파서 라이브러리, 포맷팅 도구 및 규칙 기반 거래 가져오기를 작성하여 이러한 많은 항목을 오픈 소스 패키지로 릴리스했습니다. 예를 들어 YAML 구성을 사용하여 거래를 자동으로 분류하는 규칙 기반 가져오기 엔진을 구축했습니다. 이 구성의 스니펫은 특정 수취인 또는 설명(예: "Comcast" 또는 "PG&E")이 특정 비용 계정 및 설명에 매핑되는 방법을 보여줍니다. 따라서 은행 피드에 해당 계정이 나타나면 수동 편집 없이 올바른 Beancount 항목이 생성됩니다. 이것은 기본적으로 유틸리티, 구독 등과 같은 장부 기록 규칙을 즉석에서 적용하는 사용자 정의 자동화입니다. 또 다른 플러그인은 원장이 항상 균형을 유지하고 형식이 지정되도록 합니다. 이러한 모든 도구는 새 데이터가 수집될 때마다 창업자의 워크플로우의 일부로 실행됩니다. 그 결과 최소한의 개입으로 "자동으로 업데이트"되는 원장이 탄생했으며 창업자는 자동화에 집착하는 개발자로서 "순수한 기쁨"을 가져다준다고 말합니다.

보안 및 접근성도 우려 사항이었습니다. 창업자는 재무 팀(그리고 감독자 역할을 하는 배우자까지)이 장부를 쉽게 볼 수 있기를 원했습니다. 이를 위해 클라우드에 Fava의 개인 배포를 설정했습니다. 개인 Git 리포지토리에 새 원장 커밋을 푸시할 때마다 CI 파이프라인(GitHub Actions 및 AWS Elastic Beanstalk 사용)은 업데이트된 Fava 인스턴스를 배포합니다. 웹 인터페이스는 암호(기본 인증을 사용하는 Nginx 프록시 사용) 뒤에 있어 권한이 있는 사람만 볼 수 있습니다. 이렇게 하면 로컬에 아무것도 설치할 필요 없이 브라우저 대시보드를 통해 최신 재무 제표를 항상 사용할 수 있습니다. 아래 아키텍처 다이어그램은 이 설정을 보여줍니다. Beancount 파일과 필요한 구성은 Fava와 함께 Docker 이미지로 번들로 제공되고 AWS에서 제공되며 Cloudflare가 보안을 위해 앞에 있습니다.

클라우드에서 Beancount 자동화: 이 다이어그램은 Beancount 원장 + Fava에 대한 배포 파이프라인을 보여줍니다. 사용자는 원장 파일을 로컬에서 업데이트하고 Git에 푸시합니다. Fava 및 인증을 위한 Nginx를 포함하는 Docker 컨테이너가 빌드되어 AWS Beanstalk 서버에 배포되고 Cloudflare는 프록시 역할을 합니다. 그 결과 소규모 기업의 재무 데이터에 어디서나(소유자 또는 팀) 실시간으로 액세스할 수 있는 안전한 웹 포털이 됩니다. 이 고급 설정은 소규모 기업이 데이터 소유권을 포기하지 않고 편의성을 달성하기 위해 Beancount를 최신 클라우드 도구와 통합할 수 있는 방법을 보여줍니다.

일상적인 사용에서 소규모 기업 소유자는 데이터 입력보다는 예외 처리에 중점을 둡니다. 매달 자동으로 가져온 거래(Git 차이점 또는 Fava의 저널 보기 사용)를 간략하게 검토하여 분류되지 않거나 잘못된 항목을 파악합니다. 또한 Beancount의 잔액 주장을 사용하여 계정을 조정합니다. 예를 들어 6월의 모든 거래를 입력한 후 은행 계좌의 기말 잔액이 명세서와 일치하는지 확인하기 위해 잔액 확인을 추가할 수 있습니다. 그렇지 않은 경우 Beancount는 오류를 표시하여 누락되거나 잘못 입력된 항목이 있음을 나타냅니다. 이렇게 하면 장부가 정확하게 유지됩니다.

소규모 기업 설정의 주요 사례: 사용자 정의 가져오기 및 스크립트를 통한 과도한 자동화("95% 자동" 원장 만들기), 감사 추적 및 협업을 위한 버전 제어 사용, 가치 평가를 위한 가격 피드를 사용한 다중 통화 회계, 재무 보고서에 대한 쉽고 공유 가능한 액세스를 위한 Fava 배포. 소규모 기업 시나리오는 Beancount를 엔지니어링 노력으로 얼마나 멀리 가져갈 수 있는지 보여줍니다. 회계를 투명성과 유연성을 유지하면서 대체로 자동화된 파이프라인으로 전환합니다. 프로그래머가 아니더라도 서식 지정, 중복 감지 등과 같은 커뮤니티 플러그인을 사용하고 빈번한 검토 및 백업을 권장하는 일반 텍스트 워크플로우를 채택하여 이러한 많은 이점을 얻을 수 있습니다.

개인 재무 애호가: 예산 책정 및 사용자 정의 분석

마지막 쇼케이스는 가계 재정 및 투자를 매우 자세하게 관리하기 위해 Beancount를 사용하는 개인 재무 애호가입니다. 이 사용자는 개인 재정을 회계사의 엄격함과 데이터 분석가의 호기심으로 취급합니다. 그 결과 모든 페니를 추적할 뿐만 아니라 예산 책정, 예측 및 분석 실험의 기반 역할을 하는 Beancount 원장이 탄생했습니다.

개인 원장 구성: 많은 사람들이 모든 계정에 대해 단일 Beancount 파일로 시작하며 이 애호가도 마찬가지입니다. 그들은 모든 계정(은행 계좌, 신용 카드, 대출, 투자 포트폴리오 등)과 거래를 포함하는 하나의 마스터 원장(예: main.beancount)을 유지합니다. 시간이 지남에 따라 섹션을 분리하여 일부 구조를 도입했습니다. 예를 들어 계좌 개설/폐쇄를 위한 파일과 연간 거래를 위한 별도의 파일이 있으며 이는 기본 파일에 포함됩니다. 이 모듈식 구성을 사용하면 수년간의 데이터 탐색이 더 쉬워집니다(오래된 연도를 별도의 파일에 보관할 수 있음). 여전히 논리적으로 하나의 원장입니다. 커뮤니티 포럼의 또 다른 개인 사용자는 카테고리별로 다른 파일을 포함하는 유사한 레이아웃을 설명했습니다(예: Income.beancount, Expenses.beancount, Investments.beancount). 우리의 애호가는 현재 장치 간에 동기화된 하나의 파일을 간단하게 유지합니다.

동기화에 대해 말하자면 개인 재정이기 때문에 이 사용자는 어디에 있든 거래를 캡처하고 싶어합니다. 그들은 Beancount Mobile이라는 모바일 앱을 사용하여 이동 중에도 항목을 빠르게 추가합니다(예: 상점에서 바로 현금 지출을 기록). 원장 파일은 클라우드 동기화(이 경우 Syncthing)를 통해 공유되므로 휴대폰, 랩톱 및 VPS(서버)에 모두 최신 사본이 있습니다. 컴퓨터에서는 구문 강조 표시를 통해 편안하게 편집할 수 있도록 _beancount-mode_와 함께 Emacs를 사용하는 것을 선호합니다. 이 설정을 사용하면 책상에 있든 외출 중이든 즉시 거래를 기록하고 잊지 않도록 할 수 있습니다. 개인의 편의를 위해 기술 도구를 조정하는 좋은 예입니다. 효과적으로 상업용 예산 책정 앱에 대한 자체 호스팅 대안을 구축합니다.

세분화된 추적을 위한 태깅 및 메타데이터: 이 사용자는 계정 차트 외에도 데이터에 두 번째 차원을 추가하기 위해 태그를 활용합니다. 일반적인 예산 책정 범주의 경우 계정으로 충분합니다(예: Expenses:Groceries, Expenses:Rent 등과 같은 계정이 있음). 그러나 이벤트 또는 _목표_와 같은 교차 주제의 경우 태그를 사용합니다. 예를 들어 주택 개조 프로젝트와 관련된 모든 거래에 #HomeReno로 태그를 지정합니다. 하드웨어 매장에서 목재를 구입하든(비용) 제조업체로부터 리베이트를 받든(수입) 마찬가지입니다. 이렇게 하면 해당 비용이 다른 계정으로 분리되지 않고도 총 프로젝트 비용 보고서를 쉽게 생성할 수 있습니다. 한 Reddit 사용자는 주택 프로젝트에 대한 #garage-improvement 또는 #lighting-improvement와 같은 비용에 태그를 지정하여 Beancount의 쿼리를 통해 해당 비용을 필터링하고 합산하는 것이 사소한 일이라고 설명했습니다. 우리의 애호가는 휴가(#ItalyTrip2025), 주요 구매 및 일회성 이벤트에 대해서도 동일한 작업을 수행합니다.

메타데이터(거래의 키-값 쌍)는 일부 특정 목적에도 사용됩니다. 예를 들어 돈을 쓴 장소를 추적하기 위해 큰 비용에 location: ... 메타데이터를 추가하거나 수취인 및 설명 외에 추가 컨텍스트를 제공하기 위해 note: ...를 추가합니다. 몇 가지 경우에 예측에 도움이 되도록 사용자 정의 메타데이터 필드를 만들기도 했습니다. 한 가지 예는 특정 반복 비용에 budget: Xfrequency: monthly를 추가하는 것입니다. 이는 사용자가 각 비용에 대한 메타데이터에 예산 예측을 저장하는 Beancount 메일링 리스트에 대한 토론에서 영감을 받은 아이디어입니다. 해당 메타데이터 필드는 Beancount의 핵심에 영향을 미치지 않지만 애호가는 메타데이터를 읽고 실제 지출을 예상 예산과 비교하는 작은 Python 스크립트를 작성했습니다. 이것은 아래에 설명된 Fava의 내장 예산 사용에 대한 대안으로, 메타데이터가 사용자의 의지에 따라 구부러질 수 있는 방법을 보여줍니다. Beancount 작성자가 언급했듯이 메타데이터는 "사용자[사용자 정의 스크립트에서 사용하도록]를 위해서만 존재합니다. Beancount는 메타데이터를 구문 분석하지만 그 자체로는 무시합니다". 요컨대 이 사용자는 개인 분석을 돕기 위해 추가 정보로 원장을 확장하는 것을 두려워하지 않습니다.

Beancount를 사용한 예산 책정: 이 사용자의 주요 목표 중 하나는 월별 예산을 준수하는 것입니다. 그들은 이전에 예산 책정 앱(YNAB)을 사용했으며 봉투 예산 책정 개념 중 일부를 복제하고 싶었습니다. Beancount에서 예산 책정을 수행하는 방법에는 여러 가지가 있지만 가장 쉬운 방법은 Fava의 예산 지시문을 사용하는 것입니다. 우리의 애호가는 다음과 같이 원장에 budget 항목을 추가합니다.

2025-01-01 custom "budget" Expenses:Groceries   "monthly" 500 USD
2025-01-01 custom "budget" Expenses:DiningOut "monthly" 200 USD
2025-01-01 custom "budget" Expenses:Travel "yearly" 3000 USD

각 줄은 기간 동안 계정(범주)에 대한 예산을 설정합니다. 그러면 Fava는 웹 인터페이스에 예산 대 실제 막대를 표시하여 사용자가 예를 들어 이번 달에 예산 500달러 중 480달러를 식료품에 지출했고 외식에 220달러(예산 초과)를 지출했다는 것을 알 수 있습니다. 애호가는 월별 총액과 예산 목표를 모두 보여주는 Fava의 손익 계산서비용 보고서를 정기적으로 확인합니다. Fava는 일별/주별 예산을 적절한 기간으로 편리하게 롤업합니다. 이 사용자는 이를 위해 Fava UI를 사용하므로 별도의 예산 책정 스프레드시트가 필요하지 않습니다. 모든 것이 통합되어 있습니다. (그들은 또한 포럼에서 제안된 대로 매달 초에 자금을 더미 계정으로 이동하여 더 자동화된 "봉투" 시스템을 실험했지만 사용자 정의 예산 지시문을 유지하는 것이 더 간단하다는 것을 알았습니다.)

예측의 경우 예산 외에도 예정된 청구서에 주목합니다. 일부 커뮤니티 회원은 구독 또는 대출 상각 일정에 대한 향후 거래를 생성하는 플러그인을 구축했지만 이 사용자는 더 간단한 접근 방식을 선택했습니다. 그들은 알려진 항목(예: 다음 달 임대료 또는 다가오는 연간 보험료)에 대한 미래 날짜 거래가 포함된 원장의 별도 섹션을 유지합니다. 이러한 항목은 원장에 유지되지만 현재 잔액에 영향을 미치지 않으며 날짜가 되면 알림 역할을 합니다(실제 청구와 일치하도록 필요한 경우 금액을 조정함). 약간의 해킹이지만 복잡한 도구 없이도 현금 흐름을 예측하는 데 효과적입니다.

투자 추적 및 다중 상품 회계: 재무 애호가인 이 사용자는 또한 Beancount를 사용하여 현금 계좌와 함께 투자 계정(주식, 뮤추얼 펀드 및 암호화폐)을 통합합니다. 그들은 보유 자산(예: AAPL, GOOG 등의 주식)이 Beancount에 상품으로 기록되는 중개 계좌를 가지고 있습니다. 예를 들어 Apple 주식 10주를 구매하는 것은 중개 현금을 대변하고 자산 계정을 10 AAPL을 상품 금액으로 차변하는 항목입니다. 모든 상품을 처리할 수 있는 Beancount의 기능은 여기에서 매우 유용합니다. 통화와 주식을 자유롭게 혼합할 수 있습니다. 한 사용자가 지적했듯이 "Beancount는 USD 또는 티커 기호와 같은 모든 통화로 수량을 추적할 수 있습니다." 이는 주식 포지션을 제대로 지원하지 않는 개인 재무 앱보다 훨씬 개선된 기능입니다. 우리의 애호가는 매일 밤 bean-price 도구를 사용하여 모든 증권 및 외화에 대한 최신 시장 가격을 가져옵니다. 매일 밤 오전 4시에 스크립트가 실행되어 가격(Yahoo Finance 또는 다른 소스에서)을 가져오고 해당 날짜에 대한 가격 기록을 원장에 추가합니다. 이렇게 하면 다음에 Fava를 열거나 보고서를 실행할 때 최신 포트폴리오 가치와 시간 경과에 따른 투자 성과를 볼 수 있습니다. 은행 계좌, 퇴직 펀드 및 암호화폐 지갑 전체의 순자산을 하나의 통합된 보기에서 사용할 수 있습니다. 이것은 데이터 기반 투자자를 위한 꿈입니다. 전체 그림을 보기 위해 여러 플랫폼에 로그인할 필요가 없습니다. 그들은 기본적으로 Beancount로 구동되는 개인 재무 대시보드를 구축했습니다.

분석 및 통합: 이 개인 재무 파워 유저를 진정으로 차별화하는 것은 Beancount에 데이터가 들어오면 데이터를 _분석_하는 방법입니다. 모든 거래가 SQLite 데이터베이스에 있으므로(Beancount는 SQL과 유사한 내장 쿼리 언어를 통해 데이터를 쿼리할 수 있음) 사용자는 사용자 정의 분석을 수행할 수 있습니다. 그들은 "내 식료품 지출의 3개월 이동 평균은 얼마입니까?" 또는 "올해 유틸리티 지출이 작년과 비교하여 어떻습니까?"와 같은 질문에 답하기 위해 Python 스크립트를 작성했습니다. 한 스크립트는 특정 태그에 대한 원장을 쿼리하고 결과를 추가 번호 처리를 위해 Pandas 데이터 프레임으로 출력합니다. 원장이 일반 텍스트이기 때문에 Jupyter 노트북을 사용하여(Fava에서 제공하는 것 외에) 다양한 시각화를 실험하기도 했습니다. 예를 들어 Python에서 Beancount 데이터를 집계하여 Matplotlib를 사용하여 월별 저축률의 사용자 정의 막대 차트를 생성했습니다. 이러한 종류의 임시 분석은 Beancount가 데이터에 액세스할 수 있고 기계가 읽을 수 있도록 유지하기 때문에만 가능합니다. 한 사용자가 말했듯이 _데이터 추출은 사소한 일_입니다. "쿼리 언어를 사용하여 Beancount에서 데이터를 가져오는 하나의 Python 스크립트가 있고 pandas 데이터 프레임을 사용하여 데이터를 보고서로 준비합니다". 우리의 애호가는 연간 재무 검토를 위해 실행하는 이러한 작은 스크립트 리포지토리를 가지고 있습니다.

물론 모든 것에 코딩이 필요한 것은 아닙니다. 대부분의 경우 내장 차트인 Fava에 의존합니다. Fava는 순자산 라인 차트, 수입 대 지출 추세, 심지어 트리 맵 분류(이전에 표시됨)를 제공하며 모두 클릭 한 번으로 가능합니다. 사용자는 2018년부터 자신의 재정에 대한 전체 기록을 쿼리하고 감사할 수 있다는 점을 높이 평가합니다. 예를 들어 "지난 5년 동안 자동차 수리에 얼마를 지출했는지" 궁금하다면 영수증을 파헤치는 대신 Fava에서 빠른 쿼리를 작성하거나 필터링하여 답을 얻을 수 있습니다. 이러한 권한 부여는 바로 그들을 Beancount에 끌어들였습니다. 데이터에 대한 완전한 소유권과 분석의 무한한 유연성입니다. 보너스로 일반 텍스트 원장은 미래에 대비할 수 있습니다. 필요한 경우 버전 제어, 마이그레이션 또는 다른 도구로 구문 분석할 수도 있습니다. 폐쇄형 앱과 달리 재무 기록에 대한 액세스 권한을 잃을 위험이 없습니다.

개인 설정의 주요 사례: 편리한 데이터 입력을 위해 모바일 및 데스크톱 도구 활용, 태그 및 사용자 정의 메타데이터를 사용하여 삶의 이벤트 및 범주 간 그룹 추적, 지속적인 지출 목표를 위해 Fava의 budget 지시문을 통해 예산 구현, 투자 및 여러 통화를 동일한 원장에서 추적(자동 가격 업데이트 포함) 및 원장 데이터를 직접 쿼리하여 사용자 정의 분석 수행. 이 사례는 약간의 설정만으로도 개인 재무 애호가조차도 일반적으로 기업을 위해 예약된 수준의 통찰력과 제어를 달성할 수 있음을 보여줍니다. 기술에 능통한 사용자에게 재미있고 매력적인 방식으로 유지합니다.

결론

이러한 커뮤니티 사례 전반에 걸쳐 Beancount의 유연성이 고도로 개인화된 회계 시스템을 가능하게 한다는 것이 분명한 주제입니다. 커뮤니티의 파워 유저는 간단한 텍스트 파일을 활용하여 기능면에서 상업용 소프트웨어에 필적하지만 워크플로우에 맞게 제작된 솔루션을 구축했습니다. 프리랜서는 항목에 태그를 지정하고 링크하여 클라이언트 프로젝트 및 송장을 쉽게 관리합니다. 소규모 기업 소유자는 지루한 장부 기록 작업을 스크립트로 작성하고 항상 업데이트된 재무를 위해 Beancount를 최신 인프라와 통합합니다. 개인 재무 애호가는 원장을 예산 책정, 투자 및 의사 결정을 위한 단일 소스로 사용하여 태그와 도구를 통해 거의 모든 돈에 대한 질문에 답할 수 있도록 보강합니다. 이 모든 것은 일반 텍스트 회계의 핵심 이점인 투명성, 감사 가능성 및 데이터 제어를 유지하면서 달성됩니다.

Beancount의 커뮤니티는 또한 풍부한 플러그인 및 통합 생태계를 만들어냈습니다. 입력용 편집기 모드 및 모바일 앱부터 시각화를 위한 Fava 웹 인터페이스, GitHub의 수많은 가져오기 및 유틸리티에 이르기까지 거의 모든 요구 사항을 수용할 수 있는 리소스가 있습니다. 사용자는 포럼 및 블로그에서 원장 설정을 자주 공유하므로 다른 사람들이 모범 사례를 배우고 채택할 수 있습니다. 중요한 것은 사람이 읽을 수 있는 형식으로 인해 민감한 정보를 비공개로 유지하거나(또는 공유를 위해 쉽게 수정할 수 있음) 있습니다. 이 쇼케이스에서 우리가 수행한 것처럼 말입니다. 위의 예는 당신이 프리랜서 개발자, 스타트업 창업자 또는 개인 재무 전문가이든 Beancount를 당신의 의지에 따라 구부릴 수 있음을 보여줍니다. 태깅 및 메타데이터를 창의적으로 사용하고, 가능한 경우 자동화하고, 다중 통화 거래를 처리하고, 예산