
백엔드
올리브영 결제 이야기 Part - 3
두줄요약
주문 완료 과정의 단일 트랜잭션 구조로 인해 동시 구매 시 DB Lock과 Dead Lock이 발생했습니다. 트랜잭션을 개별 분리한 뒤 부하 테스트와 운영 모니터링으로 성능 개선을 검증했습니다.
문제 상황
- 주문 완료 과정에서 재고 확인, 결제, 차감, 배송 처리 등 여러 로직이 하나의 트랜잭션으로 묶인 구조
- 동시 구매 트래픽이 높아질수록 DB Lock과 Dead Lock이 증가하며 처리 지연과 오류 발생
원인 분석
- 여러 상품과 처리 단계가 한 번에 커밋되는 구조로 인해 자원 선점 충돌 발생
- 선점된 데이터에 다른 트랜잭션이 접근하면서 교착상태가 중첩적으로 누적
해결 방법
- 주문 처리 단위를 개별 트랜잭션으로 분리해 상품 선점 순서와 무관하게 즉시 커밋 가능하도록 변경
- 1+1상품, 증정품, 예약상품, 프로모션 상품 등 다양한 케이스와 롤백 흐름을 함께 반영
성능/운영 포인트
- Jmeter 부하 테스트로 기존 프로세스의 오류, Lock 누적, Dead Lock 재현 및 개선 검증
- 실제 운영 이벤트 트래픽에서도 안정적 주문 처리와 성능 향상 확인
