큐잉 (Queuing)
메시지를 안전하게 저장하고, 소비자가 처리할 때까지 순서대로 보관·전달하는 것.
- 포인트
- 생산자(Producer)가 메시지를 브로커에 보냄 → 큐(Queue)에 쌓임
- 소비자(Consumer)가 큐에서 메시지를 가져가 처리
- 메시지는 소비자가 확인(200 ack)해야 큐에서 제거됨
- 처리 실패 시 재전송 가능 (retry, dead-letter queue 활용)
- 예시
- 사용자가 주문 취소 요청 → 명령 메시지가 큐에 저장
- Command Service가 이 큐를 구독 → 순차적으로 처리
라우팅 (Routing)
메시지를 어떤 큐에 보낼지 결정하는 규칙
- RabbitMQ에서 Exchange → Queue 바인딩 규칙을 기반으로 동작
- 라우팅 유형
- Direct Routing : 라우팅 키 = 큐 키워드 일치 시 전달
- Fanout Routing : 모든 큐에 메시지 복제(브로드캐스트)
- Topic Routing : 와일드카드 기반(예: device.*.status 규칙의 큐로 전달)
- Headers Routing : 메시지 헤더 값 기반 라우팅 (예: {"city": "Seoul"}인 메시지는 SeoulQueue로만 전달)
- 메시지 유형별 적용 포인트
- Telemetry 데이터 → 대량/지속적 스트리밍 → 전용 처리 파이프라인
- Command 메시지 → 즉시 처리 & 응답 필수 → 안정적인 큐 처리
- Fanout 메시지 → 여러 소비자에게 브로드캐스트 (예: 운영자가 지도에서 “모든 기기 상태” 확인)
비교
| 구분 | 큐잉 (Queuing) | 라우팅 (Routing) |
| 목적 | 메시지를 보관·순서 전달 | 메시지를 어떤 큐로 보낼지 결정 |
| 관점 | 소비자 처리 보장 | 메시지 분배 규칙 |
| 보장 | Ack/Nack, Retry, DLQ | Exchange → Queue 매핑 |
| 비유 | “택배 상자가 물류창고에 줄지어 대기” | “주소 보고 어느 택배차에 실을지 결정” |
| Micro Mobility 예시 | 잠금 해제 명령 큐에서 순차 처리 | 기기 상태는 모니터링/분석 큐 모두로 전달 |
요약!
- 큐잉 = 메시지를 안전하게 쌓아두고 소비자가 순서대로 처리하도록 보장
- 라우팅 = 메시지를 올바른 큐(혹은 여러 큐)로 분배하는 규칙
'CS 정리' 카테고리의 다른 글
| 논동기와 비블로킹 (1) | 2025.09.05 |
|---|---|
| 동기(Synchronous) & 비동기(Asynchronous) (0) | 2025.09.03 |
| 블로킹(Blocking) & 논블로킹(Non-Blocking) (0) | 2025.09.02 |
| Feign 사용해보기 (1) | 2025.08.11 |
| Java + Kotlin 혼용 개발 (0) | 2025.07.31 |