본문 바로가기
쿤즈 Dev/Spring Boot

[Spring Boot] RabbitMQ 란 무엇인가(1)

by :)Koon 2022. 12. 26.

스프링부트를 사용하면서 데이터를 다른 서버로 전달해야할 경우가 최근에는 많이 발생합니다. 많는 서버들이 덩치가 커지면서 MSA로 넘어가는 일이 많이지기 때문이죠. 그래서 결제와 같은 데이터나 통계를 위해 데이터가 다른서버로 이동해야할때 많이 사용하는 기술 중 하나가 바로 MQ(Message Queue)입니다.


이번 포스팅에서는 여러가지 메세지 큐중에서 RabbitMQ 에 대해서 알아보도록 할게요.


RabbitMQ 란?

래빗엠큐는 메세지 브로커를 의미합니다. 즉, 어떠한 메세지, 정보를 전달할때 중간에서 그 메세지를 받아서 다른 서버로 전송하는 기능을 합니다. 그래서 브로커라는 단어를 사용하는것 같아요.


래빗엠큐는 AMQP 표준을 따릅니다. Advanced Message Queuing Protocol의 약자로 메세지 지향 미들웨어를 위한 프로토콜입니다.

그러면 레빗엠큐에서 알아야 할 것들은 무엇이 있을까요?


래빗엠큐 용어

레빗엠큐에서 중요하게 다루는 개념은 Producer, Consumer, Queue, Exchainge, Binding 입니다. 각각은 어떤 내용들인지 알아볼게요.


Producer

프로듀서는 메세지를 보내는(발행하는) 주체입니다. 프로듀서가 메세지를 발행하게되면 이 메세지는 큐에 저장되는 구조입니다.

Consumer

프로듀서가 메세지를 보낸다면 컨슈머는 메세지를 받는 주체입니다. 큐에 메세지가 있다면 즉시 그 메세지를 큐에서 가져오게됩니다.

Exchange

익스체인지는 프로듀서가 메세지를 보낼때 그 메세지를 큐가 바로 받지 않고 반드시 익스체인지가 받도록 되어 있습니다. 받은 메세지는 특정 타입에 따라 큐로 전달해줍니다. 그래서 프로듀서는 큐에 직접 접근하는것이 아닌 익스체인지로 메세지를 보내게 됩니다. 이렇게 메세지를 받은 익스체인지는 규칙에 따라 큐로 전달합니다. 규칙은 아래에서 다시 다뤄보도록 하겠습니다.

Binding

바인딩은 익스체인지가 큐로 메세지를 전달할때(라우팅) 정해놓은 규칙을 의미합니다. 이 바인딩 규칙에 따라 프로듀서가 익스체인지로 메세지를 전달하면 익스체인지는 바인딩 규칙에 의해 큐로 전달하게 됩니다.

Queue

마지막으로 큐입니다. 큐는 프로듀서가 보낸 실제 메세지를 저장하고 컨슈머에게 메세지를 전달합니다. 큐는 반드시 익스체인지를 통해서만 메세지를 전달받으며 바인딩 규칙에 의해서 받게됩니다. 이러한 규칙에 따라 큐는 여러개가 있을 수 있으며 익스체인지도 여러개에 매핑이 될 수 있는 관계입니다.


Exchange Type

익스체인지는 여러가지 라우팅 전략이 있습니다. 이 전략에 따라서 메세지를 큐로 메세지를 전달합니다. 어떤 전략이 있는지 하나하나 알아볼게요.


Direct

다이랙트 익스체인지는 메세지의 라우팅 키와 일치하는 큐로 데이터를 라우팅합니다.

만약 라우팅키가 test.computer 라면 정확하게 일치하게 바인딩 되어있는 큐로 데이터를 전달합니다. 즉, 1:1로 매칭된 큐로만 전달하는 방식입니다.

 

topic

토픽은 다이랙트와 비슷하지만 패턴이 일치하는 바인딩 된 큐로 데이터를 라우팅합니다. 만약 라우팅키가 test.computer.monitor가 있고 test.computer.keyboard가 있을때 *.computer.* 이라면 두 라우팅키가 모두 일치하기때문에 메세지는 라우팅되어있는 두 큐에 모두 전달됩니다.

 

fanout

팬아웃은 익스체인지가 가지고 있는 모든 큐에 메세지를 전달합니다.

그래서 익스체인지 하나에 여러개의 큐가 연결되어있다면 모든 큐에 동일한 메세지를 전달합니다. 그래서 브로드캐스를 할때 사용할 수 있습니다.

header

헤더는 실제 헤더에 정의된 key-value를 확인하여 라우팅합니다. 이때 방식은 topic과 흡사하지만 라우팅을 위해 헤더정보를 사용한다는 차이점이 있습니다.


메세지큐의 메세지 보존

래빗엠큐는 프로듀서가 메세지를 전달하면 반드시 큐에 메세지를 보존하고 있습니다. 하지면 무한정 메세지를 보존할 수 없기때문에 보존하는 규칙도 만들어서 사용할 수 있습니다. 이는 익스체인지 옵션으로 정의할 수 있습니다.


Durability

이 옵션은 브로커가 재시작 될 때 메세지를 유지할지에 대한 여부를 체크하는 옵션입니다.

  • durable: 재시작해도 메세지는 그대로 남아있습니다.
  • transient: 재시작하면 메세지는 사라집니다.

Auto-delete

이 옵션은 마지막 큐 연결이 해제되면 바로 삭제됩니다.


이번 포스팅에서는 RabbitMQ(래빗엠큐)에 대해서 알아보았습니다. 무작정 따라할 수 있지만 기본적인 용어는 알아보고 가는편이 공부하는데 있어서 개인적으로 좋은것 같아요. 용어는 익숙해지면 사용하기 편하니까요. 다음 포스팅에서는 실제로 docker를 이용해서 래빗엠큐를 로컬에서 띄우고 익스체인지와 큐를 셋팅하면서 사용하는 방법을 알아보도록 하겠습니다.

댓글