피드로 돌아가기
올리브영 테크블로그Backend
원문 읽기
오프라인 매장에 코드를 배포하다 Part 2: 올리브영 전자라벨(ESL) 최적화 여정
올리브영이 배치 처리를 Spring Batch Partitioning으로 재설계하고 Aurora RDS Serverless v2 도입으로 1,300개 매장의 전자라벨 데이터를 13.5일에서 5분 처리 및 인프라 비용 40% 절감
AI 요약
Context
전자라벨 시스템을 전국 1,300개 매장으로 확산하면서 두 가지 문제에 직면했다. 첫째, 매장당 15분이 걸리는 복잡한 집계 로직으로 인해 순차 처리 시 약 13.5일이 필요했으며 오전 10시 오픈 전 완료가 불가능했다. 둘째, 평시와 프로모션/세일 기간의 트래픽 변동성이 크면서 고정형 RDS 인스턴스로는 비용과 성능의 딜레마에 직면했다.
Technical Solution
- Spring Batch Multi-threaded Step의 단순 병렬화를 폐기하고 Spring Batch Partitioning 도입: 전체 데이터를 PK(Primary Key) 범위 기반으로 논리적 격리하여 각 Worker Step이 고유한 데이터 범위만 처리하도록 변경
- Lock Free 아키텍처 구현: 스레드 간 데이터 범위 분할로 동일 테이블의 인접 인덱스 범위에 대한 동시 Write 경합을 원천 차단
- Aurora RDS Serverless v2 도입: 고정형 On-Demand 인스턴스를 폐기하고 트래픽에 따라 ACU(Aurora Capacity Unit)를 자동으로 확장·축소하는 즉각적이고 중단 없는 오토스케일링 적용
- Serverless v2의 탄력적 자원 관리: 배치 처리 중에는 높은 ACU로 부하 수용, 작업 완료 또는 저트래픽 시간대에는 최소 ACU 사양으로 자동 축소
Impact
- 배치 처리 시간: 13.5일 → 5분 단축 (약 99.94% 감소)
- 인프라 비용: 고정형 인스턴스 대비 약 40% 절감
- 다운타임: 수동 스케일업 시 발생하던 재부팅으로 인한 서비스 중단 완전 제거
Key Takeaway
대용량 배치 처리에서는 단순 병렬화가 아니라 PK 범위 분할(Partitioning)을 통해 스레드 간 자원 경합을 근절해야 하며, 클라우드 인프라 최적화는 고정 프로비저닝이 아니라 트래픽에 탄력적으로 대응하는 오토스케일링 구조를 설계해야 한다.
실천 포인트
대용량 배치 시스템을 운영하는 백엔드 팀은 Spring Batch Partitioning을 통해 Worker마다 고유한 PK 범위를 할당하면 DB Deadlock을 원천 차단하고 처리 시간을 수십 배 단축할 수 있으며, 예측 불가능한 트래픽 패턴을 가진 서비스는 Aurora RDS Serverless v2의 자동 ACU 스케일링을 적용하면 성능 저하 없이 인프라 비용을 30~40% 절감할 수 있다.