티스토리 뷰
메세지 시스템에 대한 자세한 내용은 Message Service | 개발/설계관련 | develop (gitbook.io)에 연재 하고 있습니다, 이곳에 들어가면 메세지 시스템. Spring JMS, Kafka, RabbitaMQ에 대한 정보를 추가 하고 있습니다.
Message Service
메시지 서비스 (Message Service)는 애플리케이션 간 메시지를 교환하기 위한 통신 메커니즘입니다. 이는 분산 시스템에서 데이터를 비동기적으로 전달하고 처리하는 데 사용되며 메시지 서비스는 다음과 같은 몇 가지 주요 특징으로 가지고 있습니다.

-
비동기 통신: 애플리케이션 간의 느슨한 결합으로 송신자와 수신자 간의 직접적인 연결없이 메세지를 교환할 수 있습니다.
-
신뢰성: 안정적인 데이터 통신을 구현할 수 있도록 메세지 전달을 보장하며 메세지가 손실되지 않도록 합니다.
-
메세지 큐: 메세지의 순서 보장하거나 작업을 지연시킬 수 있도록 메세지 큐를 제공하여 메세지를 저장하고 처리 할 수 있습니다.
-
토픽 기반 메시징(토픽/구독): 다중 수신자에게 메세지를 전달하기 위해 토픽을 사용하여 메시지를 발행하고 구독할 수 있습니다
JMS를 사용하면 엔터프라이즈 애플리케이션에서 효율적인 메시징 시스템을 구축할 수 있습니다.
JMS(Java Message Service) API는 Java EE 및 Java SE 환경 모두에서 Java 프로그램에서 엔터프라이즈 메시징 시스템에 액세스하기 위한 Java API로 Java 프로그램이 엔터프라이즈 메시징 시스템의 메시지를 작성, 전송, 수신 및 읽을 수 있는 일반적인 방법을 제공하고 있으며 JSR 914로 개발된 명세서에 의해 정의됩니다
-
JMS 프로바이더: RabbitMQ, ActiveMQ 등
Spring JMS는Java Message Service (JMS)를 사용하는 애플리케이션에서 메시징을 간편하게 구현할 수 있도록 지원하는 Spring 프레임워크의 통합 기능으로 JmsTemplate을 활용하여 메시지를 발행하고 구독하는 방법을 간단하게 구현할 수 있도록 지원합니다.
-
동기 : JmsTemplate을 사용하여 메세지 발행을 큐와 토픽을 통해 쉽게 보내고 수신(소비)자에서 메세지를 받을 수 있습니다.
-
비동기: MessageListenerContainer를 사용하여 비동기 방식으로 큐나 토픽의 메세지에 반응하는 간단한 자바 객체인 메세지 구동(Message-Drive) POJO(MDP) 를 사용하여 메세지를 받는데 사용합니다.
JMS는 표준화된 비동기식 메시징을 위한 API이고, Spring JMS는 스프링에서 JMS를 지원하는 컴포넌트

RabbitMQ는 AMQP (Advanced Message Queuing Protocol)를 구현한 오픈소스 메시지 브로커로 산자(Producer)가 메시지를 보내고 소비자(Consumer)에게 전달해주는 역할을 하며 다음과 같은 상활에 사용됩니다.
-
요청을 많은 사용자에게 전달할 때: RabbitMQ는 많은 사용자에게 동시에 메시지를 전달하는데 효과적입니다.
-
요청에 대한 처리 시간이 길 때: 메시지 브로커를 통해 요청을 처리하는 동안 다른 작업을 수행할 수 있습니다.
-
많은 작업이 요청되어 처리를 해야할 때: RabbitMQ는 요청을 다른 API에게 위임하고 빠른 응답을 할 때 유용합니다.
-
시스템 간 통신: RabbitMQ는 시스템 간 메시지를 전달해주는데 사용됩니다.
실시간으로 기록 스트림을 게시, 구독, 저장 및 처리할 수 있는 분산형 데이터 스트리밍 플랫폼으로 여러 소스에서 데이터 스트림을 처리하고 여러 사용자에게 전달하도록 설계되었으며 다음과 같은 상활에 사용됩니다.
-
실시간 스트리밍 데이터 파이프라인: 데이터를 안정적으로 처리하고 한 시스템에서 다른 시스템으로 이동합니다.
-
실시간 스트리밍 애플리케이션: 데이터 스트림을 소비하는 애플리케이션입니다.
-
IoT, 전자상거래, IT 운영 등 다양한 활용 분야에서 활용됩니다
두 시스템은 서로 다른 사용 사례를 위해 설계되었으며, 메시징 처리 방식도 다릅니다. Kafka는 대규모 이벤트 스트리밍에 적합하고, RabbitMQ는 빠른 메시지 발행 및 삭제를 위해 사용됩니다
Kafka와 RabbitMQ는 모두 메시지 대기열 시스템이지만, 각각 다른 강점과 약점을 가지고 있습니다.
-
유연성과 사용 편의성을 제공하며 다양한 메시징 패턴에 적합합니다.
-
고급 라우팅 기능을 지원하여 복잡한 메시지 라우팅을 처리할 수 있습니다.
-
메시지를 빠르게 발행하고 삭제하는 전통적인 메시징 시스템입니다
-
분산 로그로 설계되어 있어 높은 메시지 처리량, 내결함성 및 확장성을 제공합니다.
-
이벤트 스트리밍에 특화되어 있으며 대용량 데이터의 실시간 처리를 지원합니다.
-
복잡성이 있을 수 있으며, 복잡한 메시지 라우팅을 지원하지 않습니다.
'프로그램이야기' 카테고리의 다른 글
대용량 메시지 처리 - KAFKA (0) | 2024.06.09 |
---|---|
메시지 브로커 - RabbitMQ (0) | 2024.06.05 |
프로그램이야기 여덟번째 - 복사 (0) | 2023.02.19 |
프로그램이야기 일곱째 - 캡슐화 (0) | 2023.02.18 |
프로그램이야기 여섯번째 - 함수 (0) | 2023.01.22 |