Beancount에서 부동산 거래 모델링
부동산 거래는 한 가정의 평생 동안 가장 큰 재무 활동이 될 수 있습니다. 이 글에서는 Beancount에서 부동산을 모델링하는 방법을 설명합니다. 저는 부동산을 자산으로 보고, 주택의 가치 상승을 실현되지 않은 이익으로 처리합니다. 또한 모기지는 부채로 모델링하고, 이자를 비용으로 간주합니다.
예를 들어, A씨가 2020년 1월 1일에 캘리포니아 주 XYZ 시 123 ABC 스트리트에 위치한 고급 주택을 100만 달러에 구매했다고 가정해 보겠습니다. 금리는 3.0%, 계약금은 20%, 대출금액은 800,000 달러입니다.
항목 | 금액 |
---|---|
대출 금액 | 800,000 |
금리 | 3% |
대출 기간 | 30년 |
대출 총 비용 | 1,478,219.62 |
월 상환액 | 4,106.17 |
주택 보험 | 연 1,300 달러 (총 39,000) |
재산세 | 연 7,500 달러 (총 225,000) |
대출 상환 완료 시점 | 2049년 12월 |
총 이자 지급액 | 414,219.62 |
계정 생성
먼저 주택을 자산(Asset)으로 취급합니다. 자산으로 등록되므로 단위를 지정해야 합니다. 여기서는 단위 수량을 1로 두며, 여러 채가 있을 경우 각각 별도의 자산 계정을 만들게 됩니다. 즉, 한 채는 하나의 자산이며, 이 자산의 특별한 단위는 값이 1일 수밖에 없습 니다.
2019-12-31 commodity HOUSE.ABC
name: "123 ABC Street, XYZ City, CA, 12345"
2019-12-31 open Assets:Property:US:CA:123ABC HOUSE.ABC
2019-12-31 open Liabilities:Bank:US:SomeBank:Mortgage:Loan USD
첫 번째 줄에서 주택을 나타내는 상품 단위를 정의했습니다. 네 번째 줄에서는 앞서 정의한 상품 단위를 보유하는 자산 계정을 만들었고, 다섯 번째 줄에서는 대출 은행을 위한 부채 계정을 정의했습니다. 부채이므로 Liabilities 카테고리에 속합니다.
구매
위와 같이 계정을 만든 뒤 주택을 구매하는 행위는 다음과 같습니다.
borrowing money (debt) + spending money (down payment) = 1 house in asset
부동산을 구매할 때 가장 중요한 참고 자료는 구매자 정산서(Buyer’s Settlement Statement)이며, 여기에는 자금 흐름이 명확히 표시됩니다.
2020-01-01 * "Buying the house"
Assets:Property:US:CA:123ABC 1 HOUSE.ABC {1,000,000 USD}
Assets:Bank:US:SomeBankA -100,000 USD
Assets:Bank:US:SomeBankB -101,000 USD
Liabilities:Bank:US:SomeBank:Mortgage:Loan -800,000.00 USD
Expenses:Home:Insurance 1,000 USD
Expenses:Home:Mortgage:Loan:ClosingCost
위 거래는 주택을 구매하면서 은행에서 돈을 인출(계약금 및 기타 비용)하고, 대출을 받아 부채를 증가시키며, 주택을 자산으로 추가하는 과정을 보여줍니다.
모기지 상환
위 구매 기록에 따르면 현재 800,000 달러를 빚지고 있습니다. 이자는 매월 상환액에 포함되며, 초기에는 이자 비중이 높습니다.
대출 상환을 기록하려면 은행 명세서에서 매월 원금 상환액을 확인하고, 나머지는 이자로 처리하면 됩니다.
2020-02-01 * "Mortgage payment"
Assets:Bank:US:SomeBank:Saving:Joint -3,372.83 USD
Liabilities:Bank:US:SomeBank:Mortgage:Loan 1,376.26 USD
Expenses:Home:Mortgage:Loan:Interest
이 항목은 공동 저축 계좌에서 월 상환액을 차감하고, 원금 상환은 부채를 감소시키며, 이자 부분은 비용으로 기록합니다.
가치 상승
부동산의 가치 상승을 기록하고 싶다면 별도의 계정을 만들 수도 있습니다. 하지만 저는 다음과 같은 이유로 이 방법을 사용하지 않습니다.
- 현재 주택 가치는 추정치에 불과하며, Redfin이나 Zillow와 같은 사이트에서 얻는 평가액은 실질적인 가치를 반영하지 못합니다. 따라서 실시간으로 총 자산에 반영하는 것은 의미가 적습니다.
- 모기지를 모두 상환하기 전까지 현금 흐름이 마이너스라면, 주택은 여전히 부채 성격을 가지고 있습니다. 따라서 자산에 미리 포함시키면 실제보다 부가된 것처럼 보일 수 있어 이를 피하고자 합니다.
제가 사용하는 방법은 가상 통화 단위(virtual currency)인 USD.UNVEST
를 활용하는 것입니다. 기본 통화가 USD라면, USD.UNVEST
는 새로운 Commodity을 만들 필요 없이 특별 통화로 자산 가치를 표시합니다. 이렇게 하면 주택 가치 상승은 별도 통화에 기록되어 재무제표에는 반영되지 않습니다.
2020-01-01 price HOUSE.ABC 1,000,000 USD
2025-01-01 price HOUSE.ABC 1,400,000 USD.UNVEST
정기적으로 USD.UNVEST
가격을 업데이트하면 Fava의 Commodity 페이지에서 주택 가격 추이를 확인할 수 있습니다. 하지만 대차대조표에서는 여전히 최초 거래 시점의 가격이 표시됩니다. 즉, 총 자산은 계약금과 현재까지 상환한 원금만을 포함하며, 주택을 실제로 매입했을 때만 변동됩니다.
판매
아직 실제 매각 사례가 없고 중간에 발생하는 다양한 비용이 명확하지 않으므로 가상의 시나리오를 제시합니다.
2025년 1월 1일에 주택 가치가 1,400,000 달러로 상승했고, 다음과 같은 참고 데이터가 있다고 가정합니다.
항목 | 금액 |
---|---|
잔액 | 709,656.20 |
중개 수수료 (6%) | 72,000 |
기타 마감 비용 | 10,000 |
A씨가 주택을 1,300,000 달러에 매각한다고 하면 다음과 같이 기록합니다.
2025-01-01 * "Selling the house"
Assets:Property:US:CA:123ABC -1 HOUSE.ABC {1,300,000 USD}
Liabilities:Bank:US:SomeBank:Mortgage:Loan 709,656.20 USD
Expenses:Home:Agent:Fee 72,000 USD
Expenses:Home:ClosingCost 10,000 USD
Expenses:Home:Tax 90,000 USD
Assets:Bank:US:SomeBankA
여기서는 5년 중 2년을 자가 거주했으므로 500,000 달러의 가치 상승에 대해 세금을 부과하지 않았다고 가정했습니다. 최종적으로 A씨의 계좌에 입금되는 금액은 418,343.8 달러이며, 이 중 200,000 달러는 계약금, 약 100,000 달러는 이미 지급한 이자입니다. 따라서 순수익은 약 100,000 달러 정도가 됩니다. 실제로는 임대료 절감, 유지보수 비용 등 다양한 요소가 추가로 고려되어야 합니다.
대차대조표에 이를 반영하려면 다음과 같이 가격을 업데이트합니다.
2025-01-01 price HOUSE.ABC 1,300,000 USD