Note

[TIL] RabbitMQ 개념

by 달쿨

TIL

RabbitMQ 란?

* AMQP를 기반으로 한 오픈 소스 메시지 브로커로, 메시지를 송신하는 애플리케이션과 수신하는 애플리케이션 간의 비동기 통신을 가능하게 한다. 또 여러 소비자에게 메시지를 분산시켜 시스템의 부하를 균형 있게 분산 가능하다.

 

* AMQP(Advanced Message Queuing Protocol) 란?

메시지 지향 미들웨어를 위한 애플리케이션 계층 프로토콜

주로 메시지 브로커 시스템에서 표준화된 통신 방식을 제공하며, 메시지 기반의 데이터 송수신을 안전하고 신뢰성 있게 처리할 수 있도록 설계되어 있다. RabbitMQ는 이러한 AMQP 표준을 따르며 AMQP의 주요 개념(교환기, 큐, 바인딩 등)을 기반으로 메시지를 라우팅하고 처리한다.

 

주요 구성 요소

주요 구성 요소와 흐름을 간단하게 정리 해 보았다.

  • Message
    전달되는 데이터의 단위
  • Producer 생산자
    메시지를 생성하여 브로커(RabbitMQ)로 전송한다.
  • Exchange 교환기
    프로듀서가 보낸 메시지를 적절한 큐로 라우팅한다. 타입에 따라 라우팅 방식이 달라진다. 
  • Queue 큐
    메시지를 저장하는 공간. 메시지가 처리 될 때까지 대기하며 선입선출 방식으로 메시지를 처리한다.
  • Consumer 소비자
    큐에서 메시지를 받아 처리한다.
  • Binding 바인딩
    Exchange와 Queue를 연결하는 설정. 바인딩 키를 통해 메시지를 큐로 전달하는 조건 설정이 가능하다.

 

즉 프로듀서가 메시지를 생성하면 Exchange로 보내지고 메시지가 적절한 큐로 라우팅 되며 큐에 대기중인 메시지를 소비자가 받아 애플리케이션에 맞게 처리한다.

 

장단점

장점

장점으로는 메시지를 디스크에 저장해 문제 발생 시에도 메시지가 손실되지 않는다는 신뢰성을 보장한다는 점과 클러스터링을 통해 작업 부하를 효율적으로 분산할 수 있다는 점이 있다. 무엇보다 송신과 수신의 독립적인 처리가 가능해 비동기 처리가 필요한 환경에서 효과적으로 활용할 수 있다.

단점

단점으로는 초기 설정이 복잡하다는 점과 시스템 안정성을 위해 지속적인 유지 보수와 모니터링이 필요한 점이 있다. 또 메시지 크기에 제한이 있어서 높은 처리량이 필요한 환경에서는 Kafka 같은 고성능 메시지 브로커가 더 적합할 수 있다.

 

언제 사용하면 좋을까?

비동기 작업 처리가 필요한 경우에 유용하게 사용할 수 있다. 예를 들어 알림 전송 등과 같이 즉각적인 결과를 요구하지 않는 작업의 경우 RabbitMQ를 사용하면 큐에 저장해 순차적으로 처리할 수 있기 때문에 유용하다.  또 분산 시스템 간의 통신을 관리하는 데에 적합하다. MSA 환경에서 개별 서비스들이 메시지를 교환하도록 할 수 있다. 

 

실습한 내용

https://github.com/muncool39/study-mass-stream-processing/tree/main/RabbitMQ

 

study-mass-stream-processing/RabbitMQ at main · muncool39/study-mass-stream-processing

대규모 스트림 처리 강의를 들으며 실습한 내용. Contribute to muncool39/study-mass-stream-processing development by creating an account on GitHub.

github.com

 

블로그의 정보

note

달쿨

활동하기