오프라인 매장에 코드를 배포하기 2편: 올리브영 전자라벨(ESL) 최적화 여정
Partitioning으로 배치 시간을 13.5일에서 5분으로 줄이고, Serverless v2로 비용도 40% 절감했다.
1,300개가 넘는 매장으로 전자라벨(ESL)을 확산하려면, 단순한 기능 구현만으로는 부족했다. 초기 V1은 매장 1곳 처리에 평균 15분이 걸려 전체 처리 시간이 약 13.5일에 달했고, 순차 배치로는 오픈 시간 전 완료가 사실상 불가능했다.
동시 처리 성능을 높이기 위해 Spring Batch Multi-threaded Step을 적용했지만, 긴 트랜잭션과 인접 인덱스 범위에 대한 동시 Write가 겹치며 Deadlock Loser가 발생했다. 단순 병렬화는 오히려 락 경쟁을 키웠고, 병목은 데이터 처리 속도보다 락 경합에 있었다.
해결책은 Partitioning이었다. 전체 데이터를 PK 범위로 나눠 각 Worker Step이 서로 다른 구간만 처리하게 만들면서, 데이터 간섭을 원천적으로 제거했다.
- Lock Free 구조로 동작해 DB Deadlock을 차단
- 각 워커가 독립적인 범위에서 Aggregation과 Update 수행
- 결과적으로 1,300개 매장 배치 처리가 13.5일 → 5분 수준으로 단축
배치 속도 문제를 해결한 뒤에는 인프라 탄력성이 과제로 남았다. 평시와 프로모션/올영세일 기간의 트래픽 격차가 너무 커서, 고정형 RDS On-Demand로는 비용과 안정성을 동시에 만족시키기 어려웠다.
이에 Aurora RDS Serverless v2를 도입해 트래픽에 따라 DB 자원을 자동으로 늘리고 줄이는 구조를 만들었다. 배치 시간대에는 ACU가 빠르게 상승해 부하를 받아내고, 평시에는 최소 수준으로 내려가며 비용을 절감했다.
결과적으로, 이 전환은 두 가지 목표를 동시에 달성했다.
- Application Level: 대용량 배치는 단순 병렬화가 아니라 Partitioning으로 락을 회피해야 함
- Infrastructure Level: 클라우드의 가치는 서버를 빌리는 데서 끝나지 않고, Elastic하게 쓰는 데 있음
이 구조 덕분에 안정성과 효율성을 함께 확보했고, 고정형 인스턴스 대비 약 40% 비용 절감 효과까지 얻었다.
이 요약은 원문 이해를 돕기 위한 큐레이션입니다. 저작권은 원저작자에게 있으며, 정확한 내용과 맥락은 원문을 확인하세요.
요약 오류, 출처 표기 문제, 삭제 요청은 문의 · 건의로 알려주세요.