정산 시스템 설계와 구현 과정 분석

이번 글에서는 정산 시스템 구축 과정과 그에서의 설계 원칙과 기술 선택에 대해 자세히 살펴보겠습니다. 정산 시스템은 문제 해결이 복잡한 도메인으로, 이를 안정적인 구조로 구현하는 것이 핵심 과제입니다. 특히, 멱등성과 결정적 계산이라는 원칙을 바탕으로 정산 시스템이 어떻게 설계되었는지를 알아보겠습니다.

정산 시스템의 멱등성 기반 설계


정산 시스템의 가장 중요한 설계 원칙 중 하나는 바로 멱등성입니다. 멱등성이란 같은 연산을 여러 번 수행해도 결과가 변하지 않는 성질을 말합니다. 이를 기반으로 한 시스템 설계는 장애 발생 시 데이터의 무결성을 보장할 수 있는 중요한 요소로 작용합니다. MASS 정산 시스템은 이벤트 기반으로 운영되며, 이러한 이벤트는 종종 중복 수집이나 재처리를 겪게 됩니다. 따라서 이 시스템에서는 다음과 같은 조건을 갖추게 됩니다. 첫째, 이벤트 재시도(Retry)와 격리(DLT)를 명확히 분리하여 처리하는 것입니다. 이를 통해 복구 작업이 원활하게 이루어질 수 있습니다. 둘째, 서비스 수준에서 트랜잭션 식별자를 기준으로 멱등 갱신을 수행하여, 동일 이벤트가 여러 번 처리되더라도 결과는 항상 일정하도록 합니다. 이를 통해 정산 시스템은 장애가 발생하더라도 안전하게 재처리할 수 있는 기반을 마련하게 됩니다. 셋째, DLT가 발생하면 해당 이벤트는 정산 흐름에서 즉시 제외됩니다. 각 이벤트는 모니터링 시스템을 통해 관리되며, DLT 발생 시 운영자는 이를 즉시 인지할 수 있습니다. 이러한 설계 원칙을 통해 시스템은 더욱신뢰할 수 있는 환경으로 거듭나게 되며, 문제가 있는 이벤트가 전체 정산 흐름을 방해하는 것을 방지할 수 있습니다. 정산 시스템은 이처럼 밀접하게 설계된 멱등성 기반으로 운영됨으로써, 상시적인 데이터 무결성을 유지합니다.

정산 프로세스의 배치 처리 구조


정산 시스템에서 또 하나의 중요한 요소는 배치 처리입니다. MASS에서는 정산 집계, 마감, 리포트 생성을 담당하는 배치 애플리케이션이 설계되어, 전반적인 정산 프로세스를 효율적으로 관리합니다. 이 배치 처리 구조는 어느 시점에서든 실패를 염두에 두고 설계되었습니다. 첫 번째로, 정산 대상 원천 데이터에 명시적인 정산 상태 컬럼을 두어 각 데이터의 상태를 관리했습니다. 이는 정산에서의 PENDING, PROCESSING, COMPLETED 상태를 명확히 함으로써, 배치 실행 흐름을 체계적으로 관리할 수 있게 돕습니다. 예를 들어, 배치 실행 시 PENDING 상태의 데이터를 선택하고, 그 데이터를 PROCESSING 상태로 전환하여 차근차근 정산 작업을 수행하며, 모든 스텝이 정상 완료되면 상태를 COMPLETED로 업데이트하는 순서로 진행됩니다. 두 번째로 주목할 점은, 배치 작업이 중간에 실패할 경우 PROCESSING 상태였던 데이터들이 다시 PENDING 상태로 롤백된다는 것입니다. 이렇게 되면 사용자는 언제든지 이전의 기준으로 정산을 다시 정의할 수 있습니다. 상태 관리를 통해 MASS는 언제든지 확실한 재처리 구조를 제공하며, 데이터의 정합성을 저해하지 않도록 하는 방안이 마련되었습니다. 마지막으로, 이와 같은 배치 처리 구조는 운영 단계에서도 큰 의미를 지닙니다. 정산 배치 프로그램이 예측 가능한 방식으로 운영될 수 있도록 하며, 언제든지 중복 없이 동일한 결과를 보장합니다. 이러한 안정성이 바로 MASS 정산 시스템에서 운용되는 배치 처리 구조의 핵심이라 할 수 있습니다.

하이브리드 구조의 기술 선택


MASS 정산 시스템의 성공적인 구현은 적절한 기술 선택에 기반을 두고 있습니다. 이 시스템은 이벤트 기반 처리와 배치 기반 처리의 하이브리드 구조로 설계되었으며, 각각의 요구에 맞는 기술 스택이 사용되었습니다. 우선, MASS 시스템은 Kotlin 언어와 Spring Boot 프레임워크를 사용하여, 안정적인 애플리케이션 구축이 가능하도록 했습니다. 이와 더불어 Spring Batch를 통해 정산 배치와 마감 처리를 맡고 있습니다. 특히, Spring Batch는 트랜잭션 이력 관리, 실행 이력 추적, 실패 시 재처리 가능성 등 정산 시스템에 적합한 여러 기능을 제공합니다. 따라서 배치가 실패하더라도 명확한 실행 이력을 통해 사용자는 소급하여 문제를 해결할 수 있습니다. 다음으로 메시징 기술로는 Kafka가 선택되었습니다. Kafka를 통해 워크플로우가 비동기로 안정적으로 운영될 수 있고, 데이터 손실을 방지하는 동시에 재처리에 대한 지원도 자연스럽게 이루어질 수 있습니다. 이 시스템은 대량의 이벤트를 다룰 때 그 효율성을 극대화할 수 있도록 도와줍니다. 마지막으로 MASS는 MySQL 데이터베이스를 사용하여 정산 결과를 안전하고 일관되게 관리합니다. RDB를 선택함으로써 데이터 정합성을 보장하며, 멱등성을 위한 업데이트(upsert) 또한 쉽게 처리할 수 있는 장점이 있습니다. 이러한 조건들이 조화롭게 이루어져 MASS 정산 시스템이 안정적으로 운영될 수 있는 기반이 마련되었습니다.

결론적으로, MASS의 정산 시스템은 최신 기술의 조합이 아닌, 실패와 재실행을 수용할 수 있는 구조로 설계되었습니다. 멱등성을 유지하고, 안정적인 배치 처리를 통해 운영과 모니터링 체계를 강화하여, 신뢰할 수 있는 정산 시스템을 구현했습니다. 다음 단계에서는 이 시스템을 어떻게 단계적으로 오픈하였는지, 실제 운영에서 어떤 변화와 성과를 이끌어냈는지를 살펴보겠습니다.

이 블로그의 인기 게시물

매크로 코딩으로 시니어 성장의 벽 넘기

무신사머니 결제 시스템 연동의 안정성 및 혁신

AI와 사람의 협업을 위한 VLMOps 어드민 구축기