기술면접

[기술면접] 메시지 큐

jiioong 2024. 2. 2. 14:42

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

  • SW간의 비동기적 데이터 통신을 위한 소프트웨어
  • 메시지의 백업 기능을 유지하기 때문에 송수신 측은 동시에 연결을 유지할 필요가 없다
  • 미들웨어 즉, 자신이 직접 메시지 라우팅을 수행하기 때문에, 하나의 메시지를 여러 수신자에게 배포가 가능하다.
  • 요구에 따라 전달할 수 있도록 메시지를 변환할 수 있다.

메시지 큐

  • " Queue (선입선출) " 자료구조를 채택해 메시지를 전달하는 시스템이자 MOM
  • 메시지를 전달하는 부분을 Producer, 수신하는 부분을 Consumer 라고 한다. 메시지 큐는 이 둘의 사이에서 메시지 전달 역할을 하는 매개체
  • MSA 아키텍처의 핵심적인 역할

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

  • 메시지 큐는 메시지나 이벤트가 송수신되는 통로 , 브로커는 메시지 큐에 메시지나 이벤트를 넣어주고 중개하는 역할을 하는 주체

메시지 브로거 ( Message Broker )

  • Producer가 생산한 메시지를 메시지 큐에 저장하고, 저장된 메시지를 Consumer 가 가져갈 수 있도록 한다.
  • Consumer가 큐에서 데이터를 가져가면 짧은 시간 내에 메시지 큐에서 삭제된다는 특징을 가지고 있다
  • ex ) RabbitMQ, ActiveMQ, AWS SQS, Redis

이벤트 브로커 ( Event Broker )

  • 이벤트 브로커는 메시지 브로커의 역할을 할 수 있다. 하지만 그 반대는 불가능함
  • Consumer가 소비한 데이터를 필요한 경우 다시 소비할 수 있다. 즉, 삭제되지 않는다.
  • 메시지 브로커보다 대용량 데이터를 처리할 수 있다.
  • ex) Kafka

메시지 큐 장점

  • 비동기 : Queue에 넣어두기 때문에 나중에 처리할 수 있다. 종단간 통신을 통해 메세지 전달이 이루어지기 때문에 해당 과정이 완료되기 전에는 다른 메세지 전달 과정을 진행하지 못한다.
  • 낮은 결합도 : 애플리케이션과 분리 가능하다
  • 탄력성 : 일부 실패 시 전체에 영향을 받지 않는다. 시스템이 장애에 유연하게 대응하고 대처할 수 있는 능력을 의미. 장애 발생 시 큐에 보관 후 처리하면 되기 때문에 가능해진다.
  • 과잉 : 실패 할 경우 재실행이 가능하다. 과잉은 정상적인 메세지 송수신이 실패하는 경우 재실행이 가능하다는 것을 의미
  • 신뢰성 : 작업이 처리된 걸 확인할 수 있다.
  • 확장성 : 다수의 프로세스들이 큐에 메시지를 보낼 수 있다. 요청 또는 부하가 증가하면 메세지 큐에 producer와 consumer를 추가해 확장할 수 있다.

 

메시지 큐의 종류

더보기

AMQP (Advanced Message Queue Protocol) ?

- MOM을 위한 개방형 표준 응용 계층 프로토콜, 메시지 큐와 비슷하지만 Exchange 라는 라우터 역할이 존재하며 Binding이라는 개념이 존재한다. 

- 손실이나 중복 없이 메시지를 전달해야 하는 사례에서 좋다.

- 한개의 Queue 만 있다면 일반적인 메시지 큐와 비슷하지만 , 여러개의 Consumer와 Queue 가 존재할 때 높은 효율성을 보여준다.

 - Exchange : Producer로 부터 전달받은 메세지를 어떤 메세지 큐로 전송할지 결정하는 장소 (분배)

 - Queue : Consumer가 소비하기 전까지 메세지가 보관되는 장소

 - Binding : Exchange에 전달된 메세지가 어떤 Queue에 저장되어야 하는지 정의

- Exchange의 종류 : Direct (1:1) , Fanout (1:N 브로드캐스트), Topic, Headers (key-value로 정의된 헤더에 의해 라우팅)

1. RabbitMQ

  • AMQP를 구현해 놓은 메세지 큐
  • Broker 중심적인 형태 
  • 유연하고 복잡한 라우팅이 가능하다
  • 관리 UI가 존재한다
  • 데이터 처리보단 관리적 측면이나 다양한 기능 구현을 위한 서비스를 구축할 때 사용한다.
  • 메시지 큐 서버가 종료 후 재가동시 큐 내용은 모두 삭제한다.
  • Producer와 Consumer 의 결합도가 높다.

2. ActiveMQ

  • JMS (Java Mail Service) : 메세지 큐 및 publish - subscribe 패턴과 같은 메세지 기반 통신을 추상화하고 표준화한 API, Java MOM 표준 API
  • ActiveMQ는 JMS 스펙을 좀 더 사용하기 편리하게 구현한 오픈소스 메시지 브로커
  • AMQP 기반의 RabbitMQ를 사용하는 프로세스와의 통신은 불가능하다.
  • ActiveMQ 구성요소 : Message Broker (중개자) , Destination (목적지에 배달될 2가지 모델 Topic, Queue), Queue (메세지 전달 통로) , Topic ( Queue와 비슷하지만 여러 Consumer에게 메세지를 건네줄 수 있다)
  • Queue 의 경우 Consumer가 다수일 때 연결된 순서로 제공된다.
  • Topic의 경우 Consumer가 다수일 때 모두에게 제공된다.

3. Kafka

  • 파이프라인, 스트리밍 분석, 데이터 통합 및 미션 크리티컬 애플리케이션을 위해 설계된 고성능 분산 이벤트 스트리밍 플랫폼
  • Pub-Sub 모델의 메시지 큐 형태로 동작하며 분산환경에 특화되어 있다.
  • 이벤트 브로커 !!!
  • 메시지를 메모리에 저장하는 기존 메시징 시스템과는 달리 파일에 저장을 하기 떄문에 재시작하는 경우에 메시지 유실 우려가 감소된다.
  • 기본 메시징 시스템은 Broker가 Consumer에게 메시지를 Push 해주는 방식, Kafka는 Consumer가 Broker로 부터 직접 가져가는 Pull 방식으로 동작하기 때문에 자신의 처리 능력 만큼만의 메시지만 가져와 최적의 성능을 낼 수 있다.

 

Reference)

  • [서버] 메세지 큐
 

velog

 

velog.io

  • 표준 메세징 프로토콜 정리
 

velog

 

velog.io