본문으로 건너뛰기

소개

Beancount.io는 엔지니어와 재무 미니멀리스트를 위해 설계된 사용자 친화적인 인터페이스와 강력한 기능으로 주식과 암호화폐 투자 추적을 간소화합니다.

이 가이드는 강력한 오픈 소스 플레인 텍스트 회계 도구인 Beancount를 사용한 플레인 텍스트 회계의 모범 사례를 종합합니다. 기초 철학, 기본부터 고급 구문, 복잡한 자산에 대한 실용적인 사례 연구, 장기적인 원장 관리 전략을 다룹니다.

파트 1: "왜" - 현명한 장부 기록의 기초

"어떻게"에 대해 깊이 들어가기 전에 "왜"를 이해하는 것이 중요합니다. 효과적인 장부 기록은 개인 재무 관리의 초석이며 재무적 명확성과 자유로 가는 필수 단계입니다.

지출 추적을 넘어: 재무적 명확성으로 가는 길

단순한 지출 추적 앱은 돈이 어디로 갔는지 알려줍니다. 강력한 회계 시스템은 그 이상을 제공합니다: 순자산, 현금 흐름, 투자 성과를 포함한 재무 건강의 완전한 그림을 제공합니다. 주요 목표는 관찰 가능성입니다—재무 생활에 대한 명확하고 데이터 기반의 이해를 얻어 정보에 입각한 결정을 내리고, 위험을 평가하며, 은퇴와 같은 장기 목표를 향해 나아가는 것입니다.

왜 복식 부기인가? 균형 잡힌 시스템의 힘

단식 부기(단순한 지출 목록)와 달리, 복식 부기 방법은 모든 거래를 최소 두 개 이상의 계정 간 자금 흐름으로 기록합니다. 핵심 원칙은 기본 회계 방정식입니다:

자산=부채+자본 (순자산)\text{자산} = \text{부채} + \text{자본 (순자산)}

이 시스템은 장부가 항상 균형을 유지하도록 보장하여 오류를 획기적으로 줄입니다. 대차대조표(무엇을 소유하고 무엇을 빚졌는지)와 손익계산서(무엇을 벌고 썼는지)와 같은 필수 보고서를 생성하여 완전한 재무 그림을 제공합니다.

파트 2: Beancount 시작하기

Beancount는 강력한 Python 기반 플레인 텍스트 회계 도구입니다.

Beancount.io에서 Fava를 사용한 첫인상

Beancount.io는 Beancount 엔진을 모바일 앱(iOS, Android) 및 웹 앱 - 원장 시각화를 위한 훌륭한 웹 기반 인터페이스인 Fava와 결합한 강력한 환경을 제공합니다. 설치가 필요 없습니다. 플랫폼을 사용할 때 원장 파일(예: main.bean)용 텍스트 편집기와 직접 상호 작용하고 Fava 생성 보고서가 실시간으로 업데이트되는 것을 볼 수 있습니다.

Fava는 작성한 플레인 텍스트를 대화형 차트, 재무 제표, 필터 가능한 거래 목록으로 전환하여 재무 보고서를 명확하게 보여줍니다.

또는 터미널에서 bea로 시작하기

셸에서 작업하는 것을 선호한다면, bea는 Beancount.io의 명령줄 도구입니다. 계정이 필요 없습니다: brew install bex-co/tap/bea 또는 uv tool install beancount-io로 설치하면, 동일한 일반 텍스트 파일을 생성, 검증, 조회, 보고할 수 있습니다. CLI 빠른 시작 문서는 몇 분 안에 첫 장부를 만들 수 있게 도와주며, bea로 보내는 첫 달 문서는 한 달 전체를 처음부터 끝까지 마감하는 방법을 안내합니다.

다섯 가지 핵심 계정 유형

Beancount는 원장의 구조를 형성하는 다섯 가지 최상위 계정 유형을 사용합니다:

계정 유형설명일반적인 잔액
자산소유한 것 (현금, 은행 예금, 투자, 부동산).차변
부채빚진 것 (신용카드 부채, 대출, 모기지).대변
수익돈이 들어오는 곳 (급여, 보너스, 이자).대변
비용돈이 나가는 곳 (식비, 임대료, 여행, 세금).차변
자본순자산; 초기 잔액 설정에 사용.대변

Beancount 방정식

Beancount는 원장 전체의 모든 분개 항목의 합이 0이 되어야 하는 자체 회계 방정식을 적용합니다:

자산+비용+부채+수익+자본=0\text{자산} + \text{비용} + \text{부채} + \text{수익} + \text{자본} = 0

이것이 관례상 수익, 부채, 자본 계정이 음수 값을 가지는 이유입니다—이들은 자산비용 계정을 증가시키는 _자금의 원천_입니다.

파트 3: Beancount의 언어 - 핵심 구문

Beancount의 모든 항목은 날짜로 시작하는 지시문입니다.

계정 정의 (open) 및 상품

계정을 사용하기 전에 open 지시문으로 계정을 선언해야 합니다. 또한 보유할 통화 또는 "상품"을 선택적으로 지정할 수 있습니다.

; YYYY-MM-DD open Account:Name [Commodity1, Commodity2, ...]
2020-01-01 open Assets:Bank:US:Chase:Checking      USD
2020-01-01 open Liabilities:CreditCard:US:Discover USD
2020-01-01 open Expenses:Food:Groceries
2020-01-01 open Income:Salary:Google

상품은 실제 통화(예: USD, JPY) 또는 마일리지(MILES_UA)나 주식 티커(HOOL)와 같이 사용자가 정의한 맞춤 단위일 수 있습니다.

첫 거래 기록 (*)

거래는 가장 일반적인 항목입니다. 날짜, 플래그(*는 완전한 거래, !는 불완전한 거래), 선택적 거래처, 설명으로 시작합니다. 그 뒤에 오는 각 줄(두 칸 들여쓰기)은 계정에 대한 "분개"입니다.

; YYYY-MM-DD * "Payee" "Description"
;   Account1      Amount Commodity
;   Account2     -Amount Commodity
 
2024-07-28 * "Trader Joe's" "Weekly groceries"
  Expenses:Food:Groceries     125.50 USD
  Liabilities:CreditCard:US:Discover  -125.50 USD

편의를 위해 거래에 분개가 두 개만 있는 경우 두 번째 줄의 금액을 생략할 수 있으며 Beancount가 자동으로 계산합니다.

2024-07-28 * "Trader Joe's" "Weekly groceries"
  Expenses:Food:Groceries     125.50 USD
  Liabilities:CreditCard:US:Discover

거래 수준 균형: 일상적인 사용에서 더 중요한 것은 모든 개별 거래도 균형을 이루어야 한다는 점입니다—단일 거래 내 모든 분개의 합은 0이 되어야 합니다. 거래가 균형을 이루지 않으면 Beancount는 다음과 같은 오류를 표시합니다:

Beancount 오류 알림

다중 통화 거래 처리 (@@@)

Beancount는 다중 통화 회계에 탁월합니다.

  • @를 사용하여 단위당 환산 가격을 지정합니다.
  • @@를 사용하여 총 환산 비용을 지정합니다.
; Buying a flight in EUR with a USD card
2024-08-01 * "Lufthansa" "Flight to Berlin"
  Expenses:Travel:Flights      500.00 EUR @@ 545.00 USD  ; 500 EUR cost me 545 USD in total
  Liabilities:CreditCard:US:Discover  -545.00 USD

파트 4: 정확성 보장 - 조정 기술

정확한 원장을 유지하는 핵심 방법은 정기적인 조정입니다. 여기에는 Beancount 원장의 잔액을 금융 기관의 공식 명세서와 비교하는 작업이 포함됩니다.

잔액 확인으로 검증 자동화 (balance)

balance 지시문은 자동화된 검증을 위한 기본 도구입니다. 특정 날짜에 계정이 특정 잔액을 가져야 한다고 주장합니다. 계산된 잔액이 주장과 일치하지 않으면 Beancount는 오류를 발생시킵니다. 이는 오류를 신속하게 찾는 데 매우 유용합니다.

참고: 잔액 확인은 지정된 날짜의 시작 시점(해당 날짜의 거래 전) 계정 상태를 확인합니다.

; From your monthly credit card statement
2024-08-01 balance Liabilities:CreditCard:US:Discover  -1432.78 USD

지지 문서 연결 (document)

은행 명세서나 영수증과 같은 외부 파일을 연결하여 감사 가능한 추적을 만들 수 있습니다. Fava는 이러한 링크를 클릭 가능하게 만듭니다.

2024-08-01 document Liabilities:CreditCard:US:Discover "statements/discover-2024-07.pdf"

오류 수정 및 초기 잔액 설정

원장을 시작하거나 추적할 수 없는 불일치를 발견할 때 조정이 필요합니다. 표준 관행은 특별한 Equity 계정을 사용하는 것입니다.

; Initializing a cash account when starting your ledger
2020-01-01 * "Initial Balance" "Setting up cash account"
  Assets:Cash:Wallet           200.00 USD
  Equity:Opening-Balances     -200.00 USD

Equity:Opening-Balances 계정은 알 수 없거나 외부 출처에서 원장으로 유입되는 금액을 보유합니다.

정확한 불일치가 중요하지 않은 빠른 수정의 경우, pad 지시문은 후속 balance 주장을 충족하도록 계정 잔액을 자동으로 조정하고 차액을 자본 계정에 기록할 수 있습니다. 주의해서 사용하십시오, 더 큰 문제를 숨길 수 있습니다. 명시적인 조정이 일반적으로 더 안전합니다.

파트 5: 고급 및 현실적인 거래 패턴

부채 추적: 미수금 및 미지급금 관리

복식 부기는 당신이 받을 돈(Assets:Receivables)이나 갚아야 할 돈(Liabilities:Payable)을 추적하는 데 완벽합니다.

예시: 단체 저녁 식사 비용 $90을 지불했고, 친구 Bob이 그의 몫 $45를 당신에게 빚졌습니다.

  1. 초기 비용과 미수금 기록:

    2024-08-05 * "Dinner Place" "Dinner with Bob"
      Expenses:Food:Restaurant          45.00 USD  ; Your share
      Assets:Receivables:Bob            45.00 USD  ; Bob owes you
      Assets:Bank:US:Chase:Checking    -90.00 USD
  2. Bob이 갚았을 때:

    2024-08-06 * "Bob" "Paid me back for dinner"
      Assets:Bank:US:Chase:Checking     45.00 USD
      Assets:Receivables:Bob           -45.00 USD

Assets:Receivables:Bob 계정은 이제 0이고 장부는 완벽하게 균형을 이룹니다.

자산 대 비용: 자동차 구매와 감가상각

자동차와 같은 대규모 구매는 단순한 비용이 아닙니다; 시간이 지남에 따라 가치가 감소하는(감가상각) 자산의 취득입니다.

  1. 구매를 자산으로 기록:

    2023-01-15 * "Toyota Dealer" "Purchase of a new car"
      Assets:Car:ToyotaCamry         30000.00 USD
      Assets:Bank:US:Chase:Checking -30000.00 USD
  2. 연간 감가상각 기록: 자동차가 매년 $3,000의 가치를 잃는다고 추정한다고 가정합니다. 연말에 이를 비용으로 기록합니다.

    2023-12-31 * "Depreciation" "Annual car value depreciation"
      Expenses:Depreciation:Car      3000.00 USD
      Assets:Car:ToyotaCamry        -3000.00 USD

이 항목 후에 Assets:Car:ToyotaCamry 계정은 자동차의 새로운 가치($27,000)를 정확히 반영하고, 해당 연도의 사용 비용을 비용으로 적절히 회계 처리했습니다.

파트 6: 심층 분석 - 복잡한 실제 자산 모델링

사례 연구 1: 부동산 회계

주택은 종종 가장 큰 자산이자 부채입니다. 모델링 방법은 다음과 같습니다.

  1. 계정 및 맞춤 상품 생성:

    2022-01-01 commodity HOUSE_123MAIN
      name: "Property at 123 Main St"
    2022-01-01 open Assets:Property:Home:123Main        HOUSE_123MAIN
    2022-01-01 open Liabilities:Mortgage:HomeLoan       USD
    2022-01-01 open Expenses:Home:Interest
    2022-01-01 open Expenses:Home:PropertyTax
  2. 구매 기록: $50만 주택을 $10만 계약금과 $40만 대출로 구매한다고 가정합니다.

    2022-03-15 * "Settlement Company" "Purchase of 123 Main St"
      Assets:Property:Home:123Main          1 HOUSE_123MAIN {500000.00 USD}
      Assets:Bank:DownPayment          -100000.00 USD
      Liabilities:Mortgage:HomeLoan    -400000.00 USD
  3. 월 모기지 납입 기록: 월 납입금은 원금(부채 감소)과 이자(비용)로 구성됩니다.

    2022-04-01 * "Mortgage Bank" "Monthly Mortgage Payment"
      Liabilities:Mortgage:HomeLoan      800.00 USD   ; Principal
      Expenses:Home:Interest            1200.00 USD   ; Interest
      Assets:Bank:US:Chase:Checking    -2000.00 USD
  4. 가치 상승 추적 (미실현 이익): 주택의 시장 가치는 변합니다. 공식 순자산에 영향을 주지 않고(이익은 매도 시에만 실현되므로) 이를 추적하려면 "가상" 통화와 함께 price 지시문을 사용할 수 있습니다.

    ; The purchase price is the real cost basis
    2022-03-15 price HOUSE_123MAIN   500000.00 USD
     
    ; An updated market estimate is an unrealized gain
    2024-01-01 price HOUSE_123MAIN   550000.00 USD.UNREALIZED

이렇게 하면 대차대조표를 부적절하게 부풀리지 않고 Fava 차트에서 추정 가치를 볼 수 있습니다.

모기지 추적, 감가상각, 부동산 매각이 포함된 실제 부동산 예제 원장을 살펴보세요:

새 탭에서 부동산 예제 원장 열기

사례 연구 2: 제한 주식 단위(RSU) 추적

RSU는 일반적인 주식 보상 형태입니다. 회계 처리에는 초기 부여, 베스팅 이벤트, 세금 원천징수 추적이 포함됩니다.

  1. 초기 설정: 베스팅된(HOOL) 및 베스팅되지 않은(HOOL.UNVEST) 주식에 대한 상품을 만들고 아래 항목이 접촉하는 모든 계정을 생성합니다. 모든 항목을 미리 선언하는 것이 아래 두 거래가 독립적으로 로드되도록 하는 핵심입니다.

    2021-01-01 commodity HOOL
    2021-01-01 commodity HOOL.UNVEST
    2021-01-01 open Assets:Brokerage:Etrade:HOOL          HOOL
    2021-01-01 open Assets:Grant:Unvested                 HOOL.UNVEST
    2021-01-01 open Income:Grant:Awards                   HOOL.UNVEST
    2021-01-01 open Expenses:Grant:Vested                 HOOL.UNVEST
    2021-01-01 open Income:Salary:Hooli:RSU               USD
    2021-01-01 open Expenses:Taxes:Federal                USD
    2021-01-01 open Expenses:Taxes:State                  USD
  2. 초기 부여 기록: 이 거래는 총 부여액이 베스팅되지 않은 자산 계정으로 이동하는 것을 보여줍니다. 아직 과세 대상이 아니므로 전체 항목은 추적 상품 HOOL.UNVEST로 표시됩니다.

    2021-02-01 * "Hooli" "Initial RSU Grant"
      Assets:Grant:Unvested        1000 HOOL.UNVEST
      Income:Grant:Awards         -1000 HOOL.UNVEST
  3. 베스팅 이벤트 기록: 이것이 핵심 거래입니다. 주식이 베스팅되면 소득을 인식하고, 고용주는 세금 납부를 위해 주식을 원천징수하며, 나머지는 보유하게 됩니다. 100주가 $150.00에 베스팅된다고 가정하면:

    • 총 보상: 100 × $150.00 = $15,000.00
    • 세금 원천징수 주식: 40 × $150.00 = $6,000.00 (연방 $4,800.00 + 주 $1,200.00)
    • 보유 주식: 60 × $150.00 = $9,000.00의 원가 기준
    • 현금 수령액: $0.00 — 전체 원천징수가 주식으로 지불됨

    이 금액들이 항목을 구성하며 조정됩니다: $6,000.00의 세금 + $9,000.00의 보유 주식 = 정확히 $15,000.00의 소득.

    2022-02-01 * "Hooli" "RSU Vesting Event"
      ; Ordinary income: 100 shares * $150.00
      Income:Salary:Hooli:RSU                   -15000.00 USD
      ; Tax withheld, funded by 40 of the 100 shares (40 * $150.00 = $6,000.00)
      Expenses:Taxes:Federal                      4800.00 USD
      Expenses:Taxes:State                        1200.00 USD
      ; The 60 shares you keep, at their $150.00 vesting-day basis
      Assets:Brokerage:Etrade:HOOL                  60 HOOL {150.00 USD}
      ; Retire the 100 unvested units the grant was tracking
      Assets:Grant:Unvested                       -100 HOOL.UNVEST
      Expenses:Grant:Vested                        100 HOOL.UNVEST

이 단일하고 균형 잡힌 거래는 전체 이벤트를 모델링합니다: 베스팅되지 않은 부여가 감소하고, 소득이 인식되며, 세금이 원천징수되고, 순 베스팅된 60주가 올바른 원가 기준으로 증권 계좌에 나타나 미래 양도소득 계산에 대비합니다.

원장에 복사할 가치가 있는 두 가지 세부 사항이 있습니다. 첫째, 원천징수를 계정별로 기록하고 총괄 조정 계정이 흡수하도록 두지 마십시오 — 연방 및 주 분개가 원천징수된 주식 가치와 합산되지 않으면 거래가 균형을 이루지 않고 Beancount가 이를 알려줍니다. 둘째, 분개 사이에 빈 줄을 두지 마십시오: 빈 줄은 거래를 종료하며 Beancount는 그 뒤에 오는 분개에 대해 구문 오류를 보고합니다.

고용주가 베스팅 가격으로 주식을 되가져가는 대신 공개 시장에서 원천징수된 주식을 매도하는 경우, 매도는 별도의 거래입니다 — Assets:Brokerage:Etrade:HOOL의 감소와 현금의 증가 — 그리고 매도 가격과 $150.00 기준 간의 차이는 소액의 자본 이득 또는 손실입니다. 이를 베스팅 항목에 포함하지 마십시오.

파트 7: 원장 프로젝트 관리

원장이 성장함에 따라 조직화가 중요해집니다.

버전 관리(Git)를 사용한 데이터 보호

원장은 텍스트 파일이므로 Git을 사용한 버전 관리에 완벽합니다. 이는 모든 변경 사항의 완전한 기록을 제공하여 실수로 인한 삭제나 오류로부터 보호합니다. 경고: 재무 데이터는 매우 민감합니다. GitHub/GitLab과 같은 서비스에서 개인 저장소를 사용하거나 자체 호스팅하십시오.

태그(#) 및 링크(^)로 구성

Beancount는 계정 외에 거래를 그룹화하는 두 가지 방법을 제공합니다:

  • 태그 (#): 이벤트나 프로젝트에 사용합니다. 예를 들어 특정 여행과 관련된 모든 거래를 필터링할 수 있습니다. 2024-07-20 * "Hotel" "Vienna" #trip-europe-2024
  • 링크 (^): 현금 인출과 관련 은행 수수료처럼 서로 다른 시기에 발생하는 재정적으로 관련된 거래를 연결하는 데 사용합니다.

파일 구조화를 위한 확장 가능한 전략 (include)

단일 대용량 파일은 관리하기 어렵습니다. include 지시문을 사용하여 원장을 여러 파일로 분할하십시오. main.bean:

; Main ledger file
 
; Global options
option "title" "My Personal Ledger"
option "operating_currency" "USD"
 
; Include account declarations and other files
include "accounts.bean"
include "years/2023.bean"
include "years/2024.bean"
include "events/trip-europe-2024.bean"

우선순위에 따른 강력한 조직 전략:

  1. 이벤트별: 주요 독립 이벤트(예: trip-europe-2024.bean)에 대한 별도 파일을 만듭니다.
  2. 카테고리/거래처별: 공과금이나 급여와 같이 매우 규칙적이고 반복적인 거래의 경우 자체 파일(예: recurring-rent.bean)로 그룹화합니다.
  3. 계정별: 특정 계정(이자, 수수료, 신용카드 결제)과 밀접하게 연결된 거래의 경우 계정별 파일을 고려하십시오.
  4. 날짜별: 기타 모든 일반 거래의 경우 연도(2024.bean) 또는 월(2024/07.bean)별 단순 분할이 효과적입니다.

파트 8: 결론

Beancount는 가파른 학습 곡선을 제공하지만 재무 데이터에 대한 비교할 수 없는 힘, 유연성 및 통제력으로 그 노력에 보답합니다. 복식 부기의 원칙과 Beancount가 제공하는 실용적인 도구를 수용함으로써 단순한 지출 추적에서 완전하고 정확하며 통찰력 있는 개인 재무 관리 시스템으로 나아갈 수 있습니다. 원장은 과거를 이해하고 미래를 계획하기 위한 영구적이고 사적인 귀중한 자산이 됩니다.

Beancount.io 시작하기

Beancount.io는 텍스트 기반 거래 기록을 손익계산서, 대차대조표, 시산표를 포함한 포괄적인 재무 제표로 변환하는 현대적인 클라우드 기반 재무 관리 플랫폼입니다. 플레인 텍스트 파일의 신뢰성과 강력한 시각화 도구를 결합하여 Beancount.io는 투자 성과에 대한 귀중한 통찰력을 얻으면서 재무 생활에 대한 정밀한 통제력을 유지하는 데 도움을 줍니다.

Beancount.io와 함께 재무 여정을 시작하십시오 — 각 등급에 포함된 내용은 현재 요금제 및 가격을 참조하십시오.

순자산 추세 차트, 계정 잔액 및 AI 어시스턴트 바를 보여주는 beancount.io 원장 대시보드

라이브 원장 탐색 →

순이익 차트와 수익/비용 분석이 있는 beancount.io의 Apple 공개 Beancount 원장 손익계산서

라이브 원장 탐색 →

순자산 차트와 자산/부채 세부 정보가 있는 beancount.io의 Apple 공개 Beancount 원장 대차대조표

라이브 원장 탐색 →

출처: https://beancount.io/ko/docs/introduction-to-beancount