더북(TheBook)

요청/응답 및 비동기 요청/응답

요청/응답 및 비동기 요청/응답 방식 모두 클라이언트가 요청을 보내면 서비스는 응답을 반환합니다. 요청/응답은 서비스가 즉시 응답할 것이라고 클라이언트가 기대하지만 비동기 요청/응답은 클라이언트가 그런 기대를 하지 않습니다. 메시징은 원래 성격 자체가 비동기적이라서 비동기 요청/응답만 제공하지만 응답을 수신할 때까지 클라이언트를 블로킹할 수도 있습니다.

클라이언트/서비스는 한 쌍의 메시지를 주고받는 비동기 요청/응답 스타일로 상호 작용합니다. 먼저 클라이언트는 수행할 작업과 매개변수가 담긴 커맨드 메시지를 서비스가 소유한 점대점 메시징 채널에 보냅니다. 그러면 서비스는 요청을 처리한 후 그 결과가 담긴 응답 메시지를 클라이언트가 소유한 점대점 채널로 돌려보냅니다(그림 3-8).

▲ 그림 3-8 응답 채널, 메시지 식별자를 요청 메시지에 넣어 비동기 요청/응답한다. 수신자는 메시지 처리 후 지정된 채널로 응답을 전송한다

클라이언트는 서비스가 어디로 응답 메시지를 보내야 하는지 알려 주고 이렇게 받은 응답 메시지는 요청과 짝이 맞아야 합니다. 다행히 이 두 가지는 어렵지 않게 해결할 수 있습니다. 클라이언트는 MessageId 및 응답 채널이 헤더에 명시된 커맨드 메시지를 보내고, 서버는 MessageId와 값이 동일한 CorrelationId가 포함된 응답 메시지를 지정된 응답 채널에 쓰면 됩니다. 클라이언트는 이 CorrelationId를 이용하여 응답 메시지와 요청을 맞추어 볼 수 있습니다.

본래 메시징으로 통신하는 클라이언트/서비스 간 상호 작용은 비동기적입니다. 이론적으로 클라이언트가 응답을 수신할 때까지 블로킹할 수는 있지만, 실제로 클라이언트는 응답을 비동기 처리하고 클라이언트 인스턴스 중 하나가 응답을 처리합니다.

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