올리브영, 취소 가능 시점 '출고 직전'으로 확장… Kafka와 분산 락으로 동시성 해결
핵심 내용
올리브영이 물류 작업 할당 시점 대신 집품 완료 시점을 취소 마감으로 변경해 고객 편의성을 높였다.
자세히 보기
올리브영은 기존에 물류센터의 출하 지시(작업 할당) 시점을 취소 불가 기준으로 삼았으나, 실제 출고까지 시간이 남아 고객 불편을 초래했다. 이에 따라 배송 유형별로 되돌릴 수 없는 시점을 재정의하고 취소 가능 구간을 확대했다.
배송 유형별 취소 마감 시점 변경
센터배송은 작업 할당에서 집품(Picking) 완료로, 업체배송은 출하 지시에서 송장 등록으로, 오늘드림은 주문 접수에서 배차로 취소 마감 시점을 늦췄다. 이러한 변경은 전자상거래법의 청약철회권 해석과도 부합하며, 상품이 실제로 선반을 떠나거나 외부로 인계되기 전까지 취소가 가능하도록 했다.
단일 시점 값 기반의 취소 판단 로직
분산된 취소 판단 코드를 통합하기 위해 주문 배송 정보에 **'취소 불가 일시'**라는 단일 시점 값을 도입했다. 이 값이 비어 있으면 취소 가능, 채워져 있으면 취소 불가로 판단하며, 배송 유형에 따라 값을 채우는 시점만 달리한다. 이 구조는 취소 가능 상태의 복원(예: 배차 취소 후 재취소 가능)을 용이하게 한다.
Kafka 이벤트 스트리밍과 안전장치
실시간 취소 판단을 위해 물류 시스템의 집품 완료 이벤트를 Kafka로 구독하는 방식을 채택했다. 이는 동기 조회 방식의 결합도를 낮추고 가용성을 확보하기 위함이다. 이벤트 누락으로 인한 사고를 방지하기 위해 출고 확정 이벤트를 수신할 때도 취소 불가 일시를 채우는 이중 안전장치를 적용했다.
오늘드림 배차와 취소의 동시성 제어
오늘드림 서비스에서 배차 요청과 취소 요청이 동시에 발생할 경우를 대비해 분산 락을 적용했다. DB 비관적 락이나 낙관적 락의 한계를 극복하기 위해 외부 API 호출 구간을 포함하면서도 일관성을 유지할 수 있는 동시성 제어 방식을 도입하여, 취소된 주문에 라이더가 배차되는 문제를 해결했다.
이 한국어 요약은 AI가 자동으로 만들었습니다. 원문의 주장과 맥락은 원문에서 확인해 주세요. 저작권은 원저작자에게 있습니다.