멱등성, Kafka, Spring Batch 기반 정산 시스템 구축 노하우 공개

by DD
4개월 전
조회수 54

이벤트 기반 시스템(Event-driven System)에서 멱등성을 전제로, 중복 수신 및 재처리를 고려한 정산 시스템 설계

Kafka를 활용하여 원천 데이터를 비동기적으로 수신하고, Spring Batch를 통해 정산 배치 처리

MySQL을 Source of Truth로 사용, 트랜잭션 기반의 정산 결과 관리 및 데이터 정합성(Data Consistency) 확보

DLT(Dead Letter Topic)를 활용하여 문제 발생 시 격리 처리, 전체 정산 흐름 중단 방지

Spring Batch와 Argo Workflow를 결합하여 배치 실행 및 재실행을 관리, 운영 안정성 확보

멱등성을 보장하는 이벤트 처리 아키텍처

MASS 정산 시스템은 멱등성(Idempotency)을 핵심 설계 원칙으로 삼아, 이벤트 기반 시스템의 중복 처리 문제를 해결했다. 이벤트 재시도(Retry)와 격리(DLT)를 분리하여, 장애 상황에서도 안전하게 재처리할 수 있는 기반을 마련했다.

트랜잭션 식별자(Transaction ID) 기반의 멱등 갱신: 동일 이벤트 여러 번 처리 시에도 결과는 항상 동일

DLT(Dead Letter Topic) 활용: 문제 발생 이벤트 격리, 전체 정산 흐름 중단 방지

DLT 모니터링 및 재처리: 문제 분석 후, 정책 오류 등 명확한 원인에 대해 재처리 수행

이러한 설계는 정산과 같이 데이터 정합성(Data Consistency)이 중요한 도메인에서 안정적인 시스템 운영을 가능하게 한다.

Kafka를 활용한 비동기 데이터 수집

MASS는 정산 원천 데이터 수집을 위해 Kafka(Kafka)를 선택, 비동기(Asynchronous) 방식으로 데이터를 안정적으로 적재한다. 트래픽 집중, 중복 수신, 재전송 가능성을 고려하여, API 호출 방식의 동기 수신 방식을 지양했다.

비동기 적재: 소비자 장애와 무관하게 이벤트 보존

재처리 지원: 동일 이벤트 재소비(Reconsumption)를 통한 재처리

데이터 유실 방지: 장애 발생 시에도 데이터 유실 방지

Kafka를 통해 MASS는 데이터 유실(Data Loss)을 방지하고, 안정적인 데이터 파이프라인(Data Pipeline)을 구축했다.

Spring Batch 기반의 정산 배치 처리

MASS는 Spring Batch(Spring Batch)를 활용하여 정산 집계 및 마감 처리를 수행한다. Spring Batch는 실행 이력 관리, 대용량 데이터 처리, 재실행 제어 기능을 제공하여, 정산 도메인의 핵심 요구사항인 정합성, 재처리 가능성, 운영 안정성을 만족시킨다.

Job/Step/Execution 단위 실행 상태 관리: 실행 이력 추적 및 감사 가능

Chunk 단위 처리: 대용량 데이터 처리의 효율성 확보

재실행 제어: 실패 시 재실행 시점 제어

Spring Batch는 정산 배치를 실패를 전제로 운영하며, 재실행을 통해 안정적인 정산 결과를 보장한다.

Argo Workflow를 활용한 배치 실행 관리

MASS는 Spring Batch와 더불어 Argo Workflow(Argo Workflow)를 사용하여 배치 실행 시점과 재실행을 제어한다. Kubernetes(Kubernetes) 기반 EKS 환경에서, Spring Batch는 정산 로직과 실행 상태를 관리하고, Argo Workflow는 배치의 실행 시점과 재실행을 책임진다.

외부 제어: Spring Batch 애플리케이션을 컨테이너로 구성, Argo Workflow를 통해 실행 제어

Job Parameter: 정산 기준 날짜, 타입 등을 Job Parameter로 전달, 실행 이력 관리

운영 편의성: EKS 환경에서 명시적으로 관리되는 워크플로우

이러한 구조를 통해 정산 배치는 운영자가 명시적으로 제어할 수 있는 대상이 되었으며, 재실행에 대한 부담을 줄였다.

MySQL을 활용한 데이터 정합성 보장

MASS는 정산 결과의 Source of Truth로 MySQL(MySQL)을 선택, 트랜잭션(Transaction) 처리를 통해 데이터 정합성을 보장한다. 이벤트 중복, 재처리, 장애 복구 상황에서도 정산 결과의 일관성을 유지한다.

트랜잭션 처리: 정산 결과의 정합성 보장

상태 전이 관리: 트랜잭션 단위의 상태 관리

멱등성 갱신: 트랜잭션 식별자를 기준으로 멱등성 갱신(Upsert)

MySQL을 통해 MASS는 정산 결과의 신뢰성(Reliability)을 확보하고, 안정적인 운영 환경을 구축했다.

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