Spring Batch 파티셔닝과 RDS Serverless v2로 잡은 성능과 비용 두 마리 토끼
올리브영이 전국 1,300개 매장에 전자라벨(ESL)을 도입하며 마주한 대규모 데이터 처리 병목 현상을 기술적으로 해결한 실전 사례입니다. 데드락 문제 해결을 위한 애플리케이션 레벨의 격리 전략과 클라우드 네이티브 DB를 활용한 인프라 탄력성 확보 과정을 심도 있게 다룹니다.
대용량 배치 성능 문제로 고민 중이거나, 프로모션 등 예측 불가능한 트래픽 변동에 대응할 수 있는 DB 운영 전략이 필요한 시니어 백엔드 엔지니어에게 일독을 권합니다.
전국 1,300여 개 매장의 전자라벨 데이터를 순차 처리할 경우 약 13일이 소요되는 비현실적인 처리 시간이 발생했으며, 이를 해결하기 위해 단순 병렬 처리를 시도했으나 긴 트랜잭션과 자원 경합으로 인한 데드락(Deadlock) 오류로 시스템이 마비되었습니다.
Spring Batch Partitioning을 도입하여 데이터를 PK 범위 기반으로 논리적으로 격리함으로써 워커 스레드 간의 자원 간섭을 제거한 Lock Free 구조를 설계하고, Aurora RDS Serverless v2를 통해 트래픽 부하에 따라 DB 자원이 자동 확장되도록 구성했습니다.
기존에 약 13일(19,500분)이 예상되던 전체 매장 배치 처리 시간을 10분 이내로 단축하는 성과를 거두었으며, 고정형 인스턴스 대비 약 40%의 비용 절감과 함께 프로모션 기간의 급격한 데이터 폭증에도 안정적인 대응이 가능해졌습니다.
Trade-off
본문에 구체적인 한계점이 명시되지는 않았으나, 일반적으로 파티셔닝을 통한 범위 기반 분할은 데이터 분포가 고르지 않을 경우 특정 워커에 부하가 쏠리는 데이터 왜곡(Skew) 문제가 발생할 수 있으며, 서버리스 DB의 경우 예상치 못한 ACU 급증에 따른 비용 변동성을 관리해야 하는 부담이 있습니다.
대량의 데이터를 여러 개의 작은 범위(Partition)로 나누어 여러 스레드나 프로세스가 독립적으로 처리하게 하는 확장 메커니즘입니다.
애플리케이션의 요구 사양에 따라 데이터베이스 용량을 자동으로 조정하는 온디맨드 오토스케일링 DB 서비스입니다.
여러 스레드가 공유 자원에 접근할 때 락(Lock)을 사용하지 않고도 데이터 일관성을 유지하며 병렬성을 극대화하는 설계 방식입니다.