더북(TheBook)

응답 반환 후 마무리

요청 처리 도중 동기 통신을 제거하려면 요청을 다음과 같이 처리하면 됩니다.

1. 로컬에서 가용한 데이터만 갖고 요청을 검증합니다.

2. 메시지를 OUTBOX 테이블에 삽입하는 식으로 DB를 업데이트합니다.

3. 클라이언트에 응답을 반환합니다.

 

서비스는 요청 처리 중에 다른 서비스와 동기적 상호 작용을 하지 않습니다. 그 대신 다른 서비스에 메시지를 비동기 전송하죠. 이렇게 하면 서비스를 느슨하게 결합시킬 수 있습니다. 다음 장에서 다룰 내용이지만, 마이크로서비스 아키텍처에서는 사가를 이용하여 서비스를 느슨하게 결합합니다.

예를 들어 주문 서비스를 이런 방식으로 구현한다면 먼저 주문을 PENDING 상태로 생성하고, 다른 서비스와 메시지를 교환하여 주문을 비동기 검증합니다. 그림 3-18은 createOrder()를 호출하면 벌어지는 일들입니다. 이벤트 순서는 다음과 같습니다.

1. 주문 서비스는 주문을 PENDING 상태로 생성합니다.

2. 주문 서비스는 주문 ID가 포함된 응답을 클라이언트에 반환합니다.

3. 주문 서비스는 ValidateConsumerInfo 메시지를 소비자 서비스에 전송합니다.

4. 주문 서비스는 ValidateOrderDetails 메시지를 음식점 서비스에 전송합니다.

5. 소비자 서비스는 ValidateConsumerInfo 메시지를 받고 주문 가능한 소비자인지 확인 후, ConsumerValidated 메시지를 주문 서비스에 보냅니다.

6. 음식점 서비스는 ValidateOrderDetails 메시지를 받고 올바른 메뉴 항목인지 음식점에서 주문 배달지로 배달이 가능한지 확인 후, OrderDetailsValidated 메시지를 주문 서비스에 전송합니다.

7. 주문 서비스는 ConsumerValidatedOrderDetailsValidated를 받고 주문 상태를 VALIDATED로 변경합니다.

8.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.