백엔드
고객의 취소할 권리를 보장하다
두줄요약
배송준비중 단계에서 막히던 주문 취소를 앱에서 직접 가능하게 바꾼 사례입니다. 배송유형별 마감 시점을 재정의하고 Kafka, Redis 락, SQS로 동시성과 장애를 처리했습니다.
문제 상황
- 배송준비중 상태에서 고객이 앱으로 직접 취소할 수 없어 고객센터 문의와 반품 절차로 우회해야 하는 문제
- 센터배송, 업체배송, 오늘드림마다 취소 마감 기준이 달라 조건 분기가 흩어져 있고, 실물 출고 전인데도 취소가 막히는 구간이 존재
원인 분석
- 기존 취소 마감 시점이 물류의 실제 되돌릴 수 없는 순간이 아니라 작업 할당, 접수 확정 같은 이른 단계에 맞춰져 있던 구조
- 주문서, 마이페이지, 백오피스, 배치가 각자 다른 조건으로 취소 가능 여부를 판단해 정합성 관리가 어려운 상태
- 오늘드림처럼 배차와 취소가 동시에 들어오는 구간에서 동시성 제어와 외부 연동 장애 대응이 필요
해결 방법
- 배송유형별로 피킹 완료, 송장 등록, 배차 시점에 맞춰 취소 불가 일시를 기록하고 이를 단일 기준으로 취소 가능 여부 판단
- Kafka로 피킹 실적 이벤트를 받아 취소 마감 시점을 갱신하고, 피킹 누락 대비로 출고 확정 이벤트도 보조 신호로 활용
- 오늘드림은 주문번호 단위 Redis 분산 락으로 배차와 취소의 순서를 강제하고, 서킷 브레이커와 SQS로 외부 장애를 격리
