201
8
장
마이크로서비스 워크플로 구축
8.4
보상 워크플로
모든 워크플로를 완벽하게 되돌려야 하고 트랜잭션으로 제약을 걸어야 하는 것은 아닙니다. 워
크플로에서 일어날지 모를 예측 불가한 이슈가 한두 가지도 아니라서 많은 경우 그저 최선을
다해 완성도를 높이는 방법 밖에는 없겠죠. 실패할 경우에는 어떻게든 사후 조치를 해서 상황
을 타개하면 됩니다.
이런 접근법은 티켓 예약이나 재고 기반 시스템에서 많이 쓰입니다. 예를 들어 물리적인 제품
을 판매하는 웹사이트는 수많은 동시 트랜잭션
concurrent
transaction
을 처리하기 때문에 고객이 구매
하는 시점에 재고가 없는 경우도 종종 발생합니다. 결제를 처리하고 재고 유무를 확인할 즈음
물건이 없어 주문을 처리할 수 없음을 뒤늦게 판매자가 깨닫는 것이죠. 이 문제를 해결하는 방
법은 몇 가지가 있습니다.
가장 최근 트랜잭션을 롤백시켜 엄격하게 트랜잭션 기반으로 처리하자면,
PG
공급 업체에 환
불하고 고객에게는 주문한 제품이 현재 품절되었으니 주문이 취소됐음을 알려야 하겠죠. 하지
만 이렇게 처리하면 기술적으로 잘못된 부분은 없더라도 기업 이미지가 나빠지고 그간 쌓아 놓
은 신뢰에 금이 갈 것입니다. 이런 불편한 상황은 기업의 고객 만족 정책에 따라 보상 워크플
로
compensating
workflow
를 적용하면 개선할 수 있습니다.
가령, 일종의 보상 형태로 새로운 재고를 주문하고 고객에게는 배송 지연 사실을 알린 다음, 사
과의 뜻으로 다음 구매 시 사용 가능한 할인 쿠폰을 제공하는 ...