비동기 메시지 패턴
비동기 메시지 패턴은 앞서 살펴보았듯이 중간에 큐를 두어서 구현하기 때문에, 여러 가지 메시지 전달 패턴을 구현할 수 있다. 몇 가지 대표적인 패턴에 대해서 알아보자.
Fire & Forgot 패턴
-
메시지 큐를 사용하는 패턴 중에 가장 일반적인 비동기 호출 패턴으로, 클라이언트가 호출한 후 큐에 메시지가 제대로 들어갔을면 메시지의 처리 결과에 관계없이 응답을 기다리지 않고 바로 반환한다.
-
큐에 저장된 메시지는 비즈니스 컴포넌트에 의해서 나중에 처리된다.
Publish & Subscribe 패턴
-
메시지 큐에 구독자를 등록하면 클라이언트에서 보낸 하나의 메시지가 등록된 모든 구독자에게 전달이 되어서 처리된다.
-
1 : N 관계의 비동기 처리를 구현하고자 할 때 사용된다.
-
JMS
의Topic
이 이에 해당한다.
Routing 패턴
-
라우팅 패턴은 큐에 저장된 메시지를 조건에 따라서, 특정 비즈니스 컴포넌트로 라우팅 하는 기능이다.
-
Pub/Sub
처럼 큐에 여러 개의 비즈니스 컴포넌트가 붙기는 하지만, 특정 메시지는 조건에 따라서 특정 비즈니스 컴포넌트 한 개에만 전달 된다.
콜백 패턴
-
메시지 큐를 이용한 비동기 패턴은 클라이언트가 메시지 처리에 대한 응답을 받을 수 없다고 설명했었는데, 예외적으로 콜백 패턴을 사용하면 메시지 처리에 대한 응답을 받을 수 있다.
-
클라이언트가 요청을 보내서, 메시지 큐에 저장한 후에
CallBack
패턴도 다른 비동기 패턴과 마찬가지로 응답을 기다리지 않고 다음 로직을 진행한다. (그래야지 비동기 패턴이므로) -
비즈니스 컴포넌트에서 처리가 끝나면 서버는 다시 클라이언트에 처리가 끝났다는 응답과 함께 처리 결과 (
Response
) 메시지를 콜백으로 보낸다. -
이때 클라이언트가 응답 메시지가 올 때까지 기다리는 것이 아니라 비즈니스 로직을 수행하고 있기 때문에, 서버가 응답 메시지를 보내면 이벤트 핸들러 방식에 의해서 응답 메시지를 처리하는 이벤트 핸들러를 호출하여 응답 메시지를 처리하도록 한다.
-
콜백 방식의 호출은 응답 메시지를 받기 위해서, 몇 가지 부가적인 정보가 필요한데, 콜백 주소와
Correlation ID
라는 것이다. -
콜백 주소는 서버가 메시지를 다 처리하고 난 후에 클라이언트로 응답을 보낼 때 사용하는 클라이언트의 IP 주소와 포트이다.
-
또한
Correlation ID
라는 것이 특이한데, 클라이언트에서 10개의 요청을 서버에 보냈다고 가정하면, 서버가 메시지를 처리한 후에 콜백을 이용하여 응답을 보내면 해당 응답 메시지가 10개의 요청중 어느 요청에 대한 응답인지 식별할 수 없다. -
따라서 이를 식별하기 위해서 요청을 할 때,
Corrleation ID
를 같이 실어 보낸후 응답에 이ID
를 다시 실어서 보내게 된다. 따라서 콜백 응답 메시지가 어느 요청에 대한 응답 메시지인지를 식별할 수 있게 한다.
참고 문헌
>> Home