보유 자산은 이미 원장 안에 있습니다. 계속 다시 입력하게 되는 것은 그 자산의 가격입니다.
이 비대칭성은 플레인 텍스트 회계에서 가장 오래된 잔무입니다. 매수는 한 번 기록되면 영원히 참입니다: 120 NWRB {41.80 USD, 2024-03-12}는 수량, 원가, 날짜를 기록하며, 이후 어떤 일이 일어나도 이 셋 중 어느 것도 바뀌지 않습니다. 가격은 정반대입니다 — 하루 동안만 정확하고, 그 뒤로는 조용히 틀려지며, 잔액 검사로는 절대 잡아낼 수 없는 방식으로 틀립니다. 왜냐하면 오래된 가격도 완벽하게 잔액이 맞기 때문입니다. Beancount 자체의 답은 항상 도구로 가져와서 출력을 커밋하는 것이었고, 이는 작동하며 많은 사람들이 자동화해 왔습니다. 하지만 그것은 여전히 본인이 소유한 스크립트이고, 유지 관리하는 cron 항목이며, 병합해야 하는 파일입니다.
beancount.io 원장 엔진이 이제 우리와 함께 호스팅되는 원장에 대해 그 해석을 직접 수행합니다. 이 글은 실제로 무엇이 출시되었는지, 무엇을 의도적으로 건드리지 않았는지, 그리고 — 마찬가지로 중요하게 — 아직 구축되지 않은 것이 무엇인지에 관한 것입니다.
출시된 것
호스팅된 beancount.io 원장은 대상이 파일명 대신 URL인 include를 가질 수 있습니다:
; main.bean, in a hosted beancount.io ledger.
;
; The managed line is shown commented out on purpose: upstream `include` takes a
; file glob, so this file still loads if you copy it to your own machine. Only
; the hosted engine resolves the URL form.
option "title" "Taxable brokerage"
option "operating_currency" "USD"
include "accounts.bean"
; include "https://beancount.io/prices/ACME-USD"
include "transactions/purchases.bean"
include "transactions/sales.bean"업스트림 Beancount의 include는 파일명을 받습니다 — "지정된 경로는 절대 또는 상대 파일명일 수 있다"가 명세의 전부입니다 — 따라서 URL include는 순수 Beancount가 아니며 그런 척도 하지 않습니다. 그것은 호스팅 엔진의 동작이며, 엔진이 그것을 어떻게 처리하는지 정확히 다음과 같습니다:
- 피드를 읽기 전용 가상 파일로 구체화합니다. URL은 로컬 파일이 들어갔을 바로 그 위치인 엔진 자체의 include 해석 경로를 통해 해석되므로, 모든 지시문이 실제 소스 위치를 유지합니다. 당신의 바이트는 절대 다시 쓰이지 않습니다. 당신이 작성한 파일은 당신이 작성한 파일 그대로 남습니다.
- 가져온 본문은 가격 전용으로 검증됩니다.
price지시문, 주석, 그리고 네 개의 허용된 메타데이터 키 —price-source,price-kind,observed-at,provisional— 외에는 아무것도 허용되지 않습니다. 그 이상은 본문 전체를 거부합니다. 부분 수집은 없으므로, 피드가 당신의 장부에 트랜잭션을 몰래 넣을 수 없습니다. - 피드는 불변 리비전과 이동 포인터로 캐시됩니다. 새로고침은 캐시 만료가 아닌 타임스탬프에 의해 구동되므로, 업스트림 장애가 당신의 마지막 정상 리비전을 가져갈 수 없습니다. 실패한 새로고침은 정상 리비전을 아무것도 아닌 것으로 대체하지 않습니다.
- 신선도는 원장을 읽을 때 계산됩니다, 저장되지 않습니다:
recent,stale,unavailable이 피드 자체가 보고한 관측 시각과 함께 표시됩니다. 날짜를 지정할 수 없는 가격은 감사할 수 없는 가격입니다. - 관리형 항목은 읽기 전용입니다. 편집하거나 삭제하면 관리형 소스를 명시한 오류와 함께 거부되며, 지시문 한도에 포함되지 않습니다 — 피드가 당신 원장의 예산을 소비하도록 허용되지 않습니다.
그 목록의 모든 것은 호스팅 원장 서비스 내부에서 실행됩니다. 그 중 어느 것도 price 지시문이 의미하는 바를 바꾸지 않습니다: 언어 참조에서 정의하듯이 여전히 기초 상품과 견적 상품 사이의 환율을 설정합니다. 엔진의 역할은 단지 정확하고, 날짜가 지정되고, 출처를 추적할 수 있는 것들을 로더 앞에 놓는 것뿐입니다.
당신 자신의 가격이 항상 우선합니다
이 부분이 피드가 원장을 진지하게 다루는 사람에게 사용 가능한지를 결정하는 부분이므로, 정확하게 서술합니다.
같은 날짜와 같은 상품 쌍에 대해 — 그리고 역방향 쌍에 대해서도 — 직접 작성한 가격이 include 순서와 무관하게 관리형 피드보다 우선합니다.
"보통"도 아니고, "include를 마지막에 두면"도 아닙니다. 섀도잉 결정은 가격 맵이 만들어지기 전에 이루어지므로, include가 파일 내 어디에 위치하는지에 의존하지 않습니다. 맨 위로 옮기든, 맨 아래로 옮기든, 세 파일에 걸쳐 나누든: 답은 같습니다.
; include "https://beancount.io/prices/ACME-USD" ; hosted-engine form, again shown commented
; A price you wrote yourself, for the same date and pair.
; This one wins — above the include or below it, it makes no difference.
2026-09-16 price ACME 93.40 USD(ACME는 아래 예시 원장에 나오는 가상의 발행사이며, 숫자는 시장 관측치가 아니라 임의로 만든 것입니다.)
왜 다른 규칙이 아니라 그 규칙인가: 당신 자신의 파일에 있는 가격은 결정입니다. 그것은 당신이 대조 중인 명세서에 브로커가 인쇄한 종가일 수도 있고, 거래가 드문 포지션에 대한 동시대의 시세일 수도 있고, 회계사가 사용하라고 요청한 수치일 수도 있습니다. 피드는 그 어느 것도 알지 못하며, 사람이 작성한 수치를 조용히 덮어쓰는 시스템은 원장이기를 그만두고 의견이 되기 시작한 것입니다. 피드는 빈틈을 채울 뿐, 당신을 교정하지 않습니다.
가격은 평가에만 영향을 미치고, 그 외에는 아무것도 건드리지 않습니다
두 번째 안심은 정책 선택이라기보다 구조적인 것이며, 주장하기보다 실제 숫자로 보여줄 가치가 있습니다. 여기 암호화폐 예시 원장이 있습니다 — 날짜가 지정된 로트, 스테이킹, 채굴, DeFi 포지션, 에어드롭:
그 중 한 항목을 살펴보겠습니다. 거버넌스 토큰 에어드롭이 도착하여 도착한 날의 공정 시장 가치로 수익으로 기록됩니다:
2024-03-20 * "Uniswap" "Receive UNI governance token airdrop"
Assets:Crypto:Wallet:MetaMask:UNI 50.00 UNI {12.50 USD, 2024-03-20}
Income:Crypto:Airdrops -625.00 USD그 $625.00의 수익과 로트에 붙은 단위당 $12.50의 기초원가는 이제 2024-03-20에 관한 사실입니다. 원장의 모든 price 지시문 — 관리형이든, 직접 작성한 것이든, 아니면 전혀 없든 — 은 둘 다 그대로 둡니다. 가격은 시장 가치를 바꿉니다; 결코 수량, 원가 기준, 현금 흐름, 수수료 또는 실현 이익을 바꾸지 않습니다. 그렇기 때문에 가격 피드는 애초에 도움을 받아들이기에 안전한 것입니다: 잘못된 가격이 할 수 있는 최악의 일은 오늘 포지션의 가치를 잘못 보고하는 것이며, 세금 신고서에 기입할 숫자를 훼손할 수는 결코 없습니다.
잘못된 가격 모델이 실제로 당신을 오도하는 곳
주식 및 ETF 예시 원장은 같은 요점의 더 날카로운 버전을 보여줍니다:
여기에는 4대 1 주식 분할이 있으며, 분할은 올바른 방식으로 기록됩니다 — 총 기초원가를 보존하는 수량 변경으로, 어떤 수익 계정도 건드리지 않습니다:
2025-07-15 * "Broker" "NWRB 4-for-1 share split — quantity change, not income"
Assets:Brokerage:NWRB -120 NWRB {41.80 USD, 2024-03-12}
Assets:Brokerage:NWRB 480 NWRB {10.45 USD, 2024-03-12}양쪽 모두 $5,016.00입니다. 시장 가치는 분할 전후로 변하지 않습니다 — 전날 120주에 $62.00, 다음 날 480주에 $15.50, 어느 쪽이든 $7,440.00 — 그리고 중괄호 안의 취득 날짜가 살아남으며, 이것이 그 주식을 2026년에 매도할 때 장기 보유로 유지되게 합니다.
흔한 실수는 분할을 대신 가격 이벤트로 기록하고 "분할 조정된" 시리즈에 의존하여 평가가 맞게 나오도록 하는 것입니다. 그것은 당신이 보는 모든 가격이 같은 방식으로 조정되어 있는 한에서만 작동합니다. 조정되지 않은 수치가 들어오는 순간 — 오래된 확인서, 스크린샷, 아무것도 다시 환산하지 않는 제3자 시리즈 — 포지션은 가치의 네 배로 평가되며, 원장의 주식 수는 더 이상 브로커의 명세서와 일치하지 않으므로, 그것을 잡아냈을 연말 검증이 발동할 수 없습니다.
이것이 선언된 소스, 선언된 종류, 가시적인 관측 시각을 가진 가격 피드를 지지하는 진짜 논거입니다: 편의가 아니라, 방금 가져온 숫자가 어떤 관례에 따라 계산되었는지 아는 것입니다. 예시 원장의 자체 가격 파일은 의도적으로 조정되지 않았으며 그렇게 명시하고 있고, 분할을 가로지르는 두 지시문은 눈으로 검증할 수 있는 검사로 작성되어 있습니다.
두 embed 중 하나를 클릭하는 것에 대한 솔직한 참고: 호스팅 원장 뷰어는 계정 잔액을 원가 기준으로 렌더링하며, 페이지에 평가 제어를 제공하지 않습니다. 위의 원장들은 원장을 — 로트, 분할, 특정 로트 매도 — 보여주기 위해 있는 것이지, 뷰어가 현재 그리지 않는 시장 평가를 보여주기 위한 것이 아닙니다. 둘 다 공개되어 있으며, 둘 다 복제하여 로컬에서 실행할 수 있습니다.
아직 여기 없는 것
변경 로그 항목은 사실이 아닌 것을 믿게 만든다면 아무것도 아닌 것보다 못하므로, 나머지 절반을 명확하게, 그리고 그 어느 것에도 날짜를 붙이지 않고 서술합니다.
- 가격 엔드포인트는 공개되지 않았습니다.
https://beancount.io/prices/<ALIAS>에 대한 익명 요청은 로그인 페이지로 리디렉션됩니다. 공개 별칭 목록은 없습니다. - 따라서 오늘 당신 자신의 파일에 붙여넣을 수 있는 것이 아닙니다. 엔진은 include를 해석하지만, 그것이 해석하는 경로는 아직 열려 있지 않습니다. 열리면 그것은 그 자체의 변경 로그 항목이 될 것입니다.
- 로컬
beaCLI는 URL include를 해석하지 않습니다. 디스크에서 파일을 읽으므로, URL include는 어떤 파일과도 일치하지 않는 파일 glob으로 로컬에서 실패합니다. CLI에서의 로더 지원은 명명된 후속 작업입니다. - API 표면이 없습니다. 관리형 가격을 위한 REST, GraphQL 또는 MCP 필드가 없습니다.
- 대시보드 표면이 없습니다. 피드 연결 화면도, UI에 신선도 레이블도 없습니다; 엔진이 계산하는 신선도는 아직 표시될 곳이 없습니다.
- 스냅샷과 내보내기는 구축되지 않았으며, 상품 카탈로그나 수동 새로고침 엔드포인트도 마찬가지입니다.
출시된 것은 엔진 계층입니다: include 해석, 검증, 리비전 캐시, 우선순위 규칙, 신선도 계산. 그것이 다른 모든 것이 기대어야 할 부분이며, 나중에 변경하기 가장 어려운 부분이므로, 먼저 진행되었습니다.
다음에 볼 곳
위의 두 원장은 예시 갤러리의 일부로, 복제하여 로컬에서 실행할 수 있는 여섯 개의 완성된 패턴입니다 — 이 둘 다 의도적으로 정적이고 체크인된 가격 파일을 제공하므로, 2년 후에 만든 복제본도 오늘과 같은 보고서를 생성합니다. 우리가 출시하는 다른 모든 것은 변경 로그에 올라갑니다.
여전히 자신만의 페처로 가격을 최신 상태로 유지하고 있다면, 그것은 로컬 원장에 대한 올바른 답으로 남아 있으며, Beancount 자체의 가격 가져오기 문서와 유지 관리되는 beanprice 도구가 시작하기 좋은 곳입니다.
지루한 부분을 지루하게 유지하세요
가격을 자동화할 가치가 있는 이유는 가격이 플레인 텍스트 원장에서 스스로 쇠퇴하는 유일한 부분이기 때문입니다. Beancount.io는 당신의 것으로 남는 플레인 텍스트 회계를 제공합니다 — 감사 가능하고, 버전 관리되며, 당신 몰래 다시 쓰이지 않습니다. 이것은 우리가 관리형 피드를 출시하기 전에 그것이 충족해야 했던 바로 그 기준입니다. 무료로 시작하세요 그리고 읽을 수 있는 파일에 장부를 보관하세요.





