정산 시스템, 이제 사람 대신 시스템이 책임진다!
수기 정산의 문제점을 해결하기 위해, 정산 시스템 구축의 필요성을 제기
MASS(Musinsa Accounting & Settlement System)는 물류비 정산 자동화를 목표로 설계됨
신뢰성 확보를 위해 멱등성, 결정적 계산, 감사 가능성을 설계 원칙으로 채택
이벤트 기반 아키텍처(Event-driven Architecture)를 활용하여 멱등성을 보장하는 이벤트 처리 방식 설명
결정적 계산(Deterministic Calculation)을 위한 계산기 모듈 설계 및 반올림 정책 강조
정산 시스템 설계의 핵심 원칙: 멱등성과 결정적 계산
본문은 정산 시스템 설계의 핵심 원칙으로 멱등성(Idempotency)과 결정적 계산(Deterministic Calculation)을 강조한다. 멱등성은 동일한 이벤트가 여러 번 처리되어도 결과가 동일하도록 보장하며, 결정적 계산은 동일한 입력값에 대해 항상 동일한 결과를 반환하도록 설계한다.
멱등성 확보: 이벤트 재시도(Retry)와 격리(DLT)를 분리하여 일시적/구조적 실패를 처리
결정적 계산: 입력값에만 의존하는 순수 함수(Pure Function) 형태로 계산 로직 설계
감사 가능성: 트랜잭션 식별자(Transaction Identifier)를 활용하여 데이터 추적 및 재현성 확보
이러한 원칙들은 정산 시스템의 신뢰성(Reliability)을 높이고, 문제 발생 시 빠른 복구(Fast Recovery)를 가능하게 한다.
이벤트 기반 아키텍처(Event-driven Architecture)의 멱등성 구현
MASS는 이벤트 기반 시스템(Event-driven System)에서 멱등성을 보장하기 위해, 이벤트 재시도(Retry)와 DLT(Dead Letter Topic)를 활용한다. 일시적인 오류는 재시도를 통해 해결하고, 해결 불가능한 이벤트는 DLT로 격리하여 시스템의 안정성을 유지한다.
이벤트 재시도: 일시적 오류(Temporary Error)에 대한 자동 복구 메커니즘
DLT 격리: 구조적 오류(Structural Error)로 인한 데이터 손실 방지
트랜잭션 식별자: 정산 도메인(Settlement Domain) 관점의 멱등성 보장
이러한 접근 방식은 시스템의 탄력성(Resilience)을 높이고, 장애 상황에서도 데이터 일관성(Data Consistency)을 유지하는 데 기여한다.
결정적 계산을 위한 계산기 모듈 설계
MASS의 계산기 모듈은 결정적 계산(Deterministic Calculation)을 위해, 입력값에만 의존하는 순수 함수 형태로 설계되었다. 계산에 필요한 모든 정보는 `CalculateCommand`와 `SettlementContext`에 명시적으로 포함되어, 외부 상태나 실행 환경에 영향을 받지 않도록 한다.
순수 함수(Pure Function): 입력값(Input Value) 기반의 계산으로 재현성 보장
`SettlementContext`: 정산 기준일(Settlement Date), 정산 기준 유형(Settlement Base Type) 등 컨텍스트 정보 포함
금액 스케일 및 반올림 정책 고정: BigDecimal 사용 및 RoundingMode.DOWN 적용
이러한 설계는 정산 결과의 재현성(Reproducibility)을 확보하고, 이의 제기나 기준 변경 시 유연하게 대응(Flexible Response)할 수 있도록 한다.
BigDecimal을 활용한 정확한 금액 계산
정산 시스템에서 정확한 금액 계산은 필수적이며, MASS는 BigDecimal(BigDecimal)을 사용하여 부동 소수점 오차를 방지한다. 특히, 할인과 같은 소수점 계산에서 스케일(Scale)과 반올림 정책(Rounding Policy)을 고정하여, 계산 결과의 일관성을 보장한다.
BigDecimal 사용: 부동 소수점 오차(Floating-point Error) 방지 및 정확한 계산 수행
스케일 고정: MONEY_SCALE을 사용하여 소수점 자릿수 통일
반올림 정책: RoundingMode.DOWN을 적용하여 일관성 유지
이러한 정책은 정산 결과의 정확성(Accuracy)을 높이고, 금액 불일치(Amount Discrepancy)로 인한 문제를 예방한다.
정산 시스템의 미래: Kafka, Spring Batch, Argo Workflow
본문은 MASS의 기술적 구현에 대한 간략한 언급과 함께, 향후 Kafka(Kafka), Spring Batch(Spring Batch), Argo Workflow(Argo Workflow)를 활용한 정산 시스템 구축을 예고한다. 이는 대규모 데이터 처리, 배치 작업, 워크플로우 관리를 위한 기술 스택으로, 시스템의 확장성과 운영 효율성을 높일 것으로 예상된다.
Kafka: 이벤트 스트리밍(Event Streaming)을 위한 분산 메시징 시스템
Spring Batch: 대용량 데이터 처리(Large-scale Data Processing)를 위한 배치 프레임워크
Argo Workflow: 워크플로우 자동화(Workflow Automation) 및 오케스트레이션 도구
이러한 기술들을 통해 MASS는 더욱 안정적(Stable)이고 확장 가능한(Scalable) 정산 시스템으로 발전할 것이다.