실패는 설계의 일부가 된다

메시지 기반 협업 구조에서 중요한 것은 성공 흐름만이 아니다.

오히려 더 중요한 것은 중간 실패를 어떻게 다룰 것인가다.

chap03의 주문 생성 흐름에서는 특히 아래 상황을 생각해야 한다.

이 질문에 답하기 위해 보상 처리가 등장한다.

오케스트레이터는 실패를 보고 되돌릴 단계를 결정한다

예를 들어 product-decreased 이벤트가 실패로 오면, 오케스트레이터는 이미 성공한 재고 차감만 다시 복구하려고 한다.

그리고 주문 취소 커맨드도 함께 보낸다.

image.png

즉, 보상 처리는 단순히 “에러를 던진다”가 아니라, 이미 바뀐 상태를 의식해서 되돌리는 흐름이다.

배송 생성 실패도 같은 식으로 다룬다

배송 생성 실패가 오면, 오케스트레이터는 이미 성공했던 재고 차감을 다시 복구하려고 하고, 주문 취소 커맨드를 보낸다.

즉, 실패 지점이 어디냐에 따라 되돌려야 하는 대상이 달라진다.

그리고 그 판단을 오케스트레이터가 흐름 전체 기준으로 내린다.

image.png

왜 이것이 중요한가

chap03는 이제 실패를 예외 처리 한 줄로 끝내는 장이 아니다.