비동기 메시지 패턴


비동기 메시지 패턴은 앞서 살펴보았듯이 중간에 큐를 두어서 구현하기 때문에, 여러 가지 메시지 전달 패턴을 구현할 수 있다. 몇 가지 대표적인 패턴에 대해서 알아보자.

Fire & Forgot 패턴

  • 메시지 큐를 사용하는 패턴 중에 가장 일반적인 비동기 호출 패턴으로, 클라이언트가 호출한 후 큐에 메시지가 제대로 들어갔을면 메시지의 처리 결과에 관계없이 응답을 기다리지 않고 바로 반환한다.

  • 큐에 저장된 메시지는 비즈니스 컴포넌트에 의해서 나중에 처리된다.

Publish & Subscribe 패턴

  • 메시지 큐에 구독자를 등록하면 클라이언트에서 보낸 하나의 메시지가 등록된 모든 구독자에게 전달이 되어서 처리된다.

  • 1 : N 관계의 비동기 처리를 구현하고자 할 때 사용된다.

  • JMSTopic이 이에 해당한다.

Routing 패턴

0_gFwb04MsfqtVB5bY

  • 라우팅 패턴은 큐에 저장된 메시지를 조건에 따라서, 특정 비즈니스 컴포넌트로 라우팅 하는 기능이다.

  • Pub/Sub 처럼 큐에 여러 개의 비즈니스 컴포넌트가 붙기는 하지만, 특정 메시지는 조건에 따라서 특정 비즈니스 컴포넌트 한 개에만 전달 된다.

콜백 패턴

  • 메시지 큐를 이용한 비동기 패턴은 클라이언트가 메시지 처리에 대한 응답을 받을 수 없다고 설명했었는데, 예외적으로 콜백 패턴을 사용하면 메시지 처리에 대한 응답을 받을 수 있다.

  • 클라이언트가 요청을 보내서, 메시지 큐에 저장한 후에 CallBack 패턴도 다른 비동기 패턴과 마찬가지로 응답을 기다리지 않고 다음 로직을 진행한다. (그래야지 비동기 패턴이므로)

  • 비즈니스 컴포넌트에서 처리가 끝나면 서버는 다시 클라이언트에 처리가 끝났다는 응답과 함께 처리 결과 (Response) 메시지를 콜백으로 보낸다.

  • 이때 클라이언트가 응답 메시지가 올 때까지 기다리는 것이 아니라 비즈니스 로직을 수행하고 있기 때문에, 서버가 응답 메시지를 보내면 이벤트 핸들러 방식에 의해서 응답 메시지를 처리하는 이벤트 핸들러를 호출하여 응답 메시지를 처리하도록 한다.

  • 콜백 방식의 호출은 응답 메시지를 받기 위해서, 몇 가지 부가적인 정보가 필요한데, 콜백 주소와 Correlation ID 라는 것이다.

  • 콜백 주소는 서버가 메시지를 다 처리하고 난 후에 클라이언트로 응답을 보낼 때 사용하는 클라이언트의 IP 주소와 포트이다.

  • 또한 Correlation ID 라는 것이 특이한데, 클라이언트에서 10개의 요청을 서버에 보냈다고 가정하면, 서버가 메시지를 처리한 후에 콜백을 이용하여 응답을 보내면 해당 응답 메시지가 10개의 요청중 어느 요청에 대한 응답인지 식별할 수 없다.

  • 따라서 이를 식별하기 위해서 요청을 할 때, Corrleation ID를 같이 실어 보낸후 응답에 이 ID를 다시 실어서 보내게 된다. 따라서 콜백 응답 메시지가 어느 요청에 대한 응답 메시지인지를 식별할 수 있게 한다.

참고 문헌


>> Home