πŸ“¬

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 이메일 λ°œμ†‘ 큐 이미지/λ™μ˜μƒ 인코딩 큐