티스토리 뷰

프로그램이야기

메세지 서비스

따강아지 2024. 5. 29. 00:25

메세지 시스템에 대한 자세한 내용은 Message Service | 개발/설계관련 | develop (gitbook.io)에 연재 하고 있습니다, 이곳에 들어가면 메세지 시스템. Spring JMS, Kafka, RabbitaMQ에 대한 정보를 추가 하고 있습니다. 

Message Service

메시지 서비스 (Message Service)는 애플리케이션 간 메시지를 교환하기 위한 통신 메커니즘입니다. 이는 분산 시스템에서 데이터를 비동기적으로 전달하고 처리하는 데 사용되며 메시지 서비스는 다음과 같은 몇 가지 주요 특징으로 가지고 있습니다.

 

Message Service
  • 비동기 통신: 애플리케이션 간의 느슨한 결합으로 송신자와 수신자 간의 직접적인 연결없이 메세지를 교환할 수 있습니다.

  • 신뢰성: 안정적인 데이터 통신을 구현할 수 있도록 메세지 전달을 보장하며 메세지가 손실되지 않도록 합니다.

  • 메세지 큐: 메세지의 순서 보장하거나 작업을 지연시킬 수 있도록 메세지 큐를 제공하여 메세지를 저장하고 처리 할 수 있습니다.

  • 토픽 기반 메시징(토픽/구독): 다중 수신자에게 메세지를 전달하기 위해 토픽을 사용하여 메시지를 발행하고 구독할 수 있습니다

JMS를 사용하면 엔터프라이즈 애플리케이션에서 효율적인 메시징 시스템을 구축할 수 있습니다.

 
1. JMS(Java Message Service)

JMS(Java Message Service) API는 Java EE 및 Java SE 환경 모두에서 Java 프로그램에서 엔터프라이즈 메시징 시스템에 액세스하기 위한 Java API로 Java 프로그램이 엔터프라이즈 메시징 시스템의 메시지를 작성, 전송, 수신 및 읽을 수 있는 일반적인 방법을 제공하고 있으며 JSR 914로 개발된 명세서에 의해 정의됩니다

  • JMS 프로바이더: RabbitMQ, ActiveMQ 등

 
2. Spring JMS

Spring JMS는Java Message Service (JMS)를 사용하는 애플리케이션에서 메시징을 간편하게 구현할 수 있도록 지원하는 Spring 프레임워크의 통합 기능으로 JmsTemplate을 활용하여 메시지를 발행하고 구독하는 방법을 간단하게 구현할 수 있도록 지원합니다.

  • 동기 : JmsTemplate을 사용하여 메세지 발행을 큐와 토픽을 통해 쉽게 보내고 수신(소비)자에서 메세지를 받을 수 있습니다.

  • 비동기: MessageListenerContainer를 사용하여 비동기 방식으로 큐나 토픽의 메세지에 반응하는 간단한 자바 객체인 메세지 구동(Message-Drive) POJO(MDP) 를 사용하여 메세지를 받는데 사용합니다.

JMS는 표준화된 비동기식 메시징을 위한 API이고, Spring JMS는 스프링에서 JMS를 지원하는 컴포넌트

JMS와 Spring JMS 차이점
 
3. JMS 프로바이더
 
3-1. RabbitMQ

RabbitMQ는 AMQP (Advanced Message Queuing Protocol)를 구현한 오픈소스 메시지 브로커로 산자(Producer)가 메시지를 보내고 소비자(Consumer)에게 전달해주는 역할을 하며 다음과 같은 상활에 사용됩니다.

  • 요청을 많은 사용자에게 전달할 때: RabbitMQ는 많은 사용자에게 동시에 메시지를 전달하는데 효과적입니다.

  • 요청에 대한 처리 시간이 길 때: 메시지 브로커를 통해 요청을 처리하는 동안 다른 작업을 수행할 수 있습니다.

  • 많은 작업이 요청되어 처리를 해야할 때: RabbitMQ는 요청을 다른 API에게 위임하고 빠른 응답을 할 때 유용합니다.

  • 시스템 간 통신: RabbitMQ는 시스템 간 메시지를 전달해주는데 사용됩니다.

 
3-2. Kafka

실시간으로 기록 스트림을 게시, 구독, 저장 및 처리할 수 있는 분산형 데이터 스트리밍 플랫폼으로 여러 소스에서 데이터 스트림을 처리하고 여러 사용자에게 전달하도록 설계되었으며 다음과 같은 상활에 사용됩니다.

  • 실시간 스트리밍 데이터 파이프라인: 데이터를 안정적으로 처리하고 한 시스템에서 다른 시스템으로 이동합니다.

  • 실시간 스트리밍 애플리케이션: 데이터 스트림을 소비하는 애플리케이션입니다.

  • IoT, 전자상거래, IT 운영 등 다양한 활용 분야에서 활용됩니다

 
4. RabbitMQ와 Kafka 차이점

두 시스템은 서로 다른 사용 사례를 위해 설계되었으며, 메시징 처리 방식도 다릅니다. Kafka는 대규모 이벤트 스트리밍에 적합하고, RabbitMQ는 빠른 메시지 발행 및 삭제를 위해 사용됩니다

KafkaRabbitMQ는 모두 메시지 대기열 시스템이지만, 각각 다른 강점과 약점을 가지고 있습니다.

 
1. RabbitMQ
  • 유연성사용 편의성을 제공하며 다양한 메시징 패턴에 적합합니다.

  • 고급 라우팅 기능을 지원하여 복잡한 메시지 라우팅을 처리할 수 있습니다.

  • 메시지를 빠르게 발행하고 삭제하는 전통적인 메시징 시스템입니다

 
2. Kafka
  • 분산 로그로 설계되어 있어 높은 메시지 처리량, 내결함성 및 확장성을 제공합니다.

  • 이벤트 스트리밍에 특화되어 있으며 대용량 데이터의 실시간 처리를 지원합니다.

  • 복잡성이 있을 수 있으며, 복잡한 메시지 라우팅을 지원하지 않습니다.