스페인 트레이더, GnuCash 데이터베이스 설계 표준 제시

발행: (2026년 6월 8일 PM 09:57 GMT+9)
6 분 소요

출처: Hacker News
2026년 6월 6일 • 작성자: Vitalik

말의 엉덩이가 철도 표준을 정했다. 스페인 상인들이 GnuCash 데이터베이스 설계 표준을 정했다.

TLDR: 1600년대 스페인 상인들은 엄지를 세지 않으려 했고, 이는 1997년 GnuCash 데이터베이스 설계 선택에 영향을 주었다.
마치 말의 엉덩이가 철도 표준을 정한 것처럼 보이는 이상한 설계가 사람들에게 꽤나 좋은 천재적인 해결책이 되는 경우다.

그런 밤 중 하나였다. 뜨거운 커피 한 잔이 테이블 위에 놓여 있다. 나는 HandsOnMoney에 원자재 지원을 구현하고 있었는데, 겉보기에 아주 사소해 보이지만 실제로는 꽤 깊은 작업이었다. 결국, 통화보다 더 간단한 것이 있을까—달러와 센트가 있지. 숫자를 저장하고 합계를 계산하는 것보다 더 간단한 것이 있을까?

잠깐만 기다려라. 여기에는 여러 층이 있다…

레이어 1. 문화

달러에 항상 100센트가 있는 것은 아니다. 물론 달러는 100센트이지만, 다른 통화는 “센트”가 없거나 천 개의 “센트”를 가질 수도 있다. 이러한 “센트”는 일반적으로 소수 단위(minor units) 라고 불린다.

몇 가지 구체적인 예시:

  • 일본 엔은 소수 단위가 없다(제2차 세계대전 이후 인플레이션 때문).
  • 쿠웨이트 디나는 천 개의 소수 단위를 가진다(이는 국가가 더 작은 가치 단위로 거래하고 정밀한 가격을 유지하도록 해준다).
  • 비트코인은 1억 사토시를 가지고 있다!

하지만 더 기다려라. 실제로는 8조각으로 나눌 수 있던 real de a ocho 같은 역사적 통화도 있었다! 즉, 동전의 1/8이 가장 작은 나눌 수 없는 단위였다!

그렇다면 우리는 이를 어떻게 저장해야 할까?

레이어 2. 소프트웨어

컴퓨터는 분수를 잘 다루지 못한다. 추상화된 floatdouble 타입이 있지만, 이는 실제 분수라기보다 근사값이다. 1990년대 후반과 2000년대 초반에 도입된 decimal은 훨씬 나은 타입이지만, GnuCash가 출시될 당시에는 아직 사용 가능하지 않았을 가능성이 크다.

이와 관련된 글이 많이 있다. 보통 개발자들은 부동소수점 숫자를 기록하고 저장하기 위해 double 타입을 사용한다. 하지만 부동소수점은 금전과 잘 맞지 않는다.

예를 들어,

1.03 - 0.42 = 0.6100000000000001

처럼 사소한 반올림 오류가 발생한다. 거래가 많아지면 이 오류가 누적돼 이상한 계좌 잔액이 나타난다.

게다가 돈은 고정된 정밀도와 특정 반올림 규칙을 가진다. 그래서 소프트웨어 엔지니어들은 이 함정을 많이 밟으며 Money 라는 공통 패턴을 개발했다. 요컨대, 컴퓨터가 잘 다루는 정수 형태로 소수 단위를 저장하는 것이다. 즉, $5.23을 기록하는 대신 523센트라는 정수로 저장한다.

문제 해결? 기대와 달리, 그렇지 않다.

레이어 3. 역사

돈 자체가 문제가 아니다. 물론 돈도 문제지만, 여기엔 원자재도 포함된다. 요컨대, 돈은 원자재다. 사람들은 다양한 원자재—통화, 주식, 펀드—를 거래한다.

이 일반화를 위해 과거로 돌아가야 한다. 그리고…

1998년처럼 파티를 열자

1998년. GnuCash(당시 xacc)의 첫 번째 릴리스 해였다. 닷컴 버블이 물처럼 쏟아지고, 파티는 어디서든 열렸다…

하지만 가장 중요한 점은—NYSE 시세는 십진법이 아니라 분수였다!

GnuCash는 미국 거래소의 십진법 전환이 2001년에 완전히 이루어지기 전에 출시되었다.

왜 그럴까? 시간 여행을 떠

0 조회
Back to Blog

관련 글

더 보기 »

예제로 보는 Zig

- AI CODE CREATION GitHub CopilotWrite better code with AI https://github.com/features/copilot - GitHub Copilot appDirect agents from issue to merge https://git...