들어가기 앞서
이번 포스팅에서는 RabbitMQ의 Exchange 전략들에 대해서 알아볼 예정입니다.
이전 포스팅과 설명드린 것과 같이, exchange와 work queue의 개념은 다음과 같습니다. 이전 포스팅에서는 work queue에 대한 개념을 공부했고, 이번 포스팅에서는 exchange에 대한 개념을 공부할 예정입니다.
- exchange : 프로듀서에게 메시지를 받아 어떤 큐로 보낼지 결정 (프로듀서 → 큐)
- work queue : 큐에 있는 메시지를 어떤 컨슈머에게 보낼지 결정 (큐 → 컨슈머)

https://www.rabbitmq.com/tutorials
공식 문서에 각 전략에 대한 예제 가이드가 있으니, 함께 참고해 주시면 감사하겠습니다.
Exchange란?
Exchange는 프로듀서(Producer)가 보낸 메시지를 어떤 큐(Queue)로 보낼지 결정하는 라우터 역할을 합니다.

Exchange는 메시지를 직접 저장하지 않으며, 다음과 같은 방식으로 메시지를 라우팅합니다.
- 라우팅 키 (Routing Key): 메시지에 포함되는 문자
- 바인딩 키 (Binding Key): 큐가 Exchange에 연결되면서 정의한 조건
- 헤더 (Headers): 메시지에 포함된 key-value 데이터 (Headers Exchange에서 사용)
Exchange 전략
Direct Exchange

- 동작: 메시지의 라우팅 키(Routing Key)와 큐의 바인딩 키(Binding Key)가 정확히 일치할 때 메시지를 전달한다.
- 사용 예시: 특정 이벤트(예: order.created)에 대해 정확히 일치하는 큐로 메시지를 전달할 때 사용한다.
Fanout Exchange

- 동작: 라우팅 키를 무시하고, 해당 Exchange에 바인딩된 모든 큐에 메시지를 브로드캐스트한다.
- 사용 예시: 시스템 전체에 공지사항이나 로그를 전파할 때 사용한다.
Topic Exchange

- 동작: 라우팅 키와 바인딩 키를 패턴 매칭하여 메시지를 전달한다.
- *: 단일 단어 매칭
- #: 0개 이상의 단어 매칭
- 사용 예시: 다양한 주제의 메시지를 유연하게 라우팅할 때 사용한다.
Headers Exchange

- 동작: 라우팅 키를 사용하지 않고, 메시지의 헤더 값을 기준으로 큐에 메시지를 전달한다.
- 사용 예시: 메시지의 속성에 따라 복잡한 라우팅이 필요할 때 사용한다.
Protocol 전략
Publish-Subscribe 패턴
- 개념: 하나의 메시지를 여러 소비자에게 전달하는 패턴이다.
- 구현: Fanout Exchange를 사용하여 메시지를 모든 바인딩된 큐에 브로드캐스트한다.
- RabbitMQ에 대해 알아보자 - (5) Pub-Sub 패턴 / Fanout Exchange 전략
Routing 패턴
- 개념: 메시지를 특정 조건에 따라 선택적으로 소비자에게 전달하는 패턴이다.
- 구현: Direct Exchange를 사용하여 라우팅 키와 바인딩 키가 일치하는 큐에만 메시지를 전달한다.
Topic 패턴
- 개념: 메시지를 주제(Topic) 기반으로 라우팅하는 패턴이다.
- 구현: Topic Exchange를 사용하여 패턴 매칭을 통해 메시지를 전달한다.
Remote Procedure Call (RPC)
- 개념: 클라이언트가 서버에 요청을 보내고, 응답을 기다리는 방식이다. 마치 네트워크를 통해 원격 함수 호출을 하는 것처럼 동작한다. RabbitMQ에서는 기본적으로 비동기 메시징이지만, RPC 패턴을 사용하면 동기적 요청-응답 구조를 흉내낼 수 있다.
- 구현: 클라이언트는 요청 메시지에 응답을 받을 큐의 정보를 포함시키고, 서버는 처리 결과를 해당 큐에 응답으로 보낸다.
Publish Confirm 패턴
- 개념: RabbitMQ에서 메시지를 유실 없이 안정적으로 전송했는지 확인하기 위한 메커니즘이다. 프로듀서가 메시지를 브로커에 전송하면, 브로커가 수신 완료 여부를 응답(confirm) 해준다. 이걸 통해 메시지가 정상적으로 Exchange까지 도착했는가를 알 수 있다.
- 구현: 클라이언트는 요청 메시지에 응답을 받을 큐의 정보를 포함시키고, 서버는 처리 결과를 해당 큐에 응답으로 보낸다.
각 Exchange 전략과 Protocol 전략은 다음 포스팅에서 자세히 설명할 수 있도록 하겠습니다.
'Kafka, RabbitMQ' 카테고리의 다른 글
| RabbitMQ에 대해 알아보자 - (8) Routing 패턴 / Direct Exchange 전략 (0) | 2025.05.08 |
|---|---|
| RabbitMQ에 대해 알아보자 - (7) Pub-Sub 패턴 / Fanout Exchange 전략 (0) | 2025.05.06 |
| RabbitMQ에 대해 알아보자 - (5) Work Queue를 통한 분산처리 (0) | 2025.05.03 |
| RabbitMQ에 대해 알아보자 - (4) 메시지 실패 처리 DLQ, DLX, PLQ (0) | 2025.04.30 |
| RabbitMQ에 대해 알아보자 - (3) 메시지 처리에 실패하게 된다면? (0) | 2025.04.30 |