🐇 RabbitMQ란?

정의

RabbitMQ는 메시지를 중간에 저장하고 전달하는 메시지 브로커이다. Producer와 Consumer를 분리해 비동기 처리와 작업 분산을 쉽게 만든다.

🎯 사용하는 이유

  • 작업을 비동기로 분리한다.
  • Producer와 Consumer의 결합도를 낮춘다.
  • 메시지 전달을 안정적으로 관리한다.
  • 큐 기반 작업 처리를 쉽게 만든다.

포인트

RabbitMQ는 메시지 라우팅과 전달에 강한 큐 브로커다.

🧱 주요 구성 요소

  • Producer
  • Exchange
  • Queue
  • Binding
  • Routing Key
  • Consumer

🔄 동작 흐름

  1. Producer가 메시지를 Exchange로 보낸다.
  2. Exchange가 Routing Key를 기준으로 Queue에 전달한다.
  3. Queue가 메시지를 저장한다.
  4. Consumer가 Queue에서 메시지를 가져간다.
  5. 처리 완료 후 ACK를 보낸다.

🧩 Exchange 종류

종류 설명
Direct Routing Key가 정확히 일치할 때 전달
Topic 패턴 기반 라우팅
Fanout 모든 Queue로 브로드캐스트
Headers 헤더 값 기준 라우팅

🛠️ Spring AMQP 예시

Gradle 의존성

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-amqp'
}

Producer

@Autowired
private RabbitTemplate rabbitTemplate;

public void send(String exchange, String routingKey, String message) {
    rabbitTemplate.convertAndSend(exchange, routingKey, message);
}

Consumer

@RabbitListener(queues = "myQueue")
public void receive(String message) {
    System.out.println("Received: " + message);
}

⚖️ RabbitMQ와 Kafka 차이

항목 RabbitMQ Kafka
목적 메시지 라우팅/큐 처리 이벤트 스트림 처리
처리 방식 주로 Push 주로 Pull
강점 유연한 라우팅 대용량 스트림

⚠️ 주의할 점

  • ACK 정책을 명확히 해야 한다.
  • 메시지 중복 가능성을 고려해야 한다.
  • Dead Letter Queue 같은 실패 처리 전략이 필요할 수 있다.
  • Queue와 Exchange 설계를 먼저 정리해야 한다.

[!important] 정리 RabbitMQ는 메시지 전달과 라우팅을 유연하게 다루는 대표적인 메시지 브로커다. 비동기 작업 분리와 이벤트 전달 구조를 만들 때 유용하다.


연결문서

댓글남기기