작성계기는 하단의 게시글에서 말했듯이 프로젝트에 현재 사용하고 있고 원리를 파악하고 실제로 적용해보고자 작성하게 되었습니다.
이전 게시글에서는 RabbitMQ의 상위 개념인 AMQP에 대해 학습을 해보았으니 이제는 본격적으로 RabbitMQ에 대해 이론적으로 알아보고 다음 게시글에서는 실제로 RabbitMQ를 설치하고 운영해보도록 하겠습니다.
RabbitMQ는 간단히 이야기하면 AMQP의 구현 체중 하나로 AMQP 프로토콜 기반의 경량화된 메시지 브로커 시스템입니다. 주로 요청을 많은 사용자에게 전달하는 경우, 많은 작업이 요청되어 처리해야 할 경우, 요청에 대한 처리시간이 긴 경우에 주로 사용됩니다. 이러한 특징으로 마이크로 서비스, 분산 시스템, 서버리스 아키텍처 등 다양한 현대적인 애플리케이션에서 널리 사용되고 있습니다.
메시지 브로커
서로 다른 언어로 작성되었거나 다른 플랫폼에서 구현된 애플리케이션, 시스템, 서비스 간의 통신과 정보 교환을 가능하게 하는 소프트웨어를 부르는 말 입니다.
그렇다면 다른 AMQP의 다른 구현체도 있다는 이야기인데 AMQP의 구현체는 다음과 같습니다.
이거 외에 StormMQ, OpenAMQ등 다른 AMQP구현체들이 많습니다, 이중에서 가장 많이쓰고 익숙한거는 RabbitMQ라고 생각합니다.
RabbitMQ의 장점에 대해서는 타 게시글을 인용했지만 제가 생각하는 장점만 적어보겠습니다.
1. 다양한 통합 옵션 지원 : 다양한 프로그래밍 언어와 프레임워크를 지원하며, REST API, WEB Socket등을 통한 다양한 통합이 가능합니다. (실제로 제가 다니는 회사에서는 RabbitMQ를 WEB Socket와 통합하여 사용합니다.)
2. 다중 프로토콜 지원 : 공부하면서 알게되었는데 RabbitMQ는 기본적으로 AMQP 프로토콜이지만 MQTT, STOMP와 같은 다양한 메시징 프로토콜을 지원합니다.
3. 높은 메시징 처리량 : 메모리와 디스크에 메세지 저장이 가능하여 높은 메시지 처리량과 함께 높은 가용성을 제공합니다. 이로 인해 RabbitMQ가 대규모 분산 시스템에서도 안정적으로 사용 될 수 있습니다.
4. 트랜잭션 지원 : 메시지 발생, 메시지 확인, 삭제 등의 작업을 하나의 트랜잭션으로 묶어서 처리가 가능하여 데이터의 일관성과 신뢰성을 높이는 데 도움이 됩니다.
모든 기술이 그렇듯 장점만 있는 것이 아니라 반드시 단점도 존재합니다.
러닝커브 상승 : 아무래도 저는 학습 러닝 커브가 상승하는 것을 뽑을 거 같습니다. RabbitMQ는 다양하고 강력한 기능들이 있는 만큼 이해하고 사용하기까지 많은 시간과 노력이 필요합니다, 또한 메시지의 신뢰성을 보장하기 위한 다양한 설정(메시지 지속성, 메시지 확인 등)을 올바르게 구성하기 위해서도 공부가 필요하다고 느꼈습니다.
RabbitMQ를 들어가기 전에 AMQP를 먼저 공부를 하고 RabbitMQ를 보면 어느 정도 이해할 수 있을 줄 알았는데 솔직히 이야기하면 아직도 이해 못 하는 용어투성이입니다. 하지만 지금까지 이러한 경우들은 수없이 있었습니다. 대학생 때 처음으로 Spring Boot을 배울 때에도 첫 직장에서 처음으로 복잡한 쿼리를 작성할 때도 그리고 지금 회사에 들어오기 위해 AWS를 공부할 때도 어려운 것, 이해가 힘든 것투성이였습니다. 그렇기에 이 RabbitMQ도 똑같이 어려워하고 지속적으로 공부하여 저의 것으로 만들기 위해 노력하다 보면 어느 순간 익숙해질 것으로 생각합니다.
https://www.ibm.com/kr-ko/think/topics/message-brokers
https://velog.io/@sdb016/RabbitMQ-%EA%B8%B0%EC%B4%88-%EA%B0%9C%EB%85%90
(항상 감사합니다.)