📬

Message Queue

큐를 통한 비동기 작업 처리

Message Queue는 Pub/Sub와 달리 메시지가 정확히 하나의 소비자에게만 전달됩니다(점대점). 큐가 버퍼 역할을 하여 생산자와 소비자의 처리 속도 차이를 흡수하고, 소비자가 다운되어도 메시지가 큐에 보존됩니다.

구조 다이어그램

📝
Producer
메시지 생산자
① enqueue
📬
Message Queue
msg3 msg2 msg1
FIFO →
② dequeue
⚙️
Consumer A
③ 처리 + ACK
⚙️
Consumer B
대기 중
Point-to-Point: 각 메시지는 정확히 하나의 Consumer만 처리
흐름 설명
  1. Producer가 메시지를 큐에 enqueue
  2. 메시지가 큐에 저장 (FIFO 순서 대기)
  3. Consumer가 메시지를 dequeue하여 처리
  4. 처리 완료 후 ACK 전송, 큐에서 메시지 제거

동작 흐름

1

생산자(Producer)가 메시지를 큐에 enqueue

2

메시지가 큐에 저장되어 대기 (FIFO)

3

소비자(Consumer)가 큐에서 메시지를 dequeue

4

소비자가 처리 완료 후 ACK 전송, 큐에서 메시지 제거

장점

  • 메시지 유실 방지 (영속성)
  • 처리 속도 차이 흡수 (버퍼)
  • 실패 시 재처리 가능
  • 소비자 수평 확장 용이

단점

  • 지연 발생 (비동기)
  • 큐 모니터링 필요
  • 메시지 순서 보장 어려울 수 있음
  • Dead Letter Queue 관리 필요

사용 사례

Sidekiq / Resque (Rails 백그라운드 잡) RabbitMQ AWS SQS 이메일 발송 큐 이미지/동영상 인코딩 큐