RabbitMq란?
RabbitMQ는 오픈 소스 메시지 브로커로, 메시지 송수신을 관리해 주는 역할을 합니다.
AMQP를 사용하여 안정적이고 확장 가능한 메시징 서비스를 제공합니다.
RabbitMQ는 메시지 큐를 사용하여 시스템 간의 비동기 처리를 가능하게 하며, 데이터 손실에 대해 안정성을 보장합니다.
RabbitMq 주요 개념
위의 사진과 같은 과정을 요약하자면
Publisher가 Exchange에 메시지를 발행 -> Exchange가 메시지를 적절한 Queue(큐)로 라우팅 -> 라우팅된 메시지를 Queue(큐)에 저장됨 -> Consumer(소비자)가 메시지를 읽어 처리
1. Publisher(생산자)
- 메시지를 생성하고 RabbitMq에 전달하는 역할을 한다..
- 특정 작업의 데이터를 포함한 메시지를 생성하고 Exchange로 발행(Pusblish)합니다.
- ex) 주문 시스템에서 새 주문 데이터를 메시지로 생성하여 전달한다.
2. Exchange
- 메시지를 큐(Queue)로 라우팅하는 역할을 한다.
- Exchange의 타입에는 4가지가 있습니다.
- Direct : 특정 큐로 정확하게 라우팅한다.
- Fanout : 모든 연결된 큐(Queue)로 브로드캐스트한다.
- Topic : 패턴에 따라 큐(Queue)에 메시지를 전달한다.
- Headers: 헤더 정보로 라우팅을 결정한다.
3. Queue(큐)
- 메시지를 보관하는 공간이다.
- 메세지는 Queue에 쌓이며 Consumer(소비자)가 처리할 준비가 될 때까지 대기한다.
- 설정을 통해 RabbitMq를 재시작 후 에도 메시지를 유지할 수 있다.
4. Consumer(소비자)
- 큐(Queue)에서 메시지를 받아 처리하는 역할을 한다.
- 큐(Queue)에 있는 메시지를 읽고 데이터 저장 및 비즈니스 로직 실행을 담당한다.
- ex) 결제 서비스 큐(Queue)의 메시지를 읽고 결제 처리 로직을 수행한다.
RabbitMq의 장점과 단점
[장점]
- 확장성(대규모 시스템에서 메시징 시스템 확장을 통해 대량 트랙픽 처리 가능)
- 다양한 메시징 패턴 지원(Direct, Fanout, Topic, Headers등의 타입을 지원)
- 멀티 프로토콜 지원(AMQP, MQTT, STOMP)
- 메시지 순서 보장 및 안정성 제공
- 안정성(장애 시에도 메시지 유실 없이 관리 가능)
[단점]
- 대용량 메시지 처리시 성능 한계(대량 처리 시스템에서는 Kafka 사용 고려)
- 큐의 메모리 사용 이슈(메시지가 너무 많이 쌓일 경우 메모리 부족 문제 발생, 관리가 필요)
- 메시지 지연 문제(대량의 메시지가 쌓일 경우 메시지 처리 속도가 느려질 수 있음)
- 네트워크 안정성 의존(네트워크 불안정 시 메시지 손실이나 중복 발생이 가능)
RabbitMq의 주요 역할
- 시스템 간의 메시지 전달을 관리하고, 메세지를 큐(queue)에 저장한 뒤 소비자(Consumer)에게 전달합니다.
- 메시지 순서와 안정성을 보장하여 데이터 유실없이 통신을 가능하게 합니다.
- 생산자(Producer)와 소비자(Consumer)가 직접 연결되지 않고 RabbitMq를 통해 간접적으로 통신하는 방식으로 시스템간의 결합도를 낮춥니다.
RabbitMq 적용 사례
- 주문 생성이 발생했을 때 결제 시스템, 배송 시스템 등을 비동기적으로 처리 할 수 있다.
- 이미지, 이메일 전송과 같은 오래 걸리는 작업을 처리 할 수 있다.
- WebSocket/STOMP 등의 웹 기반 소켓 프로토콜 역시 지원하기에 1:1채팅, 단체 채팅 작업을 구현 할 수 있다.
이번글에서는 RabbitMq의 기본 개념에 대해 알아보았는데, 다음에는 RabbitMq 설치 및 적용까지 해보겠습니다.
'Spring' 카테고리의 다른 글
[Spring] 필터(Filter)와 인터셉터(Interceptor) 정리 및 차이점 (0) | 2024.09.21 |
---|---|
[Spring] @RestControllerAdvice를 사용해서 예외처리 해보기 (0) | 2024.09.16 |
[Spring] JPA 연관관계 매핑 (0) | 2024.07.08 |
[Spring] JPA 엔티티 매핑 (0) | 2024.07.04 |
[Spring] JPA 영속성 관리 (0) | 2024.06.29 |