MessageQueue
📨 Message Queue란?
정의
Message Queue는 메시지를 중간 저장소에 넣고, 생산자와 소비자를 느슨하게 분리하는 비동기 통신 방식이다. 즉시 처리하지 않아도 되는 작업을 안전하게 넘기는 데 유용하다.
🎯 사용하는 목적
- 요청 처리와 작업 실행을 분리한다.
- 트래픽이 몰릴 때 바로 버티기 쉽다.
- 시스템 간 결합도를 낮춘다.
- 비동기 작업을 자연스럽게 처리한다.
- 재처리와 확장성을 확보하기 좋다.
포인트
Message Queue는 바로 처리하지 않아도 되는 일을 잠시 맡아두는 중간자 역할을 한다.
🧱 주요 구성 요소
- Producer
- Queue or Topic
- Consumer
- Broker
🔄 동작 방식
- Producer가 메시지를 보낸다.
- Broker가 메시지를 저장한다.
- Consumer가 메시지를 가져간다.
- 처리 후 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는 시스템 간 결합도를 낮추고 비동기 처리를 안정화하는 도구이다. 단순히 “빨리 보내는 것”보다 안전하게 전달하고 재처리할 수 있는 구조를 만드는 것이 핵심이다.
댓글남기기