이 가이드는 강력한 오픈소스 평문 회계 도구인 Beancount를 사용한 평문 회계의 모범 사례를 종합합니다. 기초 철학, 기초에서 고급까지의 문법, 복잡한 자산에 대한 실용적 사례 연구, 그리고 장기적인 장부 관리 전략을 다룹니다.
파트 1: "왜" - 현명한 장부 기록의 기초
"어떻게"를 파고들기 전에 "왜"를 이해하는 것이 중요합니다. 효과적인 부기는 개인 재무 관리의 토대이자 재무적 명확성과 자유를 향한 필수 단계입니다.
지출 추적을 넘어: 재무적 명확성으로 가는 길
단순한 지출 추적 앱은 돈이 어디로 갔는지 알려줍니다. 견고한 회계 시스템은 그것과 그 이상을 알려줍니다. 즉 순자산, 현금 흐름, 투자 성과를 포함한 재무 건전성의 완전한 그림을 제공합니다. 주요 목표는 관측 가능성(observability) — 재무 생활에 대한 명확하고 데이터 기반의 이해를 얻는 것으로, 이를 통해 정보에 입각한 결정을 내리고, 위험을 평가하며, 은퇴와 같은 장기 목표를 향해 나아갈 수 있습니다.
왜 복식 부기인가? 균형 잡힌 시스템의 힘
단식부기(단순한 지출 목록)와 달리, 복식부기 방식은 모든 거래를 최소 두 개의 계정 사이에서 가치의 흐름으로 기록합니다. 핵심 원칙은 기본 회계 방정식입니다:
이 시스템은 장부가 항상 균형을 이루도록 보장하여 오류를 극적으로 줄입니다. 재무상태표(무엇을 소유하고 빚졌는지)와 손익계산서(무엇을 벌고 썼는지)와 같은 필수 보고서를 생성하여 완전한 재무 그림을 제공합니다.
파트 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는 장부의 구조를 형성하는 다섯 가지 최상위 계정 유형을 사용합니다:
| 계정 유형 | 설명 | 일반적인 잔액 |
|---|---|---|
Assets | 소유한 것 (현금, 은행 계좌, 투자, 부동산). | 양수 |
Liabilities | 빚진 것 (신용카드 부채, 대출, 모기지). | 음수 |
Income | 돈이 들어오는 곳 (급여, 보너스, 이자). | 음수 |
Expenses | 돈이 나가는 곳 (식비, 임대료, 여행, 세금). | 양수 |
Equity | 순자산; 초기 잔액에 사용됩니다. | 음수 |
Beancount 방정식
Beancount는 전체 장부의 모든 전기 합계가 0이 되는 자체 버전의 회계 방정식을 강제합니다:
이것이 관례적으로 Income, Liabilities, Equity 계정이 음수 값을 갖는 이유입니다. 이들은 Assets와 Expenses를 증가시키는 자금의 _원천_입니다.
파트 3: Beancount의 언어 - 핵심 구문
Beancount의 모든 항목은 날짜로 시작하는 지시문입니다.
계정 정의 (open) 및 상품
계정을 사용하기 전에 open 지시문으로 선언해야 합니다. 또한 보유할 통화나 "상품(commodity)"을 선택적으로 지정할 수 있습니다.
; 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)처럼 직접 정의한 사용자 정의 단위일 수 있습니다.
첫 거래 기록 (*)
거래는 가장 흔한 항목입니다. 날짜, 플래그(완전한 거래는 *, 불완전한 거래는 !), 선택적 수취인, 설명으로 시작합니다. 이어지는 각 줄(두 칸 들여쓰기)은 계정에 대한 "전기(posting)"입니다.
; 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는 다중 통화 회계에 탁월합니다.
- 단위당 환산 가격을 지정하려면
@를 사용하세요. - 환산의 총 비용을 지정하려면
@@를 사용하세요.
; 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 USDEquity:Opening-Balances 계정은 알 수 없거나 외부 원천에서 장부로 들어오는 금액을 보관합니다.
정확한 불일치가 중요하지 않은 빠른 수정의 경우, pad 지시문이 후속 balance 단언을 충족하도록 계정 잔액을 자동으로 조정하고 그 차액을 자본 계정에 기록할 수 있습니다. 이것은 주의해서 사용하세요. 더 큰 문제를 숨길 수 있습니다. 명시적 조정이 일반적으로 더 안전합니다.
파트 5: 고급 및 현실적인 거래 패턴
부채 추적: 미수금 및 미지급금 관리
복식부기 회계는 당신에게 빚진 돈(Assets:Receivables)이나 당신이 빚진 돈(Liabilities:Payable)을 추적하는 데 완벽합니다.
예시: 그룹 저녁 식사로 $90를 지불했고, 친구 Bob이 $45 몫을 당신에게 빚졌습니다.
-
초기 지출과 미수금을 기록합니다:
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 -
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이고, 장부는 완벽하게 균형을 이룹니다.
자산 대 비용: 자동차 구매와 감가상각
자동차와 같은 큰 구매는 단순한 비용이 아니라 시간이 지남에 따라 가치가 하락(감가상각)하는 자산의 취득입니다.
-
구매를 자산으로 기록합니다:
2023-01-15 * "Toyota Dealer" "Purchase of a new car" Assets:Car:ToyotaCamry 30000.00 USD Assets:Bank:US:Chase:Checking -30000.00 USD -
연간 감가상각을 기록합니다: 자동차가 매년 $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: 부동산 회계
주택은 종종 가장 큰 자산이자 부채입니다. 이를 모델링하는 방법은 다음과 같습니다.
-
계정과 사용자 정의 상품 생성:
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 -
구매 기록: $100k 계약금과 $400k 대출로 $500k 주택을 구매한다고 가정합니다.
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 -
월별 모기지 상환 기록: 월별 상환금은 원금(부채 감소)과 이자(비용)로 구성됩니다.
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 -
가치 상승 추적 (미실현 이익): 주택의 시장 가치는 변합니다. 공식 순자산에 영향을 주지 않으면서(매도할 때까지 이익이 실현되지 않으므로) 이를 추적하려면 "가상" 통화와 함께 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는 흔한 형태의 주식 보상입니다. 이에 대한 회계는 초기 부여, 베스팅 이벤트, 세금 원천징수를 추적하는 것을 포함합니다.
-
초기 설정: 베스팅된(
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 -
초기 부여 기록: 이 거래는 총 부여가 베스팅되지 않은 자산 계정으로 이동하는 것을 보여줍니다. 아직 과세 대상이 아니므로 전체 항목이 추적 상품
HOOL.UNVEST로 표시됩니다.2021-02-01 * "Hooli" "Initial RSU Grant" Assets:Grant:Unvested 1000 HOOL.UNVEST Income:Grant:Awards -1000 HOOL.UNVEST -
베스팅 이벤트 기록: 이것이 핵심 거래입니다. 주식이 베스팅되면 소득을 인식하고, 고용주가 세금을 내기 위해 주식을 원천징수하며, 나머지를 당신이 보유합니다. 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"우선순위에 따른 견고한 조직 전략:
- 이벤트별: 주요하고 독립적인 이벤트(예:
trip-europe-2024.bean)에 대해 별도의 파일을 만드세요. - 카테고리/수취인별: 공과금이나 급여처럼 매우 규칙적이고 반복적인 거래는 자체 파일에 그룹화하세요 (예:
recurring-rent.bean). - 계정별: 특정 계정과 밀접하게 연결된 거래(이자, 수수료, 신용카드 결제)의 경우 계정별 파일을 고려하세요.
- 날짜별: 다른 모든 일반 거래의 경우 연도별(
2024.bean) 또는 월별(2024/07.bean)로 간단히 나누는 것이 효과적입니다.
파트 8: 결론
Beancount는 가파른 학습 곡선을 제공하지만 재무 데이터에 대한 비할 데 없는 힘, 유연성, 통제력으로 그 노력을 보상합니다. 복식부기 회계의 원칙과 Beancount가 제공하는 실용적인 도구를 받아들임으로써 단순한 지출 추적에서 완전하고 정확하며 통찰력 있는 개인 재무 관리 시스템으로 나아갈 수 있습니다. 장부는 과거를 이해하고 미래를 계획하기 위한 영구적이고 사적이며 매우 귀중한 자산이 됩니다.
Beancount.io 시작하기
Beancount.io는 텍스트 기반 거래 기록을 손익계산서, 재무상태표, 시산표를 포함한 종합적인 재무제표로 변환하는 현대적인 클라우드 기반 재무 관리 플랫폼입니다. 평문 파일의 안정성과 강력한 시각화 도구를 결합하여 Beancount.io는 재무 생활에 대한 정확한 통제를 유지하면서 투자 성과에 대한 귀중한 통찰력을 얻도록 도와줍니다.
Beancount.io와 함께 재무 여정을 시작하세요 — 각 등급에 포함된 내용은 현재 요금제 및 가격을 확인하세요.


