nathan_H

Message Queue란? 본문

Big Data

Message Queue란?

nathan_H 2021. 1. 24. 21:14

Message Queue


image

  • MOM(Message Oriented Middleware)는 비동기 메시지를 사용하는 다른 응용 프로그램 사이에서 데이터 송 수신을 의미하는데, MOM를 구현한 시스템을 Message Queue라 한다.
  • Message Queue는 프로그래밍에서 프로세스 또는 프로그램 인스턴스가 데이터를 교환할 때 사용하는 방법으로, 서비스에서 발생하는 데이터를 Message Queue로 별도의 작업을 연기 및 관리할 수 있기 때문에 SOA(Service-Oriented Architecture)의 개발에 도움을 준다.

Message Queue 장점


image

비동기

  • MQ는 생산된 메시지를 저장 & 전송에 대해 동기화 처리를 진행하지 않고, Queue에 넣기 때문에 나중에 처리 가능하다.
  • 여기서, 기존 동기화 방식은 많은 메시지(데이터)가 전송될 경우 병목이 생길 수 있고, 뒤에 들어오는 요청이 딜레이가 된다.
  • 그래서 중간에 MQ를 활용해 전송만은 따로 위임해 순차적으로 처리를 한다.

비동조

  • MQ를 따로 둠으로써, 애플리케이션과 분리 가능하다.

약결합 & 탄력성

  • MQ가 없는 일반적인 웹 서비스에서는 서버-클라이언트 사이의 통신은 결합도가 높은 구조 이며, 동기 방식이기 때문에 시스템 내 요소들 간에는 의존성이 높아 시스템에 많은 영향을 끼치고 유연성이 낮다.
  • 하지만 MQ는 데이터를 Queue에 담아 비동기로 처리하기 때문에, 일부가 실패 시 전체에 영향을 받지 않음.

보증

  • MQ는 들어오고 나가는 작업 처리된 것을 확인 및 관리 할 수 있기 때문에, 에러 감소 및 로직을 보증할 수 있다.

확장성

  • 다수의 프로세스들이 MQ를 이용해 메세지를 보낼 수 있기 때문에 확장성 및 분산 처리에 용이하다.

MQ 목적 및 사용처


  • MQ는 대용량 데이터를 처리하기 위한 배치 작업이나, 채팅 서비스, 비동기 데이터를 처리할 때 사용한다.
  • 프로세스 단위로 처리하는 요청에 대한 사용자가 많아지거나 데이터가 많아지면 요청에 대한 응답을 기다리는 수가 증가 및 대기 시간이 지연되어서 서비스가 정상적으로 되지 못하는 상황이 오기 때문에 기존에 분산되어 있던 데이터 처리를 한 곳에 집중하면서 Queue를 두어서 필요한 프로그램에 작업을 분산시키는 방법을 하는 것이 그 목적이다.

채팅 서비스에서 필요한 이유


image

  • Chat App에서는 유저가 메시지를 전송하고, 수신한다. 여기서 메시지 생성 외에도 유저는 메시지를 수신하거나 바로 다시 메시지를 생산하거나 다른 작업들을 진행할 수 있어야 한다. (유저가 생산한 메시지가 채팅에 참여한 사람에게 즉각적으로 채팅에 반영 되기를 원할 것이다)
  • 하지만, 메시지를 생성한 사용자가 그 외에도 앱에서 다른 이벤트(메시지 수신 등)에 대해서 피드백을 주기를 기다리고 있는 상황에서 유저가 메시지 보낸 것이 유저들에게 즉각 반영 되는 것이 중요할까?
  • 유저들이 생산한 메시지를 즉각 모든 유저에 채팅방에 매번 반영하기 위해서는 각 메시지 처리에 대해 동기화를 진행해야 하고, 요청되는 양에 따라 서버에 부하가 걸려 많은 작업이 지연이 될 수밖에 없다.
  • 그래서 MQ를 활용해 메시지 생성된 메세지를 Queue에 담은 후에, 메시지 수신자들에게 전달을 하게 되면 작업을 분리해 비동기로 처리할 수 있게 되면서 서버 성능을 개선할 수 있다.

마무리


  • MQ의 경우 비동기적으로 처리를 하기 때문에 순서가 보장이 되야 하는 데이터에 대해서는 고려를 해볼 필요가 있고, 서비스 규모나 로직에 따라 적절하게 변형 및 도입을 해야 한다.
  • MQ에도 Rabbit MQ, Kafka 등과 같은 다양한 오픈소스 시스템이 존재하는데, 각 시스템별 비교 분석 후 현재 도입하고자 하는 서비스에 적합한 시스템을 선정하는 것이 좋다.

참고

Comments