Weekly I Learned (5월 1주차)

YEON·2023년 5월 13일
0

Weekly I Learned (2023)

목록 보기
3/3
post-custom-banner
학습 상태에 따라 업데이트는 수시로 변경될 수 있습니다.

1. 메시지 지향 미들웨어 (MOM)

메시지 지향 미들웨어 (Message Oriented Middleware) 란,

  • 메시지 : 구조화된 데이터로 이루어진 통신의 단위
  • 메시지 지향 : 시스템 간 통신이 주로 메시지(데이터)를 기반으로 이루어지는 아키텍처를 의미
  • 미들웨어 : 애플리케이션들을 연결해 서로 데이터를 교환할 수 있게 해주는 소프트웨어

즉, 어플리케이션들의 메시지를 중간에서 관리해주는 (기능을 지원하는) 시스템이다.

메세지를 통해 여러 분산되어 있는 시스템간의 Connector 역할로 결합성을 낮추고, 이들이 서로 실시간 비동기식 데이터를 교환할 수 있도록 하는 소프트웨어이다.
MOM은 다양한 메시지 지향 아키텍처를 지원하며, (ex. 메시지 큐, 토픽, 발행-구독) 여러 시스템 간에 안정적이고 확장 가능한 통신을 가능하게 한다.

특징

  • 비동기 방식으로 메세지를 전달한다.
  • Queue, Broadcast, Multicast 등의 방식으로 메세지를 전달한다.
  • 메세지를 발행하는 Publisher (Producer), 소비하는 Subscribe (Consumer)로 구성되어 있다.

장점

  • 클라이언트 시스템 간의 종속성 및 결속 성을 낮춰준다.
  • 송수신 측이 동시에 네트워크에 연결되지 않아도 되므로 메시지의 지속성, 안정성을 높여준다

단점

  • 메시지 전체를 관리하는 시스템이 필요하므로,
  • 전체적인 시스템 구조가 복잡해질 수 있고
  • 비용 등이 증가할 수 있다.




2. 메시지 브로커

메시지 브로커 (Message Broker) 란?
Publisher(송신자)로부터 전달받은 Message(메세지)를 동일한 Topic의 Subscriber(수신자)로 전달해주는 중간 역할이다.

이때 메세지가 적재되는 공간을 Message Queue(메시지큐), 메시지의 그룹을 Topic(토픽) 이라고 한다.

어플리케이션으로부터 메시지를 받아 전달해주는 중간 매개체로서 메시지를 받아 해당 역할을 수행하는데 초점이 있다.




3. 메시지 큐 (MQ)

메시지 큐(Message Queue) 는,
프로세스나 프로그램 간에 데이터를 교환하기 위한 통신 방법 중 하나이다.
주로 메시지 지향 미들웨어를 기반으로 구현되며, 메시지를 안전하게 보관하고 전달하는 역할을 한다.

이 시스템에서 메시지는 메시지 저장소 역할인 큐(Queue)에 FIFO 형태로 저장 및 전달된다.

  • 전달하고자 하는 컴포넌트(Producer)가 메시지를 큐에 저장하면
  • 전달받고자 하는 컴포넌트(Consumer)가 해당 큐에서 메시지를 꺼내어 처리한다.

역할 / 목적

  • 분산 시스템에서 데이터나 이벤트 등을 비동기적으로 전달하는 중간 매개체 역할로서,
  • 다양한 컴포넌트 간의 비동기 통신을 통해 시스템 간 결합도를 낮추고, 확장성과 유연성을 높인다.

특징

  • Producer와 Consumer는 시간에 따라 독립적으로 실행되며, 메시지 큐를 통해 중간 매개체로 데이터를 교환한다.
  • FIFO 구조에 맞게 각 메시지가 하나의 Consumer에 의해 한 번만 처리 될 수 있으며 일대일 통신의 특성을 갖는다.
  • 메시지 큐는 비동기적 특성으로, Response가 없기 때문에 Consumer가 어느 시점에 가져가서 처리하는지 보장하지 않는다. (Producer가 알 수 없다)

필요한 경우

일반적으로는 우리는 간단한 서버(클라이언트-서버) 구조에서 사용자가 요청을 하면 서버는 그에 대한 처리를 한 후 클라이언트에게 응답을 하는 직접적인 통신 방식으로 처리하였다.

이렇게 작은 규모의 응용 프로그램에서는 간단한 HTTP 통신이나 RESTful API 등을 사용하여 통신하는 것으로 충분할 수 있다. 메시지 큐의 경우 비동기적인 특성을 가지고 있어 응답 시간이 상대적으로 길어질 수 있고, 시스템 구조가 더 복잡해지며 추가적인 오버헤드가 발생할 수 있기 때문이다.

반대로 분산된 시스템의 경우, 메시지 큐의 비동기 통신 지원으로 송신자(Producer)와 수신자(Consumer)가 독립적으로 작동할 수 있다는 점에서 보다 적합할 수 있다.

또한 수평 및 수직 확장이 용이하다는 점에서 대규모 데이터를 처리해야하는 시스템에 보다 적합하다.

종류

위와 같은 메시지 큐는 다음과 같은 종류들과 특징을 지니고 있다.
모두 MOM의 개념과 프로토콜을 활용한 다양한 구현체이다.
(단, 기능이나 내부적으로 동작하는 방식 등은 차이점이 존재한다.)

  • Apache Kafka
    : 대규모 데이터 스트림 처리에 특화된 분산 메시지 시스템
  • RabbitMQ
    : 오픈 소스 메시지 브로커로, AMQP 프로토콜을 사용하여 안정성과 확장성이 뛰어남.
  • Redis (Pub/Sub 및 Streams)
    : 메모리 기반 데이터베이스로, Pub/Sub 및 Streams 기능을 통해 메시지 큐 역할 수행 가능
  • Amazon SQS
    AWS에서 제공하는 완전 관리형 메시지 큐 서비스로, 안정성과 확장성이 뛰어남

때문에, 메시지 큐를 적용하려면 다양한 메시지 큐 중에서 서비스, 시스템 목적에 맞는 것을 선정해야한다. (실무라면 실제 데이터 유입량과 실시간성, 영속성 등을 따져보고 결정해야한다.)

메시지 (Message)

여기서 메시지란? 정보 또는 데이터의 작은 단위로서 다양한 형태의 정보를 포함할 수 있는 구조체이다. (ex. JSON, XML ..) 일반적으로는 페이로드(payload)로 실제 데이터를 포함하며, 메타데이터(헤더)도 추가로 가질 수 있다.




정리

  • 메시지 지향 미들웨어는 분산 시스템 간의 메시지 기반 통신을 지원하는 미들웨어
  • 메시지 브로커는 메시지 지향 미들웨어를 구현하고 관리하는 소프트웨어나 서비스
  • 메시지 큐는 해당 메시지들을 저장하고 관리하는 시스템

나의 요약

실시간 비동기 데이터 교환으로 분산 시스템 간 결합도를 낮추되 확장성과 유연성을 키우고 싶다면 메시지 큐를 고려하자. 단, 시스템 복잡도가 높아질 수 있고, 비동기 교환이므로 서비스의 특징(데이터 유입량, 실시간 성)등을 잘 고려하여 메시지 큐를 선택하자.







[참고]
https://tecoble.techcourse.co.kr/post/2021-09-19-message-queue/
https://velog.io/@spamdong/%EB%A9%94%EC%84%B8%EC%A7%80-%EC%A7%80%ED%96%A5-%EB%AF%B8%EB%93%A4%EC%9B%A8%EC%96%B4MOM
https://dev-jwblog.tistory.com/140

profile
- 👩🏻‍💻
post-custom-banner

0개의 댓글