21.5.비동기 메시징 패턴 이해하기

  • 메시지 큐에 메시지를 전달하고 수신하는 방법도 몇 가지 형태가 더 있다.
  • 상황에 따라 적합한 방식을 선택할 수 있도록 미리 알아 두는 것이 좋다.
  • 이번 장에서 사용한 방식은 퍼블리시-서브스크라이브(publish-subscribe, pub-sub) 패턴이다.
  • 이 패턴은 서브스크라이버(하나 이상이거나 없을 수도 있다)가 퍼블리시된 메시지를 구독하는 형태다.

퍼블리시-서브스크라이브(publish-subscribe, pub-sub) 패턴

  • 퍼블리시-서브스크라이브 패턴이 적합하지 않은 경우도 있다.
  • 이 패턴에서는 퍼블리셔가 메시지를 사용하는 것이 누구이고, 어떻게 처리하며, 언제 처리가 끝나는지를 전혀 알 방법이 없다.
  • 이를 해결할 수 있는 패턴이 리퀘스트-리스폰스(request-response) 패턴이다.
  • 이 패턴에서는 클라이언트가 메시지 큐에 메시지를 전달하고 응답을 기다린다.
  • 핸들러는 요청 메시지를 처리한 다음 응답 메시지를 메시지 큐에 보내고, 큐는 다시 이 메시지를 클라이언트에 전달한다.
  • 이 패턴은 과부하를 일으키지 않는 핸들러와 클라이언트가 기다리는 동안 다른 작업을 할 수 있다는 비동기 메시징의 장점을 그대로 유지하면서도 일반적인 동기 서비스 호출을 대체할 수 있다.

리퀘스트-리스폰스(request-response) 패턴

  • 대부분의 메시지 큐 기술은 이들 패턴과 그 변종을 모두 지원한다.
  • fire-and-forget: 클라이언트가 요청이 아닌 명령 메시지를 보내고 응답은 기다리지 않는 패턴
  • scatter-gather: 여러 서브스크라이버에 메시지를 보낸 다음 이들로부터 응답을 모아 오는 패턴
  • 이번 장에서는 메시지 큐 기술로 레디스와 NATS를 살펴봤다.
  • 하지만 이 외에 래빗MQ(RabbitMQ)도 고려해 볼 만하다.
  • 래빗MQ는 복잡한 메시지 라우팅과 메시지를 디스크에 저장하는 퍼시스턴트 메시징을 지원한다.
  • 래빗MQ 역시 레디스나 NATS와 마찬가지로 도커 허브에 공식 이미지가 공개돼 있다.

links

social