Today I Learned
🔥 RabbitMQ의 이론을 한 페이지에 정리해 놓자!!
[ RabbitMQ]
- RabbitMQ는 메시지 브로커입니다.
- 메시지 브로커는 데이터(메시지)를 송신자(프로듀서)로부터 수신자(컨슈머)에게 전달하는 중간 매개체 역할을 합니다.
- RabbitMQ는 이러한 메시지를 큐(Queue)에 저장하고, 필요할 때 적절한 수신자에게 전달합니다.
[ RabbitMQ의 역할 ]
- 비동기 처리: 데이터를 비동기적으로 처리하여 시스템의 응답성을 높입니다.
- 부하 분산: 여러 소비자에게 메시지를 분산시켜 시스템의 부하를 균형 있게 분산합니다.
- 내결함성: 메시지를 안전하게 저장하여 시스템 장애 시 데이터 손실을 방지합니다.
[ RabbitMQ 장단점 ]
- 장점
- 메시지 지속성: RabbitMQ는 메시지를 디스크에 저장하여 시스템 장애 발생 시에도 메시지가 손실되지 않도록 합니다.
- 클러스터링: RabbitMQ는 클러스터링을 통해 여러 노드로 구성된 환경에서 높은 가용성과 부하 분산을 제공합니다.
- 분산 아키텍처: 페더레이션(Federation) 등을 사용하여 여러 RabbitMQ 인스턴스 간에 메시지를 전달함으로써 분산된 메시징 시스템을 구축할 수 있습니다.
- 관리 인터페이스: 웹 기반 관리 인터페이스를 통해 큐, 익스체인지, 바인딩 등을 쉽게 관리할 수 있습니다.
- 단점
- 메시지 브로커 오버헤드: RabbitMQ는 모든 메시지를 중앙 브로커를 통해 전달하기 때문에, 높은 트래픽 상황에서는 브로커의 오버헤드가 발생할 수 있습니다.
- 대규모 메시지 처리: 매우 대규모의 메시지를 처리할 때 성능 저하가 발생할 수 있으며, 이러한 경우에는 적절한 클러스터링 및 최적화가 필요합니다.
- 리소스 소비: RabbitMQ는 메모리와 CPU 자원을 많이 소비할 수 있어, 충분한 리소스를 제공해야 원활하게 운영될 수 있습니다. (비용 문제)
- 메시지 크기 제한: RabbitMQ는 매우 큰 메시지 처리에 제한이 있을 수 있으며, 대용량 파일 전송에는 적합하지 않을 수 있습니다.
[ RabbitMQ의 기본 구성 요소 ]
- 메시지(Message)
- 메시지는 RabbitMQ를 통해 전달되는 데이터 단위입니다. 예를 들어, 사용자 등록 정보나 주문 내역이 메시지가 될 수 있습니다.
- 프로듀서(Producer)
- 메시지를 생성하고 RabbitMQ에 보내는 역할을 합니다. 예를 들어, 웹 애플리케이션이 사용자 등록 정보를 RabbitMQ에 보내는 경우 프로듀서가 됩니다.
- 큐(Queue)
- 메시지를 저장하는 장소입니다. 메시지는 큐에 저장되었다가 소비자에게 전달됩니다. 큐는 FIFO(First In, First Out) 방식으로 메시지를 처리합니다.
- 컨슈머(Consumer)
- 큐에서 메시지를 가져와 처리하는 역할을 합니다. 예를 들어, 이메일 발송 서비스가 큐에서 사용자 등록 정보를 가져와 환영 이메일을 보내는 경우 컨슈머가 됩니다.
- 익스체인지(Exchange)
- 메시지를 적절한 큐로 라우팅하는 역할을 합니다. 프로듀서는 메시지를 직접 큐에 보내지 않고, 익스체인지에 보내며, 익스체인지는 메시지를 적절한 큐로 전달합니다.
- 바인딩(Binding)
- 익스체인지와 큐를 연결하는 설정입니다. 바인딩(라우팅 키)을 통해 메시지가 어느 큐로 전달될지 정의합니다.
- Tip) Queue의 이름과 Binding의 이름을 일치시켜 헷갈리지 않게 해주자!!
[ RabbitMQ와 AMQP ]
- RabbitMQ는 AMQP(Advanced Message Queuing Protocol)를 사용합니다.
- AMQP는 메시지 브로커를 위한 프로토콜 입니다.
- 메시지의 생성, 전송, 큐잉, 라우팅 등을 표준화하여 메시지 브로커가 상호 운용될 수 있게 합니다.
- 프로토콜: 컴퓨터 네트워크에서 데이터를 주고받기 위한 일련의 규칙과 절차를 말합니다. ex) 컴퓨터나 장치들이 서로 통신할 때 어떻게 소통해야 하는지를 정해 놓은 약속을 말합니다.
[ 익스체인지 유형 ]
메시지 브로커가 메시지를 교환기에서 큐로 라우팅하는 방식입니다.
대부분 Direct Exchange 를 사용한다고 한다. 그러나 나머지도 개념적으로 공부해 두자!!
- Direct Exchange
- 라우팅 키가 정확히 일치하는 큐로 메시지를 전달합니다.
- ex) 라우팅 키가 error인 메시지는 error라는 바인딩 키를 가진 큐로 전달됩니다.
- Topic Exchange
- 라우팅 키의 패턴을 사용하여 메시지를 라우팅합니다. 패턴에는 와일드카드 * (단어 하나)와 # (0개 이상의 단어)가 사용됩니다.
- ex) 라우팅 키가 quick.orange.rabbit인 메시지는 바인딩 키가 *.orange.*인 큐로 전달됩니다.
- Fanout Exchange
- 라우팅 키를 무시하고 교환기에 바인딩된 모든 큐로 메시지를 브로드캐스트합니다.
- 모든 바인딩된 큐로 메시지가 전달됩니다.
- Headers Exchange
- 라우팅 키 대신 메시지의 헤더를 기반으로 메시지를 라우팅합니다.
- 헤더 값과 바인딩된 헤더 값이 일치하는 큐로 메시지를 전달합니다.
이렇게 RabbitMQ에 대한 이론을 알아 보았다. 다음에는 프로젝트를 만들어서 실습을 진행해보도록 하자!!
읽어주셔서 감사합니다 😊
- RabbitMQ 실습하기
'해피 코딩 > Today I Learned' 카테고리의 다른 글
[TIL 13] prometheus 설정 에러 / 대체 나한테 왜그래ㅠ.. (1) | 2024.08.19 |
---|---|
[TIL 14] RabbitMQ 추가 실습 + JMeter (0) | 2024.08.18 |
[TIL 11] Chater 1. 과제와 피드백 내용 (0) | 2024.08.15 |
[TIL 10] 대규모 스트림 처리 (0) | 2024.08.13 |
[TIL 9] 캐싱 개념과 캐싱 전략 이해하기 (0) | 2024.08.12 |