본문으로 건너뛰기

Beancount와 Fava에서 계정 관리하기 완벽 가이드

· 약 11분
Mike Thrift
Mike Thrift
Marketing Manager

계정 체계(Chart of Accounts)는 Beancount 장부의 뼈대입니다. 잘 설계된 계정 계층 구조는 모든 보고서를 더 명확하게, 모든 쿼리를 더 빠르게, 그리고 매년 세금 신고 시즌을 덜 고통스럽게 만들어 줍니다. 이 가이드에서는 Beancount와 Fava에서 계정을 생성, 조회, 수정, 폐쇄하는 모든 것을 초보자 기초부터 고급 패턴까지 안내합니다.

다섯 가지 계정 유형

Beancount는 정확히 다섯 개의 루트 계정 유형을 가진 표준 복식부기 모델을 사용합니다:

유형용도기본 부호보고서
Assets보유 자산 (현금, 투자, 부동산)양수 (차변)대차대조표
Liabilities부채 (신용카드, 대출, 모기지)음수 (대변)대차대조표
Equity자본금, 이익잉여금, 기초잔액음수 (대변)대차대조표
Income수입원 (급여, 이자, 배당금)음수 (대변)손익계산서
Expenses비용 항목 (식비, 임대료, 공과금)양수 (차변)손익계산서

기본 회계 등식은 항상 성립합니다:

Assets + Expenses + Equity + Income + Liabilities = 0

유용한 판단 기준: 금액이 특정 기간 동안만 의미가 있다면(예: "이번 달 식비를 얼마나 썼을까?") Income 또는 Expenses를 사용하세요. 지속적인 잔액을 나타낸다면(예: "당좌 예금 계좌에 얼마가 있을까?") Assets 또는 Liabilities를 사용하세요.

계정 명명 규칙

Beancount의 계정 이름은 콜론으로 구분된 계층적 식별자입니다. 규칙은 다음과 같습니다:

  • 다섯 가지 루트 유형 중 하나로 시작해야 합니다: Assets, Liabilities, Equity, Income, Expenses
  • 각 구성 요소는 대문자 또는 숫자로 시작해야 합니다
  • 구성 요소에는 문자, 숫자, 하이픈을 사용할 수 있습니다 (공백이나 밑줄은 불가)
  • 최소 두 개의 구성 요소가 필요합니다 (예: Expenses:Food은 가능하지만 Expenses만으로는 불가)
  • 콜론(:)이 계층 수준을 구분합니다
; 유효한 계정 이름
Assets:US:BofA:Checking
Liabilities:CA:RBC:CreditCard
Equity:Retained-Earnings
Income:US:Acme:Salary
Expenses:Food:Groceries
Assets:Crypto:BTC-Holdings

; 유효하지 않은 계정 이름
assets:checking ; 소문자 루트 유형
Assets:my checking ; 공백 불가
Expenses ; 구성 요소가 하나뿐

대차대조표 계정의 권장 명명 패턴은 다음과 같습니다:

유형 : 국가 : 기관 : 계정 : 하위계정

예를 들어: Assets:US:Vanguard:401k:VTSAX 또는 Liabilities:US:Chase:Sapphire.

비용 및 수입 계정에는 카테고리 기반 명명을 사용하세요:

Expenses:Food:Groceries
Expenses:Housing:Utilities:Electric
Income:US:Employer:Salary

루트 이름 커스터마이징

다섯 가지 루트 유형의 이름을 현지화 또는 개인 취향에 맞게 변경할 수 있습니다:

option "name_assets"       "Actifs"
option "name_liabilities" "Passifs"
option "name_equity" "Capital"
option "name_income" "Revenus"
option "name_expenses" "Depenses"

계정 생성 (Open 지시문)

모든 계정은 거래를 기록하기 전에 open 지시문으로 선언해야 합니다. 전체 문법은 다음과 같습니다:

YYYY-MM-DD open Account [ConstraintCurrency,...] ["BookingMethod"]

기본 Open

2014-05-01 open Assets:US:BofA:Checking

통화 제약 조건 지정

통화를 제한하면 잘못된 통화로 기록하는 실수를 방지할 수 있습니다:

2014-05-01 open Assets:US:BofA:Checking       USD
2014-05-01 open Assets:Cash USD,CAD,EUR
2012-03-01 open Assets:US:ETrade:Main:ITOT ITOT

매매 방법 지정

투자 계정의 경우, 매도 시 어떤 로트를 매칭할지 지정합니다:

2014-02-11 open Assets:US:ETrade:IVV   IVV   "FIFO"
2014-02-11 open Assets:US:Schwab:AAPL AAPL "LIFO"
2014-02-11 open Assets:US:Fidelity GOOG "STRICT"

사용 가능한 매매 방법:

방법동작
"STRICT"기본값. 정확한 로트 지정 필요; 모호한 경우 오류 발생
"FIFO"선입선출 -- 가장 오래된 로트부터 감소
"LIFO"후입선출 -- 가장 최근 로트부터 감소
"AVERAGE"모든 로트를 병합하고 평균 비용을 재계산
"NONE"로트 매칭 없음; 모든 가격 허용

메타데이터 추가

2013-03-14 open Assets:US:BTrade:HOOLI
category: "taxable"
institution: "BTrade Corp"
account-number: "XX-1234-5678"

Open 날짜를 전략적으로 선택하기

  • Expenses:Groceries와 같은 범용 계정에는 생년월일을 사용하세요 (평생 합계를 볼 수 있습니다)
  • 직장 관련 수입 계정에는 입사일을 사용하세요
  • 기관별 계정(은행 계좌, 신용카드)에는 실제 계좌 개설일을 사용하세요

플러그인으로 자동 Open

프로토타이핑 중에 수동 open 지시문을 생략하고 싶다면:

plugin "beancount.plugins.auto_accounts"

이 플러그인은 거래에서 참조되는 모든 계정에 대해 자동으로 open 지시문을 생성합니다. 그러나 오타 감지 기능이 줄어들기 때문에 프로덕션 사용에는 권장하지 않습니다.

계정 조회 및 쿼리

bean-query (BQL) 사용

# 잔액이 있는 모든 계정 조회
bean-query ledger.beancount "SELECT account, units(sum(position)) GROUP BY 1"

# 비용 계정만 조회
bean-query ledger.beancount "SELECT account WHERE account ~ 'Expenses'"

# 누적 잔액이 포함된 계정 명세서
bean-query ledger.beancount \
"SELECT date, account, position, balance WHERE account ~ 'BofA:Checking'"

# 특정 계정의 분개장 보기
bean-query ledger.beancount "JOURNAL 'Assets:US:BofA:Checking'"

bean-report 사용

# 시산표 (모든 계정의 최종 잔액)
bean-report ledger.beancount balances

# 대차대조표
bean-report ledger.beancount balsheet

# 손익계산서
bean-report ledger.beancount income

# 특정 계정의 분개장
bean-report ledger.beancount journal -a Assets:US:BofA:Checking

Fava 사용

Fava는 계정을 탐색하기 위한 풍부한 시각적 인터페이스를 제공합니다:

  • 대차대조표 페이지: 모든 Assets, Liabilities, Equity의 인터랙티브 트리
  • 손익계산서 페이지: 모든 Income과 Expenses의 인터랙티브 트리
  • 계정 페이지: 계정 이름을 클릭하면 분개장, 변동, 잔액 탭을 볼 수 있습니다
  • 필터 바: 정규식 패턴으로 일치하는 계정만 표시 (예: Assets:US)

계정 수정 (이름 변경 및 재구성)

Beancount에는 이름 변경 지시문이 내장되어 있지 않지만, 여러 가지 방법이 있습니다.

1. 찾기 및 바꾸기

단순 검색-바꾸기가 가능하지만 주의해야 합니다 -- Assets:BankAssets:Bank:Cash에도 일치합니다. 단어 경계를 인식하는 패턴을 사용하세요:

sed -i 's/Assets:US:OldBank:Checking/Assets:US:NewBank:Checking/g' *.beancount

2. rename_accounts 플러그인

beancount_reds_plugins 패키지가 강력한 이름 변경 플러그인을 제공합니다:

plugin "beancount_reds_plugins.rename_accounts.rename_accounts" "{
'Expenses:Taxes' : 'Income:Taxes',
'Assets:House:Capital-Improvements' : 'Expenses:House:Appliances',
}"

이 플러그인의 특징:

  • 부분 문자열 매칭 사용 (Expenses:Taxes:Federal이 자동으로 Income:Taxes:Federal로 변경)
  • 역참조가 포함된 정규식 지원
  • 이름이 변경된 계정에 대해 자동으로 Open 지시문 생성
  • 소스 파일을 수정하지 않음 -- 메모리 내 표현만 변경
  • 플러그인 라인을 주석 처리하여 켜고 끌 수 있음

3. 폐쇄 후 재개설 패턴

실제 계좌 이전의 경우 (예: 은행 변경):

; 기존 계정
2010-01-01 open Assets:US:OldBank:Checking USD

; 기존 계정 폐쇄, 새 계정 개설
2024-06-15 close Assets:US:OldBank:Checking
2024-06-15 open Assets:US:NewBank:Checking USD

; 남은 잔액 이체
2024-06-15 * "새 은행으로 이체"
Assets:US:OldBank:Checking -5000.00 USD
Assets:US:NewBank:Checking 5000.00 USD

계정 폐쇄

close 지시문은 계정을 더 이상 활성 상태가 아닌 것으로 표시합니다:

2016-11-28 close Liabilities:CreditCard:CapitalOne

폐쇄의 효과

  • 폐쇄 날짜 이후에 기록이 발생하면 오류를 발생시킵니다
  • 활성 기간 외의 보고서에서 해당 계정을 필터링합니다
  • Fava에서 트리 뷰에서 계정을 숨기도록 합니다 (설정 가능)

계정을 폐쇄해야 할 때

  • 실제 은행 계좌나 신용카드를 해지할 때
  • 직장을 옮길 때
  • 계정 체계를 통합하거나 재구성할 때
  • 부동산을 매각하거나 투자 포지션을 청산할 때

폐쇄 전 항상 잔액이 0인지 확인하기

Beancount는 폐쇄 시 잔액이 0인지 자동으로 확인하지 않습니다. 수동으로 잔액 확인을 추가하세요:

2023-12-31 balance Assets:US:OldBank:Savings  0.00 USD
2023-12-31 close Assets:US:OldBank:Savings

계정 체계 구성하기

간단하게 시작하고 시간이 지나면서 다듬기

첫날부터 완벽한 계정 체계가 필요한 것은 아닙니다. 넓은 카테고리로 시작하고 보고 요구사항이 늘어남에 따라 세분화하세요. Beancount 개발자는 시간이 지나면서 자연스럽게 만들어진 250개 이상의 비용 계정을 사용한다고 합니다.

일반적인 구성 패턴

패턴 1: 기관별 (대차대조표 계정용)

Assets:US:BofA:Checking
Assets:US:BofA:Savings
Assets:US:Vanguard:401k:VTSAX
Assets:US:Vanguard:401k:VBTLX
Liabilities:US:Amex:Platinum
Liabilities:US:Chase:Sapphire

패턴 2: 카테고리별 (수입 및 비용 계정용)

Expenses:Food:Groceries
Expenses:Food:Restaurant
Expenses:Food:Coffee
Expenses:Housing:Rent
Expenses:Housing:Insurance
Expenses:Housing:Utilities:Electric
Expenses:Housing:Utilities:Water
Expenses:Transport:Subway
Expenses:Transport:Gas
Expenses:Health:Medical
Expenses:Health:Dental

패턴 3: 지역별 (다국적 재무 관리용)

Assets:US:BofA:Checking
Assets:CA:RBC:Checking
Assets:UK:HSBC:Current
Income:US:Acme:Salary
Income:CA:Freelance:Consulting

패턴 4: 자산 또는 프로젝트별 (부동산 또는 사업용)

Assets:US:Loft4530:Property
Income:US:Loft4530:Rental
Expenses:Loft4530:Electricity
Expenses:Loft4530:Insurance
Expenses:Loft4530:Maintenance

패턴 5: 관련 계정 미러링 (동일 기관 구성 요소)

Assets:US:ETrade:Cash
Assets:US:ETrade:AAPL
Income:US:ETrade:Dividends
Income:US:ETrade:PnL
Expenses:US:ETrade:Commissions

계층 구조는 얼마나 깊어야 할까?

  • 비용 카테고리에는 2-3단계가 일반적 (Expenses:Food:Restaurant)
  • 구조화된 대차대조표 항목에는 3-4단계 (Assets:US:Vanguard:401k:VTSAX)
  • 강력한 보고 이유가 없다면 5단계 이상은 피하세요
  • Fava가 트리 뷰에서 접어주므로 깊은 계층 구조도 잘 작동합니다

실전 예제

다음은 개인 재무를 위한 실용적인 계정 체계입니다:

; ── 자산 ──
Assets:US:BofA:Checking USD
Assets:US:BofA:Savings USD
Assets:US:Vanguard:401k:VTSAX VTSAX
Assets:US:Vanguard:Roth:VTSAX VTSAX
Assets:US:ETrade:Cash USD
Assets:US:ETrade:AAPL AAPL
Assets:Cash:Wallet USD

; ── 부채 ──
Liabilities:US:Amex:Platinum USD
Liabilities:US:Chase:Freedom USD
Liabilities:US:BofA:Mortgage USD

; ── 수입 ──
Income:US:Employer:Salary
Income:US:Employer:Bonus
Income:US:Employer:Match401k
Income:US:ETrade:Dividends
Income:US:BofA:Interest

; ── 비용 ──
Expenses:Food:Groceries
Expenses:Food:Restaurant
Expenses:Food:Coffee
Expenses:Housing:Rent
Expenses:Housing:Insurance
Expenses:Housing:Utilities:Electric
Expenses:Housing:Utilities:Water
Expenses:Transport:Subway
Expenses:Transport:Taxi
Expenses:Transport:Gas
Expenses:Health:Medical
Expenses:Health:Dental
Expenses:Health:Pharmacy
Expenses:Shopping:Clothing
Expenses:Shopping:Electronics
Expenses:Entertainment:Streaming
Expenses:Entertainment:Books
Expenses:Travel:Flights
Expenses:Travel:Hotels
Expenses:Taxes:Federal
Expenses:Taxes:State
Expenses:Taxes:SocialSecurity
Expenses:Taxes:Medicare

; ── 자본 ──
Equity:Opening-Balances
Equity:Retained-Earnings

Fava 전용 기능

최신 상태 표시기

계정 관리를 위한 Fava의 가장 유용한 기능 중 하나입니다. 계정에 다음 메타데이터를 추가하세요:

2014-05-01 open Assets:US:BofA:Checking  USD
fava-uptodate-indication: TRUE

그러면 Fava가 계정 옆에 색상 점을 표시합니다:

  • 초록색 점: 마지막 항목이 통과한 잔액 확인 (계정이 대사 완료됨)
  • 빨간색 점: 마지막 항목이 실패한 잔액 확인 (확인 필요)
  • 노란색 점: 마지막 항목이 있지만 잔액 확인이 아님 (아직 대사되지 않음)
  • 회색 점: 조회 기간 내 활동 없음

회색 점 기준을 설정합니다:

2016-06-14 custom "fava-option" "uptodate-indicator-grey-lookback-days" "60"

트리 뷰 제어

Fava에서 계정을 표시하는 방식을 제어합니다:

; 트리에서 폐쇄된 계정 표시
2016-06-14 custom "fava-option" "show-closed-accounts" "true"

; 거래가 없는 계정 표시
2016-06-14 custom "fava-option" "show-accounts-with-zero-transactions" "true"

; 잔액이 0인 계정 표시
2016-06-14 custom "fava-option" "show-accounts-with-zero-balance" "true"

접기 패턴

깊이 중첩된 계정을 기본적으로 접어서 표시합니다:

; 3단계 이상 깊은 모든 계정 접기
2016-06-14 custom "fava-option" "collapse-pattern" ".*:.*:.*"

; 특정 하위 트리 접기
2016-06-14 custom "fava-option" "collapse-pattern" "Assets:US:Vanguard:.*"

계정 분개장에 하위 계정 포함

Fava에서 계정의 분개장을 볼 때 하위 계정의 기록도 포함합니다:

2016-06-14 custom "fava-option" "account-journal-include-children" "true"

가독성을 위한 부호 반전

기본적으로 수입과 부채는 음수(자연 부호)로 표시됩니다. 양수로 표시하려면:

2016-06-14 custom "fava-option" "invert-income-liabilities-equity" "true"

문서 관리

Fava는 계정 계층 구조와 문서 처리를 통합합니다. 문서 루트를 설정하세요:

option "documents" "/path/to/documents"

그런 다음 계정 경로별로 파일을 정리합니다:

/path/to/documents/
Assets/
US/
BofA/
Checking/
2024-01-15.january-statement.pdf
2024-02-15.february-statement.pdf
Liabilities/
US/
Amex/
Platinum/
2024-03-15.march-bill.pdf

YYYY-MM-DD로 시작하는 파일은 Fava가 자동으로 인식하여 해당 계정의 분개장 뷰에 표시합니다.

흔한 실수와 예방법

1. 계정 이름 오타

Expenses:Grocries와 같은 오타 하나가 의도하지 않은 완전히 새로운 계정을 만듭니다.

해결책: 프로덕션에서 auto_accounts 플러그인을 사용하지 마세요. 명시적인 open 지시문을 요구하세요. Beancount는 선언되지 않은 계정에 대해 즉시 오류를 발생시킵니다:

ERROR: Invalid reference to unknown account 'Expenses:Grocries'

2. 통화 제약 조건 누락

통화 제약 조건 없이는 USD 전용 계정에 실수로 EUR를 기록할 수 있습니다.

해결책: open 지시문에 항상 통화를 지정하세요:

2014-01-01 open Assets:US:BofA:Checking  USD

3. 정기적인 잔액 확인 미실시

정기적인 잔액 확인이 없으면 오류가 몇 달 동안 발견되지 않을 수 있습니다.

해결책: 모든 활성 계정에 대해 월별 잔액 확인을 추가하세요:

2024-01-01 balance Assets:US:BofA:Checking   5,432.10 USD
2024-02-01 balance Assets:US:BofA:Checking 4,890.55 USD
2024-03-01 balance Assets:US:BofA:Checking 6,123.00 USD

4. 일관성 없는 명명 규칙

패턴을 혼합하면(예: Expenses:Food vs Expenses:US:Food) 쿼리와 보고서가 혼란스러워집니다.

해결책: 규칙을 정하고 일관되게 적용하세요. 대차대조표 계정에는 국가 접두사를, 수입/비용에는 카테고리 기반 명명을 사용하세요.

5. 잔액 0 확인 없이 폐쇄

close 지시문은 잔액을 확인하지 않습니다. 아직 돈이 남아있는 계정을 폐쇄할 수 있습니다.

해결책: 항상 close와 잔액 확인을 함께 사용하세요:

2023-12-31 balance Assets:US:OldBank:Savings  0.00 USD
2023-12-31 close Assets:US:OldBank:Savings

고급 패턴

다중 통화 팁

전용 보고서 열을 위해 운영 통화를 선언하세요:

option "operating_currency" "USD"
option "operating_currency" "EUR"

다중 통화 계정의 경우 허용되는 모든 통화를 나열하세요:

2014-01-01 open Assets:Cash  USD,CAD,EUR

다중 통화의 잔액 확인은 통화별로 하나씩 수행해야 합니다:

2024-01-01 balance Assets:Cash     562.00 USD
2024-01-01 balance Assets:Cash 210.00 CAD
2024-01-01 balance Assets:Cash 60.00 EUR

초기 설정을 위한 Pad와 Balance

pad 지시문을 사용하면 수동으로 금액을 계산하지 않고도 기초 잔액을 설정할 수 있습니다:

2000-05-28 open Assets:US:BofA:Checking  USD
2000-05-28 pad Assets:US:BofA:Checking Equity:Opening-Balances
2024-07-01 balance Assets:US:BofA:Checking 12,345.67 USD

Beancount가 자동으로 조정 거래를 생성합니다. 중요한 주의사항: 잔액 확인은 지정된 날짜의 시작 시점 잔액을 확인합니다. 따라서 1월 2일의 pad는 1월 3일 이후의 잔액 확인이 필요합니다.

분류를 위한 계정 메타데이터

open 지시문에 메타데이터를 사용하여 맞춤 보고서를 만들 수 있습니다:

2014-01-01 open Assets:US:BofA:Checking  USD
category: "liquid"
tax-status: "taxable"

2014-01-01 open Assets:US:Vanguard:401k USD
category: "retirement"
tax-status: "tax-deferred"

BQL로 메타데이터를 쿼리합니다:

SELECT account, META("category") WHERE META("tax-status") = "taxable"

계정 이력을 위한 메모

계정 분개장에 날짜가 포함된 메모를 첨부합니다:

2024-03-20 note Assets:US:BofA:Checking "분쟁 청구 관련 전화, 참조번호 #12345"
2024-06-01 note Liabilities:US:Chase:Sapphire "유지 부서 전화 후 연회비 면제"

이 메모들은 Fava의 계정 분개장에 표시되어 감사 추적 기록을 제공합니다.

추적 계정 및 자금 배분

Beancount에는 Ledger의 가상 기록(virtual postings) 기능이 없지만, 하위 계정을 사용하여 자금을 배분할 수 있습니다:

; 당좌 예금 내 비상금 추적
Assets:US:BofA:Checking:EmergencyFund USD
Assets:US:BofA:Checking:Operating USD

; 환급금 추적
Assets:Receivables:Employer:Travel USD
Assets:Receivables:Friend:SharedDinner USD

세금 신고에 유리한 비용 카테고리

세금 신고를 더 쉽게 만들도록 비용 계정을 구성하세요:

Expenses:Health:Medical:Deductible
Expenses:Charity:Deductible
Expenses:Business:Office
Expenses:Business:Equipment
Expenses:Education:Professional

빠른 참조 치트 시트

작업문법
계정 개설2024-01-01 open Assets:US:BofA:Checking USD
계정 폐쇄2024-12-31 close Assets:US:OldBank:Savings
잔액 확인2024-01-01 balance Assets:US:BofA:Checking 5,432.10 USD
잔액 패딩2024-01-01 pad Assets:Cash Equity:Opening-Balances
메모 추가2024-01-15 note Assets:US:BofA:Checking "월간 대사 완료"
문서 첨부2024-01-15 document Assets:US:BofA:Checking "/path/to/statement.pdf"
메타데이터 추가open 다음 줄에 들여쓰기된 키-값 쌍
자동 Open (개발용)plugin "beancount.plugins.auto_accounts"
통화 제한2024-01-01 open Assets:Cash USD,EUR
매매 방법 설정2024-01-01 open Assets:US:ETrade:AAPL AAPL "FIFO"

요약

계정을 잘 관리하는 것은 효과적인 Beancount 장부 기록의 기초입니다. 핵심 요점은 다음과 같습니다:

  1. 항상 명시적인 open 지시문을 사용하세요 -- 오타를 잡아내고 규율을 강화합니다
  2. 통화 제약 조건을 추가하세요 -- 통화 간 오류를 방지합니다
  3. 일관된 명명 규칙을 사용하세요 -- 대차대조표에는 기관별, 수입/비용에는 카테고리별
  4. 간단하게 시작하고 다듬어 가세요 -- 보고 요구사항이 늘어남에 따라 계정을 세분화하세요
  5. 정기적으로 잔액을 확인하세요 -- 월별 대사가 오류를 일찍 잡아냅니다
  6. 계정을 올바르게 폐쇄하세요 -- 잔액 0 확인과 함께
  7. Fava의 기능을 활용하세요 -- 최신 상태 표시기, 접기 패턴, 문서 통합
  8. 메타데이터를 활용하세요 -- 맞춤 분류 및 보고를 위해

즐거운 회계 되세요!

References: