Beancount의 기술적 우위 vs. Ledger, hledger, 및 GnuCash
· 약 5분
개인 회계 시스템을 선택할 때는 성능, 데이터 구조, 확장성 사이에서 트레이드오프가 발생합니다. 엔지니어와 같은 기술 사용자는 가장 견고하고 예측 가능하며 프로그래밍 가능한 기반을 제공하는 시스템을 선호합니다.
자세한 비교 보고서를 바탕으로, Beancount와 인기 오픈소스 대안인 Ledger‑CLI, hledger, GnuCash의 기술적 세부 사항을 살펴보겠습니다.
속도와 성능: 정량적 벤치마크 🚀
진지한 데이터셋에서는 성능이 협상 불가입니다. Beancount는 수십 년 치 거래 데이터를 속도를 희생하지 않고 처리하도록 설계되었습니다. Python(v2)으로 구현되었음에도 불구하고, 고도로 최적화된 파서가 놀라울 정도로 효율적입니다.
- Beancount: 실제 사용 사례에서는 수십만 건의 거래를 약 2초 만에 로드 및 처리할 수 있습니다. 메모리 사용량도 적어, 100k 거래를 파싱할 때 수십 메가바이트 수준 의 RAM만 사용합니다.
- 1M 거래 스트레스 테스트: 1백만 건 거래, 1,000개 계정, 1백만 개 가격 항목으로 구성된 합성 원장을 이용한 벤치마크에서 다음과 같은 차이가 드러났습니다.
- hledger (Haskell): 전체 파싱 및 보고서를 80.2초에 완료했으며, 초당 12,465건을 처리하고 2.58 GB RAM을 사용했습니다.
- Ledger‑CLI (C++): 복잡한 원장으로 인한 메모리·CPU 과다 사용 버그 때문에 40분 후에 프로세스가 강제 종료되었습니다.
- Beancount: 해당 1M 테스트에 포함되지는 않았지만, 기존 성능 곡선으로 볼 때 효율적으로 처리할 것으로 예상됩니다. 또한 곧 출시될 Beancount v3는 새로운 C++ 코어와 Python API를 도입해 처리량이 한 단계 더 향상될 전망입니다.
- GnuCash (C/Scheme): GUI 애플리케이션으로 전체 데이터를 메모리로 로드하기 때문에 규모가 커질수록 성능이 눈에 띄게 저하됩니다. **50 MB XML 파일(100k+ 거래)**을 여는 데 77초가 걸렸으며, SQLite 백엔드로 전환해도 55초로 약간만 개선되었습니다.
결론: Beancount는 예측 가능한 확장성을 갖춘 뛰어난 성능을 제공하므로 장기 데이터 관리에 필수적인 특성입니다. Ledger에서 나타나는 성능 절벽과 GnuCash UI 기반 지연을 회피할 수 있습니다.