피드로 돌아가기
Dev.toBackend
원문 읽기
11억 번의 검증, Rust와 정수 연산으로 구현한 무결성 금융 솔버
We Built a Financial Solver That Protects Jobs. Then We Tried to Break It 1.1 Billion Times.
AI 요약
Context
급여 삭감을 통한 고용 유지 알고리즘 설계 시 개인별 동의 임계치 준수가 필수적 조건임. TypeScript 기반 프로토타입에서 IEEE 754 부동 소수점 오차로 인한 계산 비결정성 문제 발견. 금융 데이터의 특성상 미세한 반올림 오차가 신뢰성 붕괴로 이어지는 구조적 한계 존재.
Technical Solution
- 부동 소수점 오차 제거를 위해 Rust 언어 기반의 정수 연산 체계 도입
- 금액은 i64 cents, 백분율은 u16 basis points 단위로 저장하여 정밀도 확보
- 나눗셈 연산을 완전히 배제하고 u128 교차 곱셈 방식을 활용한 임계치 비교 로직 설계
- 정렬 후 단일 선형 스캔을 수행하는 Iterative Clamping 알고리즘으로 시간 복잡도 O(n log n) 달성
- TigerBeetle의 VOPR 방식을 벤치마킹하여 무작위 연산 시퀀스로 불변성을 검증하는 퍼징 테스트 환경 구축
- API 경계에서만 f64 JSON을 정수로 변환하고 내부 엔진은 순수 정수만 처리하는 결정론적 아키텍처 적용
Impact
- 1,240명 기준 약 3ms, 100,000명 기준 약 10ms의 연산 속도 기록
- VOPR을 통해 초당 38,469 ops의 불변성 검증 처리량 달성
- 8시간 동안 약 11억 건의 연산 시퀀스를 검증하여 동의 위반 및 비결정성 결과 0건 달성
- WASM 번들 크기를 gzipped 기준 108KB까지 최적화
Key Takeaway
금융 시스템과 같이 무결성이 최우선인 도메인에서는 '근사치'를 허용하는 부동 소수점 대신 정수 기반의 결정론적 설계를 선택하여 수학적 증명을 통한 신뢰성을 확보해야 함.
실천 포인트
정밀한 금액 계산이 필요한 금융 로직 설계 시 소수점 연산을 배제하고 최소 통화 단위(Cents 등)의 정수형 타입을 사용할 것