[Architecture] 메시지 브로커와 이벤트 브로커 - 메시지와 이벤트 그리고 RabbitMQ 와 Kafka

·2024년 3월 25일
0

Architecture

목록 보기
2/2
post-thumbnail

메시지와 이벤트

메시지

일상생활에서 정보와 의견을 전달하기 위해서 사용되는 것처럼, 컴퓨터 공학의 경우, 프로그래밍에서 통신을 통해 정보를 주고받는 데이터를 의미한다.

메시지 큐

이러한 메시지를 안전하고 효율적으로 전달하기 위한 소프트웨어 혹은 서비스를 의미한다. 메시지를 보내는 기능 외에도, 다음과 같은 추가적인 기능을 가지고 있다.

  • 비동기 통신 : 메시지 큐를 일종의 대기열처럼 활용하여, 비동기 통신을 수행하는 것이 가능하다. 다수의 업무 작업이 이루어진다고 했을 때, 동기적 통신 대비 각 프로세스들이 작업을 멈추지 않고 수행한다는 점에서 더 빠른 결과를 수행할 수 있다.
  • 캐싱 : 메시지를 일시적으로 저장하는 캐싱기능이 있다. 그러나, 캐싱 자체가 주요 기능이 되지 않으며. 메시지 보관 시간도 길지 않아, 서비스를 최적화하는데 큰 영향을 미치는 것은 아니다. 메시지 큐의 캐싱은 뒤이어 후술할 통신 안정성의 부가적인 요소로 사용된다.
  • 통신 안정성 : 네트워크의 통신 안정성과 유사하게, 메시지 큐 역시 메시지 통신의 안정성을 보장하는 기능들을 가지고 있다.
    • 일부 오류로 메시지가 전달되지 않은 경우, 재요청을 통해 다시 메시지 전달을 시도한다.
    • 트랜잭션을 지원하여 다수의 메시지 통신에 대한 원자성을 보장한다.

메시지 브로커

메시지 큐의 확장된 기능으로, 다수의 메시지를 운영 관리하기 위한 기술 혹은 아키텍처를 의미한다. 기존 메시지 큐의 1:1 통신 방법을 넘어, 광범위한 전송과 라우팅을 허용한다.

자세한 내용은 이전에 작성했던 메시지 큐와 메시지 브로커를 참조하자


이벤트

일상생활에서 일련의 사건을 의미하는 것처럼, 컴퓨터 공학의 경우, 프로그래밍에서 시스템에서 발생하는 사건이나 상황을 의미한다.

이벤트 브로커

메시지 브로커와 유사하게, 이벤트 브로커는 다수의 이벤트를 운영 관리하기 위한 기술 혹은 아키텍처를 의미한다.



메시지 브로커와 이벤트 브로커의 차이

왜 헷갈리는가?

  • 메시지 브로커, 이벤트 브로커 모두 메시지 혹은 이벤트 통신을 위해 기술을 선택하기 보다는 MSA 아키텍처 상에서, 서버간의 통신 혹은 데이터 동기화를 목적으로 사용하는 경우가 많다. 더불어 두 가지 기술 모두 MSA 통신 체계를 구축하기 위한 공통적인 기능을 모두 수행할 수 있다.

  • 실제 kafka 사용 시 이벤트라는 말 보다는 메시지를 보낸다는 경우가 더 많다.
    그럼에도 불구하고 Kafka 가 이벤트 브로커로 분류되는 이유는 메시지 큐를 사용하지 않으며, Producer 의 이벤트 발행을 통해Consumer 에게 메시지를 전송하기 때문이다.

  • 프로그래밍 전반에 사용되는 메시지 아키텍처는 대부분 비동기 통신을 사용하며, 더불어 메시지 브로커의 라우팅 기능이 확립되면서, 이벤트처럼 통신 상대를 명확히 지정할 이유가 사라졌다.

    > 송신자와 수신자 기존 수행할 작업을 메시지 브로커에게 전가 했다고 볼 수 있다. 송신자가 통신을 보내기 위해 수신자를 파악할 이유가 사라진것이다. 

    이는 이벤트가 동작을 처리할 때 특정 작업 상대를 지정하지 않는다는 점에서 일정부분 비슷하여, 메시지 통신과 이벤트 통신의 경계가 모호해졌다고 볼 수 있다.


이론적 관점에서의 차이

메시지

  • 통신을 통해 데이터를 전달하기 위한 목적으로 사용된다. 대표적으로 RestAPI 가 있다.
  • 송신자가 수신자에게 통신을 보낼 때 작업이 수행된다.
  • 동기적 혹은 비동기적으로 작업을 전달한다.
  • 작업을 수행할 상대가 명확히 지정되어있음.
  • 주로 최신 정보를 기반으로한 구조화된 데이터를 활용한다. (이름, 나이, 성별)

이벤트

  • 시스템의 발생하는 사건이나 상태를 표현하기 위한 목적으로 사용된다. 대표적으로 상태변경이 있다.
  • 사건에 따라 특정 조건을 충족했을 때 작업이 수행된다. (마우스를 클릭함, 키보드를 입력함)
  • 대부분 비동기적으로 작업을 전달한다.
  • 작업을 수행할 상대가 지정되어 있지 않음.
  • 구조화된 데이터 외에도 변경사항을 포함한 비구조화된 데이터를 포함할 수 있다. (로그인 했음, 장애가 발생함, 주문이 완료됨)

MSA 관점에서의 차이 (RabbitMQ vs Kafka)

공통점

  • Pub/Sub : Pub/Sub 패턴을 지원하며, 중간 매개체를 통해 통신을 주고 받는다.
  • 유연성 및 확장성 : MSA 와 같이, 수평적 확장이 가능하여, 대규모 데이터 통신 처리에 적합하다.
  • 영속성 보장 : 디스크에 메시지를 저장하는 기능을 지원한다. 단 저장방식과 성능적인 차이가 존재한다.
  • 장애 제어 : 장애 발생 시 전파 영향을 최소화하고, 장애를 복구하기 위한 기술들이 있다.

차이점

profile
새로운 것에 관심이 많고, 프로젝트 설계 및 최적화를 좋아합니다.

0개의 댓글