T
TechInsights
목록으로
BackEnd•2026. 01. 27.

“이번 달도 밤샘 정산입니다.” — 정산 시스템은 어떻게 만들었을까 (실전편)

무신사
무신사 Engineering Team
무신사

핵심요약

원문 보기

MASS 정산 시스템의 실전 구축 과정을 기술하며, 멱등성 기반 이벤트 처리, 재처리에 초점을 맞춘 모듈 구성 및 실행 구조, Kafka와 Spring Batch를 중심으로 한 기술 선택 이유와 운영/모니터링 체계를 상세히 설명합니다.

정산 시스템 실전 구축: MASS의 기술 선택과 아키텍처

들어가며

이전 글에서 MASS 정산 시스템의 설계 원칙(멱등성, 결정적 계산)을 다룬 데 이어, 본 글에서는 실제 기술 선택과 구조를 통한 구현 과정을 상세히 설명합니다.

멱등성을 전제로 한 이벤트 처리

  • 핵심: 이벤트 재시도(Retry)와 격리(DLT)를 분리하고, 트랜잭션 식별자로 서비스 레벨 멱등 갱신을 통해 장애 상황에서도 안전한 재처리 기반 마련.
  • DLT 처리: DLT 발생 시 즉시 알림, 원본 컨텍스트 유지 저장, 원인 분석 및 재처리 기준 수립.
  • 운영 현황: DLT 발생 비율 0.001% 미만으로, 결과 정합성이 중요한 도메인에서 설계 의도 유지.

MASS 모듈 구성

  • mass-consumer: Kafka로 이벤트 수신, 멱등 저장, 정산 원천 데이터 저장 (진입점).
  • mass-batch: 일/월 정산, 집계, 마감, 리포트 생성 (재처리와 복구 전제).
  • mass-api: 운영자/파트너 대상 REST API 제공 (조회 및 관리).

재처리와 복구를 전제로 한 실행 구조

  • 정산 상태 관리: PENDING → PROCESSING → COMPLETED 상태 전이를 통한 배치 실행 흐름 관리.
  • 배치 실행: 시작 시 대상 데이터 마킹(PENDING→PROCESSING), chunk 단위 처리, 완료 시 상태 변경(COMPLETED).
  • 실패 시 롤백: 중간 실패 시 PROCESSING → PENDING으로 롤백하여 전체 정산 대상 기준으로 재처리.
  • 재시도 방식: 이전 실행 결과 불필요, 재마킹 후 멱등성 기반 upsert 방식으로 재수행하여 항상 동일한 결과 보장.
  • 사례: 재고 스냅샷 이슈 시 12월 3일 데이터만 롤백 후 재처리하여 정합성 유지.

이벤트 + 배치 하이브리드 구조

  • 이벤트 기반: 실시간 데이터 반영 위한 원천 데이터 수집 및 멱등 저장 (빠른 수집 초점).
  • 배치 기반: 안정성 및 재현성 높은 정산 확정 및 마감, 리포트 생성, 복구용 배치 운영 (안정성 우선).
  • 목적: 실시간 데이터 가시성과 회계 마감의 안정성 동시 만족.

기술 선택 및 배경

  • 핵심 기준: 정합성, 재처리 가능성, 운영 안정성.
  • 기술 스택: JVM(Kotlin), Spring Boot/Batch, Kafka, MySQL, Kubernetes(EKS), Argo Workflow.

Kafka (원천 데이터 수신)

  • 비동기 적재, 데이터 유실 방지, 재처리 용이성.
  • "빨리 처리"보다 "언제든 다시 처리 가능"해야 하는 정산 데이터 특성에 적합.

Spring Batch (정산 처리)

  • 실시간성 < 명확한 실행 시점, 재처리/복구 구조, 감사 가능성.
  • Kubernetes 환경에서 Argo Workflow를 통한 외부 제어 방식으로 배치 실행 및 복구 관리.
  • Job Parameter 기반 실행으로 기준별 이력 추적 용이.
  • Chunk 단위 처리, 실패 시 재실행 제어 기능으로 안정적 운영 지원.

MySQL (데이터베이스)

  • 트랜잭션 처리가 명확한 RDB를 Source of Truth로 선택.
  • 정산 결과 정합성, 트랜잭션 관리, 멱등성 갱신 보장.

운영 / 모니터링 체계

  • 목표: 장애 빠른 인지, 영향 범위 통제.
  • 구성: 배치 실행 상태/로그 모니터링, DLT/실패 알림 연계, 에러/Latency/인프라 지표 모니터링, 주 단위 시스템 점검.
  • 결과: 사전 신호 감지 및 선제적 조치 운영 방식.

마치며

MASS는 Kafka, Spring Batch 등을 활용하여 실패와 재실행을 자연스럽게 받아들이는 구조로 정산을 안정적으로 구현했습니다. 다음 글에서는 시스템 오픈 및 운영 성과를 다룹니다.

#BackEnd#Infra
무신사
무신사

무신사 Engineering Team

기술 인사이트를 전달하는 공식 채널

You might also like

View all
토스 피플 : 새로운 길을 만들 땐 내 선택을 믿는다

토스 피플 : 새로운 길을 만들 땐 내 선택을 믿는다

"이 버튼 왜 안 눌려요?" 물류 현장의 목소리로 PDA 시스템 완성하기

"이 버튼 왜 안 눌려요?" 물류 현장의 목소리로 PDA 시스템 완성하기