메시지 큐(Message Queue)에 대하여

Lys·2023년 9월 8일

개발상식

목록 보기
9/15

메시지 지향 미들웨어란?(MOM)

  • 비동기 메세지를 사용하는 프로그램 간 데이터 송수신
    MOM 기반의 시스템은 위의 그림과 같이 클라이언트, 메시지, 메시지 브로커(broker)로 구성된다.
  • 클라이언트는 메시지의 송신 혹은 수신 중 하나의 행동만 수행할 수 있다.
  • 메시지의 송·수신은 API를 이용하여 이루어진다.
  • 브로커는 송신측 클라이언트로부터 받은 메시지를 목적지(destination)에 저장하여 수신 측 클라이언트의 요청이 발생할 때까지 보관한다.

    메시지 지향 미들웨어의 장, 단점

    장점

    • 보관 : 메시지의 백업을 유지함으로써 지속성을 제공, 덕분에 송수신 측은 동시에 네트워크 연결을 유지할 필요 없음
    • 라우팅 : 미들웨어 계층 자신이 직접 메시지 라우팅이 가능하기 때문에, 하나의 메시지를 여러 수신자에게 배포가 가능해짐(멀티캐스트)
    • 변환 : 송수신 측의 요구에 따라 메시지를 변환할 수 있음

    단점

    • 아키텍처에 외부 구성 요소인 메시지 전송 에이전트가 필요, 새로운 요소를 추가할 경우 시스템 성능이 저하되고, 신뢰성이 떨어짐
    • 시스템이 복잡해지기 때문에 관리가 어렵고 비용이 발생
    • 애플리케이션 간의 통신은 본질적으로 동기지만, 메시지 기반 통신은 본질적으로 비동기이기 때문에 메커니즘 불일치가 발생
    • 표준이라고 부를 규격이 존재하지 않기 때문에 호환이 안될 수도 있음

메시지 큐

  • Message Queue 혹은 MQ라고 부른다.
  • 프로세스 또는 프로그램 간에 데이터를 교환할 때 사용하는 통신 방법 중에 하나로,
    메시지 지향 미들웨어(Message Oriented Middleware:MOM)를 구현한 시스템을 의미한다.
  • 비동기 메시지를 사용하는 서비스들 사이에서 데이터를 교환해주는 역할을 한다.
  • PRODUCER가 메시지를 큐에 전송하면 CONSUMER가 처리하는 방식으로, PRODUCER와 CONSUMER 사이에 메시지 프로세스가 추가되는 것이 특징이다.

메시지 큐의 장점

  • 비동기: 데이터를 수신자에게 바로 보내지 않고 큐에 넣고 관리하기 때문에 나중에 처리 가능
  • 낮은 결합도 : PRODUCER와 CONSUMER가 독립적으로 행동하게 됨으로써 서비스 간 결합도가 낮아짐
  • 탄력성 : 일부가 실패하더라도 전체에 영향을 주지 않음
  • 과잉 : 실패할 경우 재실행 가능
  • 보장성 : 큐에 저장된 모든 메시지가 CONSUMER에게 전달되는 것을 보장
  • 확장성 : PRODUCER 또는 CONSUMER를 원하는 대로 확장 가능

사용 예시

  • 다른 곳의 API로부터 데이터 송수신 가능
  • 다양한 애플리케이션에서 비동기 통신 가능
  • 이메일 발송 및 문서 업로드 가능
  • 이미지, 비디오 등 대용량 데이터 처리등 메모리를 많이 쓰는 작업

종류

대표적 종류로 RabbitMQ, ActiveMQ(JMS), Kafka가 있다.
RabbitMQ, ActiveMQ(JMS)는 신뢰성 있는 메시지 브로커가 필요한 경우 사용하고,
Kafka는 처리량이 많은 분산 메시징 시스템에 사용된다.

  • ActiveMQ(JMS)

    • MOM을 자바에서 지원하는 표준 API
    • ActiveMQ의 JMS 라이브러리를 사용한 자바 애플리케이션끼리 통신이 가능하지만, ActiveMQ가 아닌 애플리케이션과는 통신할 수 없다.
    • REST API를 통해 웹 기반 메시징 API를 지원하며 Ajax를 통해 순수한 DHTML을 사용한 웹 스트리밍 지원을 한다.
  • RabbitMQ

    • AMQP(Advanced Message Queuing Protocol)를 구현한 오픈소스 메시지 브로커다.
    • 프로토콜만 맞다면 다른 AMQP를 사용한 애플리케이션끼리 통신이 가능하다.
    • 실시간 모니터링이 용이하고 다양한 언어 및 OS 지원, RabbitMQ 서버 간 클러스터링이 가능하다.
  • Kafka

    • LinkedIn에서 구직정보들을 처리할 수 있는 플랫폼으로 개발이 시작되었다.
    • 높은 처리량을 요구하는 실시간 데이터 피드 처리나 대기 시간이 짧은 플랫폼을 제공하는 것을 목표로 하며 TCP 기반 프로토콜을 사용한다.
    • 많은 데이터 전송과 최대 처리량을 유지하기에 대량 데이터 스트리밍에 적합하다.
    • MQ는 broker가 producer에게 메시지를 받아서 consumer에게 push 해 주는 방식인데 반해, Kafka는 consumer가 broker로부터 직접 메시지를 가지고 가는 pull 방식으로 동작하기 때문에 consumer는 자신의 처리능력만큼의 메시지만 broker로부터 가져오기 때문에 최적의 성능을 낼 수 있다.


 🙇‍ 참고 사이트 🙇‍
https://gwamssoju.tistory.com/107
https://cerulean85.tistory.com/458
https://velog.io/@yujiniii/%EB%A9%94%EC%84%B8%EC%A7%80%ED%81%90

0개의 댓글