백엔드 면접 용어 사전
메시지 큐익스체인지 · exchange

Exchange

RabbitMQ에서 발행자가 메시지를 보내는 대상. 어느 큐로 갈지는 바인딩 규칙이 정한다.

RabbitMQ(AMQP 0-9-1)에서 발행자가 메시지를 보내는 대상. Kafka와 모델이 갈리는 지점이다.

핵심 — 발행자는 큐를 모른다

[Kafka]     프로듀서 → 토픽(파티션)          목적지를 직접 지정
[RabbitMQ]  발행자   → 익스체인지 → ? → 큐   목적지는 바인딩이 정한다

발행자는 익스체인지 이름과 라우팅 키(routing key, 메시지에 붙이는 문자열 꼬리표)만 지정한다. 어느 큐로 갈지는 바인딩(익스체인지와 큐를 연결하는 규칙)이 결정한다.

발행자 --routing key: order.kr.created--> [익스체인지]
                                            ├─ 바인딩 "order.*.created" → 큐 A ✓
                                            ├─ 바인딩 "order.kr.#"      → 큐 B ✓
                                            └─ 바인딩 "payment.*"       → 큐 C ✗

간접 계층이 RabbitMQ의 강점이다 — 새 구독자를 붙일 때 발행자 코드를 한 줄도 안 고치고 바인딩만 추가하면 된다.

네 가지 종류

종류라우팅 방식쓰는 곳
direct라우팅 키가 바인딩 키와 정확히 일치할 때만작업 유형별 분배
fanout라우팅 키를 무시하고 바인딩된 모든 큐에 복사브로드캐스트·알림
topic점(.)으로 나뉜 패턴 매칭다차원 필터링
headers라우팅 키 대신 헤더 속성으로 매칭(x-match=any 또는 all)조건이 복잡할 때

topic의 와일드카드 두 개를 정확히 구분해야 한다.

  • 단어 정확히 하나

단어 0개 이상

라우팅 키: order.kr.created
  order.*.created  ✓ (kr 자리에 단어 하나)
  order.#          ✓ (뒤에 몇 단어든)
  order.*          ✗ (kr.created 는 두 단어)

fanout과 Kafka 컨슈머 그룹의 차이

결과는 비슷해 보이지만 시점이 다르다.

  • fanout — 발행 시점에 큐마다 메시지를 복사한다 (저장이 N배)
  • Kafka 그룹 — 로그는 하나. 그룹마다 자기 오프셋으로 읽을 뿐 (저장은 1배)

구독자가 늘 때 비용 곡선이 다르다는 뜻이다.

어디로도 못 가는 메시지

어떤 바인딩과도 매칭되지 않으면 메시지는 조용히 버려진다. 발행 시 mandatory 플래그를 켜면 반환받을 수 있고, alternate exchange를 지정해 받아 둘 수도 있다. 라우팅 오타가 무증상으로 넘어가는 게 이 모델의 대표적 함정이다.

면접 함정

  • "RabbitMQ는 발행자가 큐를 지정한다" → 익스체인지에 보낸다.
  • "topic의 *는 아무거나" → 단어 하나다. 여러 단어는 #.

함께 보면 좋은 용어

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