본문으로 건너뛰기

analytics

---
title: "실시간 재무 분석"
tags:
[
Beancount,
Fava,
재무 분석,
오픈 소스 회계,
개인 금융,
소규모 비즈니스 금융
]
keywords:
[
실시간 분석,
복식 부기 회계,
일반 텍스트 원장,
재무 시각화,
대시보드 통합
]
description: "Beancount와 Fava가 어떻게 실시간 재무 분석에 대한 간소화된 접근 방식을 제공하여 강력한 시각화 및 통합으로 재정을 관리하는 능력을 향상시키는지 알아보세요."
image: "https://opengraph-image.blockeden.xyz/api/og-beancount-io?title=%EC%8B%A4%EC%8B%9C%EA%B0%84%20%EC%9E%AC%EB%AC%B4%20%EB%B6%84%EC%84%9D"
authors: [mike]
---

# Fava와 Beancount를 이용한 실시간 재무 분석

## 소개

**Beancount**는 일반 텍스트 파일을 원장으로 사용하는 오픈 소스 복식 부기 회계 시스템입니다. 재정 추적에 있어 단순성, 투명성 및 유연성을 강조합니다. **Fava**는 Beancount를 위한 강력한 웹 기반 프런트 엔드로, 보고서, 시각화를 보고 원장을 관리하기 위한 인터랙티브 인터페이스를 제공합니다. 이 보고서에서는 Beancount와 Fava의 핵심 기능과 이러한 도구를 사용하여 실시간 또는 거의 실시간 재무 분석을 달성하는 방법을 살펴봅니다. 자동화 및 데이터 새로 고침을 위한 구성 팁, Fava의 시각화 기능 (즉각적인 현금 흐름 보기 및 추세 파악), 외부 대시보드 (Grafana, Metabase 등)와의 통합, 사용자 지정 대시보드 및 플러그인 예제, 개인 및 소규모 비즈니스 금융의 사용 사례, 다른 플랫폼과의 비교 (Power BI, QuickBooks) 및 데이터 기반 통찰력을 위해 Fava + Beancount를 사용하는 경우의 장단점을 다룹니다.

![analytics](https://opengraph-image.blockeden.xyz/api/og-beancount-io?title=%EC%8B%A4%EC%8B%9C%EA%B0%84%20%EC%9E%AC%EB%AC%B4%20%EB%B6%84%EC%84%9D)

## Beancount와 Fava의 핵심 기능

### Beancount (일반 텍스트 회계 엔진)

- **일반 텍스트의 복식 부기 원장:** Beancount는 트랜잭션을 단일 `.beancount` 텍스트 파일 (또는 함께 포함된 여러 파일)에 저장합니다. 모든 트랜잭션은 계정 간에 균형을 이루어야 하며 (총 차변 = 총 대변), 회계 무결성을 적용합니다. 일반 텍스트 형식은 데이터가 사람이 읽을 수 있고, 버전 제어가 가능하며, 특정 공급 업체에 잠겨 있지 않음을 의미합니다.
- **유연한 계층적 계정:** 계층 구조로 계정 (예: `자산:은행:체킹`, `비용:식비:커피`)을 정의할 수 있습니다. Beancount는 계정 차트에 대해 독단적이지 않으므로 개인 금융, 소규모 비즈니스 장부, 투자 등에 적합합니다. _“유연성: 개인 금융, 소규모 비즈니스 부기, 암호화폐, 주식 투자 등에 적합합니다.”_
- **다중 통화 및 상품:** Beancount는 다중 통화 및 상품 (예: 주식, 암호화폐)을 기본적으로 지원합니다. 다른 통화로 트랜잭션을 기록하고, 환율 (가격 지시문)을 정의하고, 원가를 추적할 수 있습니다. 가격 데이터가 제공되면 "원가" 또는 "시가"로 보고서를 생성할 수 있습니다. 따라서 포트폴리오 및 국제 금융에 적합합니다.
- **자동화된 검사 및 잔액:** 시스템은 **잔액 어설션** (특정 날짜에 계정 잔액이 _어떻게 되어야 하는지_ 선언할 수 있으며, 일치하지 않으면 Beancount에서 오류가 발생함) 및 장부 마감을 위한 **잔액 트랜잭션**을 지원합니다. 또한 **자본 조정 시작/마감 항목**을 지원하고 기간 마감을 위한 이익 잉여금 계산을 유지합니다. 이는 장부가 일관성을 유지하고 오류를 조기에 포착하는 데 도움이 됩니다.
- **강력한 쿼리 및 보고 엔진:** Beancount는 쿼리 언어 BQL (Beancount Query Language)과 보고서를 생성하기 위한 `bean-balance`, `bean-register` 및 `bean-query`와 같은 명령줄 도구와 함께 제공됩니다. 원장을 쿼리하여 사용자 지정 보고서 (예: 수취인별 비용 목록, 특정 기간의 현금 흐름)를 생성할 수 있습니다. 기본적으로 원장을 데이터베이스처럼 취급합니다. 수천 건의 트랜잭션이 있는 경우에도 빠르며 CSV로 출력하거나 Excel/LibreOffice로 직접 출력할 수 있습니다 (선택적 추가 기능 포함).
- **플러그인을 통한 확장성:** Beancount는 Python으로 작성되었으며 사용자 지정 **플러그인**을 통해 기능을 확장할 수 있습니다. 플러그인은 파일이 처리될 때 추가 규칙 또는 계산을 적용할 수 있습니다. (예를 들어, 세금 로트를 처리하거나 구매에 비용이 누락되지 않도록 하는 플러그인이 있습니다.) 플러그인 시스템 및 Python API를 통해 고급 사용자는 사용자 지정 동작을 스크립팅하거나 Beancount를 다른 시스템과 통합할 수 있습니다.
- **외부 데이터를 위한 임포터:** 중요한 실용적인 기능은 데이터를 가져오기 위한 Beancount의 _ingest_ 프레임워크 (예: 은행 명세서)입니다. CSV, OFX, PDF 명세서 등을 구문 분석하고 이를 Beancount 항목으로 변환하는 임포터 플러그인을 작성하거나 사용할 수 있습니다. 이는 자동화에 필수적입니다 (자세한 내용은 나중에 설명).
- **감사 가능하고 버전 제어에 적합:** 일반 텍스트이므로 원장을 Git 또는 기타 버전 제어에 보관할 수 있습니다. 모든 변경 사항은 투명하며 편집에 대한 전체 기록이 있습니다. 따라서 감사를 수행하거나 변경 사항을 검토하는 것이 간단합니다 (많은 사용자가 매일 변경 사항을 Git 저장소에 커밋하여 모든 금융 항목에 대한 변조 방지 로그를 제공함). 이 수준의 투명성은 폐쇄형 회계 소프트웨어와 차별화됩니다. _“SaaS 잠금 없음 — 강력한 보고 기능으로 깨끗하고 투명한 회계 처리.”_

### Fava (Beancount를 위한 웹 인터페이스)

- **인터랙티브 웹 UI:** Fava는 Beancount 원장을 풍부한 UI로 렌더링하는 로컬 웹 서버를 제공합니다. 브라우저에 주요 보고서 (손익 계산서, 대차 대조표 등), 계정 등록 및 저널을 인터랙티브 컨트롤과 함께 표시합니다. UI는 명령줄에 비해 동적이고 사용자 친화적입니다. 간단한 `fava yourfile.beancount`로 시작하면 장부에 대한 웹 앱이 제공됩니다.
- **내장된 그래프 및 차트:** Fava는 데이터를 시각화하는 데 도움이 되는 그래프를 생성합니다. 예를 들어 시간 경과에 따른 **순자산** 라인 차트, 월별 수입 대 비용 막대 차트 및 비용 분석을 위한 원형/트리맵 차트가 포함됩니다. 이러한 시각 자료는 데이터로 업데이트되고 다양한 보기 (예: 투자에 대한 "원가" 대 "시가")를 지원합니다. 이러한 시각화 기능에 대해서는 나중에 자세히 살펴봅니다.
- **필터링 및 검색:** Fava 페이지 상단의 필터 막대를 사용하면 데이터를 실시간으로 분할하고 분석할 수 있습니다. 시간 (예: 연도, 분기, 월), 계정 정규식, 수취인, 내레이션 또는 태그/링크별로 필터링할 수 있습니다. 따라서 _실시간 데이터 검사_를 쉽게 수행할 수 있습니다. 예를 들어 "Tag = Travel" 및 "Year = 2025"로 빠르게 필터링하여 2025년의 모든 출장비를 합계와 함께 확인할 수 있습니다. 인터페이스는 이 필터 막대 또는 쿼리 페이지 (BQL 쿼리를 직접 실행할 수 있음)를 통해 복잡한 쿼리를 지원합니다.
- **다중 파일 지원 및 통합:** Fava는 여러 Beancount 파일을 한 번에 로드할 수 있으며 (원장을 분리하는 경우 유용함) 파일을 전환할 수 있습니다. 필요한 경우 통합할 수도 있습니다 (예: 개인 및 비즈니스 원장을 함께 볼 수 있음).
- **데이터 입력 및 편집:** Fava는 읽기 전용이 아니라 **편집기**와 트랜잭션 입력 양식이 있습니다. 웹 양식을 통해 새 트랜잭션을 추가할 수 있습니다 (.beancount 파일에 항목이 삽입됨). Fava에서 외부 편집기에서 소스 파일을 열 수도 있습니다. Fava는 _"Gmail 스타일"_ 키보드 단축키 (UI에서 `?`를 눌러 확인)도 지원합니다. 따라서 Fava는 동일한 인터페이스에서 데이터를 입력하고 볼 수 있는 가벼운 회계 시스템으로 변환됩니다.
- **보고서 및 계정 드릴다운:** Fava는 표준 회계 보고서를 제공합니다. 손익 계산서 (손익), 대차 대조표, 시산표 및 투자에 대한 보유 목록입니다. **대차 대조표** 및 **손익 계산서**는 인터랙티브합니다. 계정을 클릭하여 세부 정보를 드릴다운하거나 자산에 대한 원가 대 시가 보기를 전환할 수 있습니다. Fava는 가격 데이터가 있는 경우 투자에 대한 "미실현 이익"도 표시합니다. 모든 항목의 **저널** 보기를 생성하고 다양한 기준 (특정 트랜잭션을 찾는 데 적합)으로 해당 저널을 필터링할 수 있습니다.
- **문서 관리:** 영수증 또는 명세서를 첨부하는 경우 Fava는 이를 구성하는 데 도움이 됩니다. Beancount에는 문서 폴더 개념이 있으며 Fava를 사용하면 계정 또는 트랜잭션으로 파일을 끌어서 놓을 수 있습니다. 파일이 저장되고 원장에 문서 항목이 추가됩니다. 이는 지원 문서를 원장 데이터와 연결하는 데 유용합니다.
- **확장 기능을 통한 사용자 지정:** Fava는 플러그인 (Python으로 작성)으로 확장하여 새 보고서 또는 기능을 추가할 수 있습니다. 일부 확장 기능은 번들로 제공됩니다 (예: 투자에 대한 **포트폴리오 목록** 보고서). 사용자 지정 확장 기능에 대해서는 나중에 설명하지만 기본적으로 Fava의 디자인을 통해 확장 API를 통해 새 페이지, 심지어 사용자 지정 JavaScript를 삽입할 수 있습니다. 즉, 특정 분석 또는 대시보드가 내장되어 있지 않으면 고급 사용자가 추가할 수 있습니다.
- **성능:** Fava는 효율적입니다. 메모리에서 데이터를 다시 로드하고 페이지를 빠르게 제공합니다. 기본 Beancount 구문 분석은 매우 빠르므로 (최신 버전에서 C++ 최적화) 큰 원장도 1~2초 안에 로드됩니다. 실제로 Fava는 여러 해 동안 개인 원장을 처리할 수 있지만 매우 큰 파일 (수만 건의 트랜잭션)은 일부 최적화 (예: 오래된 항목 보관)의 이점을 얻을 수 있습니다.
- **웹 액세스 및 이동성:** 서버 또는 랩톱에서 Fava를 실행하면 모든 브라우저에서 재정에 액세스할 수 있습니다. 일부 사용자는 개인 서버 또는 Raspberry Pi에서 Fava를 호스팅하여 이동 중에도 재정을 확인할 수 있습니다 (Fava에 기본 인증 기능이 없으므로 비밀번호 또는 VPN으로 보호할 수 있음). 기본적으로 데이터를 제3자에게 제공하지 않고도 재정에 대한 자체 호스팅 "웹 앱"을 제공합니다.

**요약하자면**, Beancount는 엄격한 복식 부기 규칙과 다중 통화 지원을 통해 투명하고 텍스트 기반 회계를 위한 강력한 기반을 제공합니다. Fava는 즉각적인 통찰력 (보고서, 차트)과 데이터 상호 작용 기능을 갖춘 액세스 가능한 인터페이스를 제공하여 이를 기반으로 합니다. 함께 사용하면 엔드 투 엔드로 제어하는 ​​매우 유연한 회계 및 분석 시스템이 됩니다.

## Beancount 및 Fava를 사용한 실시간 (또는 거의 실시간) 분석

Beancount 및 Fava를 사용하여 **실시간 또는 거의 실시간 분석**을 달성하려면 원장으로의 데이터 흐름을 자동화하고 도구가 최신 정보를 표시하도록 해야 합니다. 기본적으로 Beancount는 일괄 처리 프로세스이고 (파일에 항목을 추가한 다음 보고서를 봅니다.) Fava는 변경 사항을 감지하고 새로 고침을 요청합니다. 그러나 올바른 설정을 사용하면 새로운 트랜잭션과 변경 사항이 거의 즉시 나타나도록 업데이트를 간소화할 수 있습니다.

**파일 변경 감지:** Fava는 원장 파일의 변경 사항을 모니터링합니다. 편집기에서 `.beancount` 파일 (또는 포함 파일)을 편집하면 Fava에 "변경 사항이 감지되었습니다. 클릭하여 다시 로드하십시오"라는 배너가 표시됩니다. 클릭하거나 다시 로드하면 데이터가 다시 로드되고 보기가 업데이트됩니다. 실제로 이 다시 로드는 매우 빠릅니다 (일반적인 원장의 경우 일반적으로 1초 미만). 즉, 원장 파일이 자주 업데이트되는 _경우_ Fava가 실시간 대시보드 역할을 할 수 있습니다. (디버그 모드에서 Fava는 파일 변경 시 자동 다시 로드할 수도 있지만 기본적으로 보기 방해를 피하기 위해 사용자 확인을 기다립니다.)

**지속적인 가져오기/업데이트 파이프라인:** 실시간 데이터를 얻으려면 Beancount 파일에 트랜잭션 추가를 자동화해야 합니다. 몇 가지 일반적인 전략이 있습니다.

- **예약된 가져오기 작업 (Cron):** 많은 사용자가 금융 기관에서 새로운 트랜잭션을 주기적으로 가져와서 (예: 매일 밤 또는 매시간) 원장에 추가하는 Cron 작업 (또는 예약된 작업)을 설정합니다. 예를 들어 Beancount **임포터 플러그인**을 사용하여 API 또는 OFX 다운로드를 통해 최신 은행 트랜잭션을 가져올 수 있습니다. 한 Beancount 사용자는 자신의 장부가 스스로 업데이트되도록 자동화 파이프라인을 구축했습니다. _"내가 만지지 않아도 내 회계 장부가 오픈 형식으로 스스로 업데이트되는 것을 보면 순수한 기쁨을 느낍니다"_. 이는 은행 API에 연결하고 정기 업데이트를 예약하여 달성했습니다. 은행 API (예: Plaid)를 사용하는 `bean-fetch` (OFX용) 또는 사용자 지정 Python 스크립트와 같은 도구를 예약된 일정으로 실행하고 새 항목을 원장에 쓸 수 있습니다. 예약된 가져오기 후 Fava를 실행하는 경우 Fava를 새로 고쳐 새 데이터를 볼 수 있습니다.

- **파일 감시자 및 트리거:** 시간 기반 일정 대신 파일 감시자를 사용하여 이벤트에 반응할 수 있습니다. 예를 들어 은행에서 매일 명세서를 이메일로 보내거나 CSV를 폴더에 놓으면 스크립트에서 해당 파일을 감지하고 (Linux에서 `inotify` 사용 또는 이와 유사한 방법) 즉시 가져오기 루틴을 실행한 다음 Fava에 다시 로드하라는 신호를 보낼 수 있습니다. Fava는 아직 브라우저에 실시간 다시 로드를 푸시하는 것을 지원하지 않지만 적어도 데이터를 업데이트하여 다음에 페이지를 확인하거나 다시 로드를 클릭할 때 최신 상태로 만들 수 있습니다. 일부 커뮤니티 프로젝트는 더 나아가 Ledger (Beancount의 사촌)의 경우 한 사용자가 Ledger 데이터를 Grafana에 실시간으로 노출하는 작은 서버를 만들어 Beancount에서도 유사한 접근 방식을 취할 수 있음을 보여줍니다. 기본적으로 대시보드에 데이터를 지속적으로 공급하는 데몬을 구축합니다.

- **직접 API 통합:** 파일을 거치지 않고 고급 사용자는 Plaid 또는 지역 오픈 뱅킹 API와 같은 은행 API에 직접 연결하여 트랜잭션을 자주 가져올 수 있습니다. 의욕적인 개인은 루프에서 "라이브" 가져오기 (적절한 속도 제한 사용)를 스크립팅할 수 있습니다. 효과적으로 몇 분마다 은행에 새로운 데이터를 폴링합니다. _"Plaid API에 가입하고 동일한 [자동화]를 로컬에서 수행하는 것"_을 막을 수 있는 것은 없습니다. 새로운 각 트랜잭션을 도착하는 즉시 Beancount 파일에 추가할 수 있습니다. 이 접근 방식으로 Fava는 상용 앱의 최신 피드에 필적하는 계정을 위한 진정한 실시간 대시보드가 됩니다.

**Fava에서 데이터 새로 고침:** 데이터가 업데이트되면 Fava에서 데이터를 표시하는 것이 간단합니다. 브라우저 새로 고침 (F5) 또는 다시 로드 배너를 클릭하면 최신 원장 상태가 로드됩니다. 클릭하지 않으려면 `--debug`를 사용하여 Fava를 실행하면 일부 사용자가 변경 시 즉시 페이지를 다시 로드하는 데 사용하는 확장 개발을 위한 자동 다시 로드가 활성화됩니다. 또는 사용자 지정 프런트 엔드를 구축하는 경우 일정을 기준으로 원장에서 최신 잔액 등을 반환하는 작은 API를 폴링할 수 있습니다.

**즉시 계산:** Beancount의 빠른 구문 분석은 원장 파일을 몇 분마다 업데이트하더라도 데이터 가져오기 → 파일 업데이트 → Fava 다시 로드에서 전환이 빠르다는 것을 의미합니다. 예를 들어 한 사용자는 파일 편집 후 Fava를 다시 로드하는 것이 "거의 눈에 띄지 않으며... 합리적인 크기의 원장의 경우 확실히 1초 미만"이라고 언급합니다. 따라서 Fava 창을 열어두고 주기적으로 새로 고침을 눌러 라이브 대시보드를 흉내낼 수 있습니다. (진정한 라이브 환경을 위해 작은 스크립트를 빌드하여 브라우저를 자동 새로 고침하거나 브라우저의 N초마다 새로 고침 기능을 사용할 수 있습니다.)

**조정 및 경고:** 실시간 데이터를 신뢰하려면 잔액을 자주 조정해야 합니다. Beancount는 잔액 어설션과 _"최신" 표시기_를 통해 이를 쉽게 수행합니다. 실제로 Fava는 특정 메타데이터로 계정을 표시하는 경우 계정 옆에 색상이 지정된 표시기를 제공합니다. (예: `fava-uptodate` 메타데이터로 계정을 표시할 수 있으며 Fava는 마지막 항목이 최근 잔액 확인인지 여부에 따라 빨간색/노란색/녹색으로 색상을 지정합니다.) 이는 원장의 계정 잔액이 은행의 최신 명세서와 일치하는지 여부를 빠르게 확인하는 데 사용할 수 있습니다. 거의 실시간 설정에서 매일 잔액 확인을 자동화할 수 있습니다 (매일 아침 각 계정에 대해 은행의 전날 마감 잔액이 원장에 있음). 그러면 Fava의 표시기는 자동 가져오기에 누락된 것이 있거나 불일치가 있는지 알려주어 "라이브" 데이터가 정확하다는 확신을 줍니다.

**자동화 예제:** **매일 현금 흐름 업데이트**를 원한다고 가정합니다. 매일 밤 오전 3시에 실행되도록 Cron 작업을 설정할 수 있습니다. 은행의 API를 사용하여 지난 날의 트랜잭션을 가져와서 `import_today.beancount`에 쓰고 해당 파일을 기본 원장에 추가합니다. 또한 마감에 대한 잔액 어설션을 씁니다. 일어나서 Fava를 열면 어제까지의 모든 트랜잭션이 표시되고 현재 달의 수입/비용이 업데이트된 것을 볼 수 있습니다. 낮 동안 지출을 하는 경우 (예: 휴대폰에서 Fava의 새 트랜잭션 양식을 통해) 수동으로 추가하거나 매일 밤 가져오기를 기다릴 수 있습니다. 이 하이브리드 접근 방식 (거의 자동화되고 임시 추가 기능 사용)은 거의 실시간 그림을 제공합니다. 또 다른 접근 방식은 Fava의 **저널** 페이지를 열어두고 등록으로 사용하는 것입니다. 지출하면서 빠르게 트랜잭션을 기록합니다 (수표책에 입력하는 것처럼). 그러면 실시간 피드가 _됩니다_. 이는 더 수동적이지만 일부 사용자는 이러한 인식을 즐깁니다. 수동 단계 없이 진정으로 _스트리밍_ 업데이트를 받으려면 스크립팅에 투자하고 논의된 대로 제3자 API를 사용해야 합니다.

요약하자면, Beancount의 가져오기 자동화와 Fava의 빠른 새로 고침을 결합하면 거의 실시간 금융 데이터를 얻을 수 있습니다. QuickBooks와 같은 서비스 (은행 피드를 자동으로 가져옴)와 동일한 수준의 라이브 피드를 달성하는 것이 "푸시 버튼만큼 쉽지 않을" 수 있지만 **가능합니다**. 중요한 것은 프로세스에 대한 완전한 제어와 투명성을 유지한다는 것입니다. 한 일반 텍스트 회계 옹호자가 언급했듯이 약간의 노력을 기울이면 _"상용 솔루션보다 훨씬 낫고 훨씬 더 유연하고 확장 가능"_한 자동화된 시스템을 얻을 수 있습니다. 다음 섹션에서는 Fava의 시각화 기능을 통해 이러한 최신 데이터를 즉시 이해하고 원시 트랜잭션을 통찰력으로 바꾸는 방법을 살펴봅니다.

## Fava의 시각화 기능 (현금 흐름, 추세, 실시간 검사)

([GitHub - beancount/fava: Fava - Beancount용 웹 인터페이스](https://github.com/beancount/fava)) _Fava의 손익 계산서 보고서 (웹 UI)는 수입 및 비용 구성에 대한 빠른 통찰력을 제공하기 위해 **트리맵** (그림) 및 선버스트 차트와 같은 풍부한 시각화를 지원합니다. 이 트리맵에서 각 사각형은 금액별로 크기가 조정된 비용 범주를 나타냅니다. 즉시 **임대료** (큰 녹색 블록)가 비용을 지배하는 것을 볼 수 있습니다. 상단 필터 막대 및 컨트롤 (오른쪽 상단)을 사용하면 통화, 차트 유형 및 기간 (예: 월별 데이터 보기)을 변경할 수 있습니다. Fava는 또한 재무 데이터의 추세를 파악하는 데 도움이 되도록 라인 차트 (예: 시간 경과에 따른 순자산) 및 막대 차트 (예: 월별 수입 대 비용)를 제공합니다._

Fava의 가장 큰 강점 중 하나는 원장 데이터를 시각적이고 인터랙티브한 보고서로 즉시 변환하는 것입니다. 원장이 로드되자마자 Fava는 현금 흐름과 추세를 한눈에 이해하기 쉽게 만드는 차트를 생성합니다.

- **수입 및 비용 트리맵/선버스트:** 손익 계산서 페이지에서 Fava는 수입과 비용을 _트리맵_ 또는 _선버스트_ 다이어그램으로 표시할 수 있습니다. 이는 "한눈에 보기" 현금 흐름 시각화에 적합합니다. 예를 들어 월별 비용이 트리맵으로 표시되면 각 사각형의 영역은 각 비용 범주의 크기에 해당합니다. 큰 블록은 대부분의 돈이 어디로 갔는지 즉시 보여줍니다 (예: 임대료 또는 주택 담보 대출, 세금 등). 작은 블록은 작은 비용을 보여줍니다. 이는 지출의 _추세를 파악_하는 데 매우 유용합니다. "외식" 블록이 매달 증가하고 있다면 시각적으로 알 수 있습니다. 선버스트 차트로 전환하여 계층적 분석을 볼 수 있습니다 (예: 외부 링은 음식 범주 내에서 식료품 대 레스토랑과 같은 하위 범주를 보여줄 수 있음). 이러한 차트는 필터링한 모든 기간 (한 달, 연초 이후 등)에 대해 업데이트되어 해당 기간에 대한 **즉각적인 현금 흐름 시각화**를 제공합니다. 일반 텍스트 회계 포럼의 사용자는 다음과 같이 언급했습니다. _“수입 및 비용 트리맵을 많이 사용합니다. 그들은 우리 재정 움직임에 대한 훌륭한 시각적 감각을 제공합니다.”_ – 이러한 종류의 즉각적인 이해는 Fava의 차트가 목표로 하는 것입니다.

- **시간 경과에 따른 순자산 및 잔액:** Fava는 시간 경과에 따른 **순자산에 대한 라인 차트**를 제공합니다 ("대차 대조표" 또는 "통계" 페이지). 이 차트는 각 시점 (일별, 주별 또는 월별)에서 부채를 뺀 자산의 합계를 표시합니다. 추세 파악에 매우 귀중합니다. 재정 궤적 (예: 꾸준히 상승하거나 특정 시점에 하락)을 볼 수 있습니다. 투자한 경우 원가 대 시장 가치로 값 표시를 전환할 수 있습니다 (가격 데이터가 기록된 경우). 예를 들어 시장 가치로 순자산이 주가에 따라 변동하는 반면 원가로 더 부드러운 것을 볼 수 있습니다. Fava는 또한 시간 경과에 따른 계정 잔액을 표시할 수 있습니다. 계정 (예: 자산:은행:체킹)을 클릭하면 해당 계정 페이지에 해당 계정의 잔액 내역 그래프가 표시됩니다. 현금 계정이 어떻게 움직이는지 즉시 검사할 수 있습니다. 이는 효과적으로 현금 흐름 그래프입니다 (잔액 라인의 기울기는 순현금 흐름을 나타냄). 추세가 감소하고 있다면 해당 기간에 버는 것보다 더 많이 쓰고 있음을 알 수 있습니다. 이러한 추세를 검토하면 "매년 12월마다 저축액이 감소합니다 (휴가 비용)" 또는 "이번 분기에 투자가 급격히 증가했습니다"와 같은 패턴을 파악할 수 있습니다.

- **정기 비교를 위한 막대 차트:** 손익 계산서 보기에서 Fava에는 "월별 이익", "월별 수입", "월별 비용" 등에 대한 탭이 있습니다. 이를 선택하면 월별 막대 차트가 표시됩니다. 예를 들어 **월별 순이익**은 각 달의 흑자/적자를 막대로 표시하여 월별 성과를 쉽게 비교할 수 있습니다. 이상치 (예: 4월에 큰 음수 막대가 있으면 해당 달에 비정상적인 손실/비용이 발생했음을 의미함)를 빠르게 식별할 수 있습니다. 마찬가지로 "월별 비용" 막대 차트는 월별로 범주별로 비용을 쌓거나 그룹화하므로 어떤 범주가 변동하는지 확인할 수 있습니다. 이는 시간 경과에 따른 추세를 파악하는 데 적합합니다. 예를 들어 "여행" 비용이 매년 여름에 급증하거나 "유틸리티" 청구서가 겨울에 더 높다는 것을 알 수 있습니다. Fava는 기본적으로 예산 책정 앱 (추세 추적)의 일부 기능을 제공하지만 (범주와 롤업 방식을 정의하므로) 완전히 사용자 지정할 수 있습니다.

- **실시간 필터링 및 데이터 검사:** Fava의 시각화는 정적이지 않습니다. Fava의 필터링과 함께 작동합니다. 특정 시나리오를 검사하고 싶다고 가정합니다. "내 비즈니스 계정에 대해서만 분기별 현금 흐름은 어떻게 보입니까?" 시간 필터를 2025년 1분기로 설정하고 계정을 비즈니스 계층 구조로 필터링할 수 있습니다. Fava는 해당 하위 집합에 대해서만 순이익, 비용 트리맵 등을 표시하도록 차트를 즉시 업데이트합니다. 이러한 인터랙티브한 분할은 쿼리를 작성하지 않고도 매우 빠르게 임시 분석을 수행할 수 있음을 의미합니다. **저널** 보기도 실시간 필터링을 지원합니다. 수취인 또는 내레이션 하위 문자열로 검색하고 필터링된 트랜잭션 목록을 즉시 볼 수 있습니다. 실시간 데이터를 보고 있는 경우 (예: 지난 주 트랜잭션을 가져옴) `#uncategorized`와 같은 태그로 필터링하여 분류가 필요한 새 트랜잭션을 보거나 `@pending`으로 (보류 중인 항목을 표시하는 경우) 아직 정리되지 않은 항목을 확인할 수 있습니다. 이러한 실시간 검사 기능을 통해 데이터 품질도 보장할 수 있습니다. 즉, 이상 현상을 즉석에서 격리하고 해결할 수 있기 때문입니다.

- **현금 흐름 명세서 (간접):** Beancount/Fava는 즉시 사용할 수 있는 공식 현금 흐름 명세서 (운영/투자/재무 분석)를 생성하지 않지만 사용자 지정 쿼리 또는 계정 구조화를 통해 흉내낼 수 있습니다. 예를 들어 특정 트랜잭션에 태그를 지정하거나 투자 및 재무에 특정 계정을 사용한 다음 총계를 쿼리할 수 있습니다. Fava의 쿼리 인터페이스를 사용하면 `SELECT sum(amount) WHERE account ~ "Assets:Bank" AND year = 2025`와 같은 BQL 쿼리를 실행하여 해당 연도의 현금 흐름 등을 얻을 수 있습니다. 즉, 대부분의 개인 사용자는 현금 흐름을 이해하는 데 충분한 잔액 추세와 수입/비용 차트의 조합을 찾습니다.

- **보유 및 포트폴리오 시각화:** **보유** 페이지에서 Fava는 수량, 비용, 시장 가치 및 미실현 이익과 함께 상품 (예: 주식, 채권, 암호 화폐)의 현재 보유량을 나열합니다. 차트가 아닌 테이블이지만 포트폴리오 상태를 실시간으로 검사하는 데 매우 유용합니다. 일부 확장 기능 (나중에 논의할 _fava-investor_와 같은)은 할당 원형 차트 또는 성과 그래프와 같이 포트폴리오에 대한 더 많은 시각적 자료를 추가합니다. 확장 기능이 없어도 예를 들어 최신 가격으로 주식 포트폴리오 가치가 어떻게 변하는지 확인할 수 있습니다. 가격 견적을 정기적으로 업데이트하는 경우 (매일 자동화할 수 있음) Fava의 차트는 투자의 최신 시장 가치를 반영합니다.

실제로 Fava의 시각적 보고서는 기본 데이터만큼 빠르게 업데이트됩니다. 새 트랜잭션이 추가되고 페이지가 다시 로드되는 즉시 차트가 다시 계산됩니다. 긴 재처리가 필요하지 않습니다. 즉, 반자동 파이프라인이 하루 종일 데이터를 공급하는 경우 Fava를 열어두고 주기적으로 새로 고침을 눌러 업데이트된 차트를 얻을 수 있습니다. 효과적으로 _실시간 재정 모니터링_을 할 수 있습니다.

예를 들어 소규모 비즈니스를 운영하고 있고 보유 현금 및 일일 비용을 모니터링하고 싶다고 가정합니다. Fava를 열어 "오늘 현금 계정 잔액" 및 "비용 - 오늘 대 어제"를 보여주는 사용자 지정 대시보드 (확장 기능 또는 쿼리 화면 사용)를 사용할 수 있습니다. 새로운 데이터가 들어온 후 새로 고침을 할 때마다 해당 숫자가 업데이트된 것을 볼 수 있습니다. 이는 값비싼 실시간 대시보드에서 제공하는 것과 유사하지만 오픈 소스 도구를 사용합니다. 차이점은 업데이트를 자동으로 푸시하는 대신 수동으로 새로 고침하거나 새로 고침을 예약해야 할 수 있다는 것입니다. 그러나 기능적으로 얻는 통찰력은 동일하며 Fava의 모든 숫자를 드릴다운 (기본 트랜잭션을 보려면 클릭)할 수 있다는 추가 이점이 있습니다. 이는 많은 BI 대시보드에 부족한 것입니다.

요약하자면, Fava는 회계 데이터를 즉각적인 시각적 통찰력으로 전환합니다. **현금 흐름 분석, 추세선, 시간 경과에 따른 비교 및 인터랙티브한 필터링**을 통해 숫자에 숨겨진 스토리를 볼 수 있습니다. 이상 현상에 대한 지난 주 지출을 검사하든 순자산의 다년 추세를 검토하든 Fava의 차트와 보고서는 데이터가 있는 즉시 실시간으로 명확성을 제공합니다. 다음으로 이러한 기능을 확장하거나 더 많은 사용자 지정 분석이 필요한 경우 외부 도구와 통합하는 방법을 살펴봅니다.

## 외부 대시보드 및 시각화 도구와의 통합

Fava는 풍부한 기본 제공 보고서 및 차트 세트를 제공하지만 Beancount의 데이터를 **Grafana**, **Metabase** 또는 사용자 지정 웹 프런트 엔드 (예: React 앱)와 같은 다른 비즈니스 인텔리전스 (BI) 또는 대시보드 도구와 통합할 수 있습니다. 재무 데이터를 다른 데이터 소스와 결합하거나 고급 차트 기능을 사용하거나 다른 형식으로 다른 사람과 대시보드를 공유하는 것이 동기 부여가 될 수 있습니다. Beancount의 개방성 덕분에 통합을 달성하는 방법은 여러 가지가 있습니다.

- **데이터베이스 통합 (Bean<em>SQL</em> / Beanpost):** 한 가지 간단한 방법은 Beancount 원장을 SQL 데이터베이스로 내보내거나 동기화하는 것입니다. SQL에 있으면 모든 BI 도구가 데이터를 쿼리할 수 있습니다. 실제로 커뮤니티 회원은 이를 위한 도구를 만들었습니다. 예를 들어 **Beanpost**는 Beancount 원장을 PostgreSQL 데이터베이스로 미러링하는 실험으로, Beancount 로직의 대부분을 SQL 함수로 구현합니다. 따라서 _"웹 앱 또는 보고 시스템과 같은 다른 도구와 통합할 수 있는 유연한 백엔드"_를 제공합니다. Beanpost를 실행하여 텍스트 원장을 Postgres에 지속적으로 동기화할 수 있습니다. 그런 다음 **Metabase** 또는 **Tableau**와 같은 도구를 사용하여 해당 Postgres 데이터베이스에 연결하고 원하는 차트 또는 대시보드를 빌드할 수 있습니다 (DB 업데이트로 라이브 업데이트). 한 사용자는 Postgres + PostGraphile을 사용하여 원장 데이터에 대한 GraphQL API를 자동으로 노출한 다음 그 위에 사용자 지정 React 프런트 엔드를 작성하여 기본적으로 원장을 웹 서비스로 처리한다고 보고했습니다. 이 접근 방식은 Fava의 인터페이스가 충분하지 않을 수 있는 경우 (예: 다중 사용자 액세스 또는 더 모바일 친화적인 UI)를 다룹니다. 엔지니어링에 더 많은 노력이 필요하지만 잠재력을 보여줍니다. Beancount를 최신 웹 스택과 비교적 쉽게 통합할 수 있습니다. 더 가벼운 변형은 Beancount의 기본 제공 SQLite 지원을 사용하는 것입니다. `bean-query -e ledger.beancount "SELECT ..."`와 같은 쿼리를 실행하면 결과를 출력하거나 Beancount의 Python API를 사용하여 데이터를 가져와 SQLite DB에 삽입할 수 있습니다. 일부 사람들은 SQLite를 Metabase와 같은 도구에 연결하는 중간 매개체로 사용합니다 (연결을 통해 SQLite 파일을 읽을 수 있음).

- **Grafana (시계열 대시보드):** Grafana는 모니터링 및 시계열 데이터에 널리 사용됩니다. 시간 경과에 따른 재무 데이터 (비용, 잔액)는 시계열로 처리할 수 있습니다. Beancount를 Grafana에 연결하는 방법에 대한 커뮤니티 논의가 있었습니다. 한 가지 아이디어는 즉석에서 Beancount 파일에 대해 BQL 쿼리를 실행할 수 있는 Grafana **데이터 소스 플러그인**이었습니다. 이를 통해 Grafana 패널에서 원장을 쿼리하여 "체킹 계정 잔액"을 게이지로 또는 "지난 30일 동안의 비용"을 그래프로 직접 표시할 수 있습니다. 현재 (2025년) 전용 플러그인은 게시되지 않았지만 매니아는 임시 솔루션을 구축했습니다. 예를 들어 Reddit 사용자 _aquilax_는 Ledger CLI 데이터를 Grafana에서 사용할 수 있도록 하는 간단한 서버를 구축하고 **grafana-ledger-datasource-server**로 공유했습니다. 유사한 개념을 Beancount에 적용할 수 있습니다. Beancount 원장을 로드하고 (Beancount의 API를 사용하여 데이터를 쿼리) Grafana에 대한 JSON 데이터 프레임을 반환하는 엔드포인트를 노출하는 작은 HTTP 서버를 Python으로 작성합니다. Grafana에는 이 API에서 가져올 수 있는 일반 JSON 데이터 소스 플러그인이 있습니다. 실제로 이는 "월별 수입 (막대 차트)" 또는 "일일 현금 잔액 (라인 차트)"과 같은 패널이 있는 Grafana 대시보드를 설계하고 해당 패널이 Beancount 기반 API에서 데이터를 가져오는 것을 의미합니다. Grafana는 풍부한 시각화 옵션 (주석, 임계값, 서버 메트릭과 결합 등)을 허용합니다. Andreas Gerstmayr (F