🖥️ Back-end

RabbitMQ 란?

승승장규 2025. 3. 4. 19:52

대규모 시스템에서 수배만 명의 사용자가 동시에 접속하고 상호작용할 수 있는 시스템을 구축해야 하는 상황에서 안정성과 신뢰성을 유지하면서 고성능을 제공해야 한다.

카톡이나 라인 같은 메시징 시스템을 개발한다고 했을 때, 사용자 수를 고려해서 초당 요청량을 생각해 보자, 시스템 모니터링을 통해 하루에 몇 명의 사용자가 접속하는지 알 수 있다. 그중에서 제일 높은 피크의 범위를 견딜 수 있게 애플리케이션을 개발해야 한다.

 

Queue를 통해서 대규모 스트림 처리를 할 수 있는데, 이번에는 RabbitMQ에 대해 학습해 보았다.

 

Queue : 선입선출(First In, First Out, FIFO) 구조를 따르는 선형 자료구조입니다. 먼저 들어간 데이터가 먼저 나오는 방식으로 동작하며, 일상생활에서 줄을 서는 느낌이라고 생각하면 될 것 같다.

 

RabbitMQ : 데이터(message)를 송신자(producer)로부터 수신자(consumer)에게 전달하는 중간 매개체 역할인 메시지 중개인이다. 이러한 message를 queue에 저장하고, 필요할 때 적절한 수신자에게 전달한다.

  • 비동기 처리 : 데이터를 비동기적으로 처리하여 시스템의 응답성을 높인다.
  • 부하 분산 : 여러 소비자에게 메시지를 분산시켜 시스템의 부하를 균형 있게 분산한다.
  • 내결함성 : 메시지를 안전하게 저장하며 시스템 장애 시 데이터 손실을 방지한다.

1. Message : RabbitMQ를 통해 전달되는 데이터 단위이다. ex) 사용자 등록 정보, 주문 내역

2. Producer(Producer Service) : 메시지를 생성하고 RabbitMQ에 보내는 역할을 한다

3. Queue(Service1,2,3,4) : 메시지를 저장하는 장소

4. Consumer(Consumer Service1,2,3,4) : queue에서 메시지를 가져와 처리하는 역할 ex) 이메일 발송 서비스가 queue에서 사용자 등록 정보를 가져와 환영 이메일을 보내는 경우

5. Exchange(Default Exchange) : 메시지를 적절한 queue로 라우팅 하는 역할로 Producer는 message를 직접 queue로 보내지 않고 exchange에 보낸 뒤, exchange에서 message를 적절한 queue로 보낸다.

 

Exchage 유형 ▼

 

Direct Exchange

  • 라우팅 키가 정확히 일치하는 큐로 메시지를 전달
  • 예를 들어, 라우팅 키가 error인 메시지는 error라는 바인딩 키를 가진 큐로 전

Topic Exchange

  • 라우팅 키의 패턴을 사용하여 메시지를 라우팅. 패턴에는 와일드카드 * (단어 하나)와 # (0개 이상의 단어)가 사용
  • 예를 들어, 라우팅 키가 quick.orange.rabbit인 메시지는 바인딩 키가 *. orange.*인 큐로 전달.

Fanout Exchange

  • 라우팅 키를 무시하고 교환기에 바인딩된 모든 큐로 메시지를 브로드캐스트
  • 모든 바인딩된 큐로 메시지가 전달

Headers Exchange

  • 라우팅 키 대신 메시지의 헤더를 기반으로 메시지를 라우팅
  • 헤더 값과 바인딩된 헤더 값이 일치하는 큐로 메시지를 전달

docker를 사용해서 RabbitMQ를 간단하게 pull 할 수 있다.

docker run -d --name rabbitmq -p5672:5672 -p 15672:15672 --restart=unless-stopped rabbitmq:management

 

RabbitMQ를 다운로드하고 localhost:15672로 접속하면 로그인 창이 뜨게 되는데 

id : guest

pw : guest 

로 접속할 수 있다.

 

 

이제 다양한 작업을 통해 message를 확인해보자 🖐️🖐️

'🖥️ Back-end' 카테고리의 다른 글

웹 사이트의 동작 원리  (0) 2025.03.11
Jackson 이란?  (1) 2025.03.05
Redis 기본 문법 알아보기  (1) 2025.03.03
인메모리 저장소와 Redis 란? - Redis Stack 설치  (0) 2025.03.01
JPA의 N+1 문제란?  (0) 2025.02.21