백엔드 면접 용어 사전
메시지 큐

RabbitMQ

익스체인지·큐 기반의 메시지 브로커. 유연한 라우팅과 개별 메시지 제어에 강하다.

익스체인지 → 바인딩 → 큐 구조로 메시지를 라우팅하는 브로커. AMQP 프로토콜 구현체다.

메시지가 흐르는 길

생산자 ──► [익스체인지] ──바인딩 규칙──► [큐] ──► 소비자
                │
                ├─ routing key 로 어디에 넣을지 결정

생산자는 큐가 아니라 익스체인지에 보낸다. 어느 큐로 갈지는 익스체인지와 바인딩 규칙이 정한다 — 이 간접 계층이 유연함의 원천이다.

익스체인지 종류

종류라우팅 방식쓰임
direct라우팅 키가 정확히 일치특정 큐로 지정 전달
topic패턴 매칭 (order.*.created)주제별 구독
fanout바인딩된 모든 큐로 복제브로드캐스트
headers헤더 값으로 매칭복잡한 조건

소비와 ack

소비자가 메시지 수신
   ├─ 처리 성공 → basic.ack   → 큐에서 삭제
   ├─ 처리 실패 → basic.nack  → 재전달 또는 DLQ
   └─ 응답 없이 연결 끊김      → 재전달

prefetch(QoS) 로 소비자당 미확인 메시지 수를 제한한다. 이걸 안 걸면 빠른 브로커가 느린 소비자에게 메시지를 잔뜩 밀어 넣어 메모리가 터진다.

  • prefetch=1 — → 하나 처리하고 ack 해야 다음 것을 받음(공평 분배) prefetch=100 → 처리량은 높지만 한 소비자에 쏠릴 수 있음

Kafka와의 근본 차이

RabbitMQ는 "브로커가 똑똑하고 소비자는 단순", Kafka는 "브로커가 단순하고 소비자가 똑똑하다".

  • RabbitMQ — 브로커가 라우팅·재전달·우선순위·TTL을 다 관리한다
  • Kafka — 브로커는 그냥 로그를 쌓고, 소비자가 오프셋을 관리한다

그래서 RabbitMQ는 개별 메시지 제어에 강하고, Kafka는 대량 처리량에 강하다.

언제 RabbitMQ인가

  • 메시지마다 우선순위·TTL·지연 전달이 필요할 때
  • 복잡한 라우팅(조건에 따라 다른 서비스로)
  • 작업 큐(job queue)처럼 한 번 처리하면 끝인 일
  • 재처리·이력 보관이 필요 없을 때

함께 보면 좋은 용어

노트에서 맥락과 함께 보기 — 메시지 큐·비동기 — Kafka/RabbitMQ·EOS·순서·outbox