최근 '핀테크 엔지니어링 핸드북(Fintech Engineering Handbook)'이 공개되어 금융 소프트웨어 개발자들의 주목을 받고 있습니다. 이 핸드북은 돈을 다루는 시스템을 구축할 때 필요한 가장 중요한 엔지니어링 패턴들을 설명하며, 핀테크 분야에 새로 진입하는 사람부터 숙련된 전문가까지 폭넓게 활용할 수 있는 지침서 역할을 합니다. 금융 시스템의 신뢰성을 확보하기 위한 핵심 원칙들을 제시하며, 특히 데이터의 정확성과 무결성을 강조합니다.
핸드북은 세 가지 핵심 원칙을 중심으로 전개됩니다. 첫째, '데이터 위조 금지(No invented data)'로, 중복이나 임의의 잔액 업데이트를 허용하지 않기 위해 멱등성(idempotency), 중복 제거, 정산(reconciliation) 등의 기법을 사용합니다. 둘째, '데이터 손실 금지(No lost data)'로, 모든 금융 거래는 추적되고 영구적으로 저장되어야 하며, 이를 위해 정밀한 데이터 처리, 최소 1회 전달(at-least-once deliveries), 이벤트 소싱(event sourcing), 감사 추적(audit trails), 불변성(immutability)을 적용합니다. 셋째, '무신뢰(No trust)' 원칙으로, 외부 공급자나 내부 구성 요소, 심지어 외부 환경까지도 신뢰하지 않고 웹훅(webhook) 검증, 교차 데이터 확인, 오류 발생 시 명확한 알림(failing loudly)을 통해 시스템의 견고성을 확보합니다.
특히 돈을 시스템 내부에서 어떻게 표현할 것인가에 대한 깊이 있는 논의가 인상적입니다. 부동 소수점(Floating-point) 방식은 예측 불가능한 정밀도 손실을 야기하므로 피해야 한다고 강조하며, 대신 임의 정밀도(Arbitrary precision) 방식(예: Java의 BigDecimal), 최소 단위 정수(Minor-units precision) 방식(예: 유로 12.34를 1234로 저장), 그리고 합리적 숫자(Rational numbers) 방식을 대안으로 제시합니다. 각 방식은 시스템의 특성과 책임에 따라 적절히 선택되어야 하며, 내부 저장 방식과 계산 방식은 분리하여 조합할 수 있다고 설명합니다. 또한, JSON과 같은 데이터 직렬화(serialization) 시에도 부동 소수점 문제가 재발할 수 있으므로, 돈의 액수를 문자열(