Message Broker 이해 하기

SEUNGJUN·2024년 3월 29일

Chat

목록 보기
3/4

메시지 브로커(Message Broker)

클라이언트 간 또는 서버 간에 메시지를 전달하는 데 사용되는 중간 서비스 또는 소프트웨어이다. 메시지 브로커는 메시지를 보내는 측과 메시지를 수신하는 측 간의 통신을 관리하고 조정하여 신회할 수 있는 메시지 교환을 보장한다.

메시지(Message)

메시지 브로커에서의 메시지는 일반적으로 데이터의 조각을 의미한다. 이것은 어떠한 시스템이나 애플리케이션에서 다른 시스템이나 애플리케이션으로 전송되는 정보의 단위이다.

< 메시지 브로커를 통한 온사인 쇼핑몰에서 상품을 구매하는 상황 >

1. 주문 메시지

  • 주문이 완료되면 온라인 쇼핑몰의 시스템은 주문 정보를 메시지로 만들어 메시지 브로커에 전송한다. 이 메시지에는 주문 번호 구매한 상품 정보, 배송 주소 등이 포함된다.

2. 메시지 브로커

  • 메시지 브로커는 받은 주문 메시지를 안전하게 저장하고 필요한 시스템으로 전달한다. 이 메시지는 주무 처리를 담당하는 시스템이나 배송 관련 시스템 등으로 전달될 수 있다.

3. 주문 처리 시스템

  • 주문 처리 시스템은 메시지 브로커로부터 받은 주문 메시지를 처리한다. 이 시스템은 주문을 확인하고 재고 관리, 결제 처리 등을 수행하여 주문을 완료한다.

4. 배송 관련 시스템

  • 동시에, 주문 메시지는 배송 관련 시스템에도 전달될 수 있다. 이 시스템은 주문 정보를 활용하여 상품을 포장하고 배송 준비를 진행한다.

그럼 메시지 브로커는 주문메시지를 받았을때 주문 처리 시스템에게 보내줘야 하다는걸 어떻게 알고 있는걸까?

구독(Subscription) 메커니즘

메시지 브로커는 메시지를 전달할 대상을 결정하기 위해 라우팅 및 구독(subscription) 메커니즘을 사용한다. 이를 통해서 어떤 메시지를 받았을 때 어디로 보내야 하는지를 알 수 있다.

1. 주제(Topic)

  • 메시지 브로커는 메시지의 주제를 확인하여 해당 메시지를 어떤 큐(queue)나 주제(topic)에 전달할지 결정한다. 예를 들어, 주문 메시지는 주문 주제에게 보내지고, 배송 메시지는 배송 주제에게 보내지는 식이다.

2. 구독(Subscriptions)

  • 메시지를 수신하는 시스템은 메시지 브로커에게 구독(subscription)을 등록한다. 이를 통해 메시지 브로커는 어떤 메시지를 어떤 시스템에게 전달해야 하는지를 알수 있다. 예를 들어, 주문 처리 시스템은 주문 주제에 대한 구독을 등록하여 주문 메시지를 받을 수 있다.

3. 메시지 큐(Queues)

  • 메시지 브로커는 메시지를 큐(queue)에 보낼수 있다. 큐는 FIFO(First-In-First-Out) 방식으로 메시지를 처리하며, 시스템은 큐에 등록된 메시지를 순차적으로 처리한다. 예를 들어, 주문 메시지를 받은 메시지 브로커는 주문 처리 시스템의 큐에 메시지를 추가하여 순차적으로 처리될 수 있도록 할 수 있다.

API와 메시지 통신의 차이

1. 통신방식

  • API (Application Programming Interface): API는 일반적으로 요청-응답 방식으로 동작한다. 클라이언트가 서버에 요청을 보내면 서버는 해당 요청을 처리하고 응답을 반환한다. 이는 주로 HTTP 또는 HTTPS 프로토콜을 통해 이루어진다.
  • 메시지 통신: 메시지 통신은 비동기적인 방식으로 동작할 수 있습니다. 클라이언트가 메시지를 보내면 해당 메시지는 메시지 브로커를 통해 수신자에게 전달된다. 수진자는 메시지를 받으면 즉시 처리할 수도 있고, 나중에 처리할 수도 있다.

2. 사용 사례

  • API: API는 주로 클라이언트와 서버 간에 데이터를 요청하고 응답하는 데 사용된다. 예를 들어, 웹 애플리케이션에서 서버로 데이터를 보내거나 서버에서 데이터를 가져오는 데 API를 사용할수 있다.
  • 메시지 통신: 메시지 통신은 주로 시스템 간에 이벤트를 전달하거나 데이터를 교환하는 데 사용된다. 예를 들어, 주문이나 이벤트 기록과 같은 이벤트를 다른 시스템에 알리거나 전달하는 데 메시지 통신을 사용할 수 있다.

3. 통신 방향

  • API: API는 일반적으로 요청-응답 방식으로 동작하기 때문에 클라이언트가 요청을 보내고 서버가 응답을 반환한다.
  • 메시지 통신: 메시지 통신은 양방향이 될 수 있다. 메시지는 보내느 쪽에서 수신하는 쪽으로 전달되지만, 수진자가 즉시 응답하지 않을수 있다.

4. 결합도

  • API: API는 보통 강력한 결합(coupling)을 가지고 있다. 클라이언트와 서버는 서로를 명시적으로 호출하고 의존하기 때문에 변경이 발생할 경우 서로에게 영향을 줄 수 있다.
  • 메시지 통신: 메시지 통신은 느슨한 결합(coupling)을 가지고 있다. 메시지를 보내는 시스템은 메시지를 받는 시스템에 대해 거의 알지 못해도 되기 때문에 시스템 간의 의존성이 줄어든다.

메시지 브로커의 장단점

장점

1. 비동기 통신

  • 메시지 브로커를 통한 통신은비동기적으로 이루어지므로, 시스템 간의 결합도가 낮아진다. 이는 시스템이 서로 독립적으로 작동할 수 있고, 확장성이 높아진다.
  • 온라인 쇼핑몰의 주문 시스템에서 주문이 발생하면 메시지 브로커를 통해 주문 정보를 주문 처리 시스템으로 전달한다. 주문 처리 시스템은 비동기적으로 처리하고, 동시에 사용자에게 응답을 반환할 수 있다.

2. 확장성

  • 메시지 브로커는 대량의 메시지를 처리할 수 있는 능력을 가지고 있어, 시스템이 확장되더라도 성능에 영향을 미치지 않는다.
  • 실시간으로 수많은 디바이스로부터 발생하는 센서 데이터를 수집하는 시스템에서 메시지 브로커를 사용하여 대량의 데이터를 안정적으로 처리할 수 있다.

3. 유연성

  • 메시지 브로커를 사용하면 다양한 프로토콜과 메시지 형식을 지원할 수 있어, 다양한 시스템 간의 통신을 지원할 수 있다.
  • 서로 다른 언어나 프레임워크를 사용하는 서비스 간의 통신에서 메시지 브로커를 사용하여 서로간의 호환성을 유지할 수 있다.

4. 메시지 큐

  • 메시지 브로커는 메시지를 큐에 저장하여, 메시지의 소비자가 준비될 때까지 메시지를 보관할 수 있다. 이를 통해 메시지의 유실을 방지하고, 시스템의 안정성을 높일수 있다.
  • 이메일 큐 시스템에서 메시지 브로커는 수신된 이메일을 큐에 저장하고, 수신자의 이메일 서버가 준비되면 이메일을 전달한다.

단점

1. 복잡성

  • 메시지 브로커를 구성하고 관리하는 것은 추가적인 복잡성을 야기할 수 있다. 특히 대규모 시스템에 서는 메시지 브로커의 관리가 복잡해질 수 있다.
  • 메시지 브로커의 클러스터링, 고가용성 설정 및 모니터링을 관리하는 것은 복잡한 작업일수 있다.

2. 오버헤드

  • 메시지 브로커를 사용하면 메시지를 처리하기 위한 추가적인 오버헤드가 발생할 수 있다. 이는 시스템의 성능에 영향을 줄수 있다.
  • 메시지 브로커의 처리 능력이 부족하면 메시지가 큐에 쌓이게 되어 처리 지연이 발생할 수 있다.

3. 가용성

  • 메시지 브로커가 단일 지점에 위치하고 있기 때문에 해당 브로커가 다운되면 시스템 전체가 영향을 받을수 있다.
  • 메시지 브로커의 하드웨어 장애나 네트워크 문제로 인해 시스템의 가용성이 저하될 수 있다.

4. 데이터 일관성

  • 메시지 브로커를 사용하면 메시지를 보내는 측과 받는 측의 데이터 일관성을 보장하기 위한 추가적인 처리가 필요할 수 있다.
  • 메시지 브로커가 메시지를 잃어버리거나 중복으로 전달될 경우, 이를 방지하기 위한 메시지를 추적하고 중복을 처리하는 메커니즘이 필요하다.

메시지 브로커 종류

1. Apache Kafka

  • Apache Kafka는 대용량의 실시간 메시지 스트리밍 플랫폼으로, 메시지 브로커 역할을 수행한다. 분산 아키텍처를 기반으로 하며, 높은 처리량과 낮은 지연 시간을 제공한다.

2. RabbitMQ

  • RabbitMQ는 오픈 소스 메시지 브로커 소프트웨어로서, AMQP(Advanced Message Queuing Protocal)를 지원한다. 다양한 프로토콜고 메시지 패턴을 지원하며, 확장성과 가용성이 높다.

3. Apache ActiveMQ

  • Apache ActiveMQ는 오픈 소스 메시지 브로커 및 메시지 지향 미들웨어 소프트웨어이다. JMS(Java Message Service)를 지원하며, 다양한 메시징 패턴을 지원한다.

4. NATS(NATS.io)

  • NATS는 경량 메시지 시스템으로, 단일 서버 및 클라우드 환경에서 사용할 수 있다. 간단하고 빠른 메시지 전달을 지원하며, 클라이언트 라이브러리는 다양한 언어로 제공된다.
profile
RECORD DEVELOPER

0개의 댓글