📨 Message Queue란?

정의

Message Queue는 메시지를 중간 저장소에 넣고, 생산자와 소비자를 느슨하게 분리하는 비동기 통신 방식이다. 즉시 처리하지 않아도 되는 작업을 안전하게 넘기는 데 유용하다.

🎯 사용하는 목적

  • 요청 처리와 작업 실행을 분리한다.
  • 트래픽이 몰릴 때 바로 버티기 쉽다.
  • 시스템 간 결합도를 낮춘다.
  • 비동기 작업을 자연스럽게 처리한다.
  • 재처리와 확장성을 확보하기 좋다.

포인트

Message Queue는 바로 처리하지 않아도 되는 일을 잠시 맡아두는 중간자 역할을 한다.

🧱 주요 구성 요소

  • Producer
  • Queue or Topic
  • Consumer
  • Broker

🔄 동작 방식

  1. Producer가 메시지를 보낸다.
  2. Broker가 메시지를 저장한다.
  3. Consumer가 메시지를 가져간다.
  4. 처리 후 ACK로 완료를 알린다.

⚖️ Queue 기반과 Stream 기반

항목 Queue Stream
목적 작업 전달 이벤트 기록 및 재처리
처리 보통 1회 소비 여러 번 읽기 가능
대표 예시 RabbitMQ, SQS Kafka, Redis Streams

🛠️ Spring AMQP 예시

Gradle 의존성

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

application.yml

spring:
  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest

Producer

@Autowired
private RabbitTemplate rabbitTemplate;

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

Consumer

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

📌 대표적인 메시지 큐

제품 특징
Kafka 대용량 이벤트 스트림 처리에 강함
RabbitMQ 일반적인 메시지 브로커로 사용하기 좋음
Amazon SQS 관리형 큐 서비스
Redis Streams 비교적 단순한 스트림 처리

⚠️ 주의할 점

  • 메시지는 중복 처리될 수 있다고 가정하는 것이 안전하다.
  • 순서 보장이 필요한지 먼저 확인해야 한다.
  • ACK와 재시도 정책을 명확히 해야 한다.
  • 메시지 크기와 보관 정책을 함께 설계해야 한다.

[!important] 정리 Message Queue는 시스템 간 결합도를 낮추고 비동기 처리를 안정화하는 도구이다. 단순히 “빨리 보내는 것”보다 안전하게 전달하고 재처리할 수 있는 구조를 만드는 것이 핵심이다.


연결문서

댓글남기기