1. RabbitMQ란?
- RabbitMQ는 메시지 브로커입니다. 메시지 브로커는 데이터(메시지)를 송신자(프로듀서)로부터 수신자(컨슈머)에게 전달하는 중간 매개체 역할을 합니다.
- RabbitMQ는 이러한 메시지를 큐(queue)에 저장하고, 필요할 때 적절한 수신자에게 전달합니다.
(1) RabbitMQ의 역할
- 비동기 처리: 데이터를 비동기적으로 처리하여 시스템의 응답성을 높입니다.
- 부하 분산: 여러 소비자에게 메시지를 분산시켜 시스템의 부하를 균형 있게 분산합니다.
- 내결함성: 메시지를 안전하게 저장하여 시스템 장애 시 데이터 손실을 방지합니다.
2. RabbitMQ의 기본 구성 요소
(1) 메시지
- 메시지는 RabbitMQ를 통해 전달되는 데이터 단위입니다. 예를 들어, 사용자 등록 정보나 주문 내역이 메시지가 될 수 있습니다.
(2) 프로듀서
- 메시지를 생성하고 RabbitMQ에 보내는 역할을 합니다. 예를 들어, 웹 애플리케이션이 사용자 등록 정보를 RabbitMQ에 보내는 경우 프로듀서가 됩니다.
(3) 큐
- 메시지를 저장하는 장소입니다. 메시지는 큐에 저장되었다가 소비자에게 전달됩니다. 큐는 FIFO(First In, First Out) 방식으로 메시지를 처리합니다.
(4) 컨슈머
- 큐에서 메시지를 가져와 처리하는 역할을 합니다. 예를 들어, 이메일 발송 서비스가 큐에서 사용자 등록 정보를 가져와 환영 이메일을 보내는 경우 컨슈머가 됩니다.
(5) 익스체인지
- 메시지를 적절한 큐로 라우팅하는 역할을 합니다. 프로듀서는 메시지를 직접 큐에 보내지 않고, 익스체인지에 보내며, 익스체인지는 메시지를 적절한 큐로 전달합니다.
3. RabbitMQ와 AMQP
- RabbitMQ는 AMQP(Advanced Message Queuing Protocol)를 사용합니다.
- AMQP는 메시지 브로커를 위한 프로토콜로, 메시지의 생성, 전송, 큐잉, 라우팅 등을 표준화하여 메시지 브로커가 상호 운용될 수 있게 합니다.
(1) AMQP의 주요 개념
- 메시지(Message): 전송되는 데이터 단위입니다.
- 큐(Queue): 메시지를 저장하고 전달하는 구조입니다.
- 익스체인지(Exchange): 메시지를 큐로 라우팅하는 역할을 합니다.
- 바인딩(Binding): 익스체인지와 큐를 연결하는 설정입니다. 바인딩을 통해 메시지가 어느 큐로 전달될지 정의합니다.
(2) 익스체인지 유형
- 메시지 브로커가 메시지를 교환기에서 큐로 라우팅하는 방식입니다.
- 익스체인지는 다양한 방식으로 메시지를 라우팅할 수 있으며, 주로 메시지의 라우팅 키와 바인딩 키 또는 패턴을 기반으로 작동합니다.
- Direct Exchange
- 라우팅 키가 정확히 일치하는 큐로 메시지를 전달합니다.
- 예를 들어, 라우팅 키가 error인 메시지는 error라는 바인딩 키를 가진 큐로 전달됩니다.