커뮤니티 쇼케이스: 실제 Beancount 설정
실제 Beancount 설정
소개
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:USD
및 Assets:Bank:Checking:EUR
)을 열었습니다. 이는 일반적인 접근 방식 중 하나입니다. 그러나 통화가 다른 경우에도 Beancount는 각 통화의 잔액을 별도로 추적하고 거래가 통화별로 균형을 이루도록 요구합니다. 창업자는 회사의 총 잔액을 기준 통화로 변환하여 보기 위해 가치 평가 보고서를 자주 실행합니다. Beancount는 가격 조회를 지원하므로 bean-price
도구 또는 플러그인을 사용하여 환율(및 투자에 대한 주가)에 대한 일일 가격 피드를 설정했습니다. 그 결과 언제든지 최신 환율로 변환된 EUR 계 정을 포함하는 USD로 대차 대조표를 생성할 수 있습니다. 커뮤니티 회원은 원장 스타일 회계에서 여러 통화를 처리하는 것이 간단하다고 지적합니다. 필요한 경우 지정된 통화로 거래를 추가하고 환율을 기록하기만 하면 됩니다. 예를 들어 한 사용자는 Beancount에서 통화 변환을 관리하는 방법으로 중간 계정을 통해 USD를 EUR로, EUR를 CAD로 변환하는 예를 공유했습니다. 이 경우 소규모 기업은 거래에서 통화를 반드시 변환하지는 않지만(자국 통화로 유지) 보고서를 사용하여 통합합니다. 이 유연성은 스타트업이 전 세계로 확장됨에 따라 매우 중요했습니다.
사용자 정의 스크립트 및 확장: 창업자가 필요한 모든 것을 즉시 사용할 수 있는 것은 아니었으므로 사용자 정의 플러그인으로 Beancount를 확장했습니다. 시간이 지남에 따라 파서 라이브러리, 포맷팅 도구 및 규칙 기반 거래 가져오기를 작성하여 이러한 많은 항목을 오픈 소스 패키지로 릴리스했습니다. 예를 들어 YAML 구성을 사용하여 거래를 자동으로 분류하는 규칙 기반 가져오기 엔진을 구축했습니다. 이 구성의 스니펫은 특정 수취인 또는 설명(예: "Comcast" 또는 "PG&E")이 특정 비용 계정 및 설명에 매핑되는 방법을 보여줍니다. 따라서 은행 피드에 해당 계정이 나타나면 수동 편집 없이 올바른 Beancount 항목이 생성됩니다. 이것은 기본적으로 유틸리티, 구독 등과 같은 장부 기록 규칙을 즉석에서 적용하는 사용자 정의 자동화입니다. 또 다른 플러그인은 원장이 항상 균형을 유지하고 형식이 지정되도록 합니다. 이러한 모든 도구는 새 데이터가 수집될 때마다 창업자의 워크플로우의 일부로 실행됩니다. 그 결과 최소한의 개입으로 "