본문 바로가기

참고자료

메시지 큐 (Message Queue)란?

1. 메시지 큐란?

요약하자면, 미들웨어에서 쓰는 메시지 전달 방식중 하나이다. 

미들웨어는 어플리케이션들의 중개자가 되어

어플리케이션간의 데이터 통신을 가능하게 해주는 소프트웨어다.

이런 미들웨어중 Message Oriented Middleware 라는 미들웨어도 있다.

MOM 이라고 하는 이런 미들웨어는 메시지 API 를 사용해

어플리케이션 간의 비동기식 데이터 교환을 가능하게 해준다. 

이런 MOM 을 구현한 시스템을 Message Queue 라고 한다.

 

서로 다른 프로세스나 프로그램 사이에서 메시지를 교환할때 

Advanced Message Queue Protocol 을 이용한다.

위의 AMQP 는 Message Oriented Middleware 를 위한 프로토콜이다.

이 프로토콜은 wire-protocol 을 제공한다.

wire-protocol은 Octect-stream을 사용해

다른 네트워크 사이에서도 데이터 통신이 가능하게끔 하는 포맷(혹은 protocol)이다.

 

 

 

 

메시지 큐는 마이크로 서비스 아키텍처 개발에도 도움을 줄 수 있다.

 

2. MOM 이 사용하는 메시지 API

peer to peer 방식과 Publisher - Subscribe 방식이 있다.

-- Peer to Peer  방식

 

Peer to Peer 방식의 메시징 시스템이다.

Queue 의 대기열은 Consumer가 소비를 하면 하나씩 없어지는 형태이다.

 

-- Publisher - Subscribe 방식

Peer to Peer 와 마찬가지로 데이터를 생산하는 Producer 와 데이터를 소비하는 Consumer 가 존재한다.

하지만 차이점은 여러 Consumer 는 한 곳(=Subscription) 에서 데이터를 받아 소비한다.

이때 모든 Consumer가 메시지를 다 소비할 경우에 메세지가 대기열에서 지워진다.

 

 

3. 메시지 지향 미들웨어의 필요성

-- 분산 시스템

정보의 양이 많아짐에 따라 하나의 컴퓨터에서 모든 것을 처리하기에는 너무 부담이 크다.

그래서 여러 컴퓨터를 분산시켜 네트워크를 연결하여 처리를 한다. 

서버의 과부하도 줄여 성능개선과 장애요소를 최소화 할 수 있다.

근데 문제가 분산하면 분산할수록 설계가 복잡해져버린다.

그리고 하나의 응용프로그램이 변경이되면 분산된 환경도 변경을 시켜줘야된다.

즉, 결합도가 높아져버린다.

 

--웹 API 통신의 특성의 활용

마이크로 서비스 아키텍처를 사용한 분산시스템은 웹 API 서버로 요청시 응답을 기다려야 한다.

마이크로 서비스간에는 실시간으로 비동기식 처리는 가능하지만 

처리의 순서가 일정하지 않다.

또 어플리케이션은 메세지를 보낼 때 

메세지를 보낼 어플리케이션의 도착점(목적지)을 알아야만 통신이 가능하다.

따라서 불필요한 결합도가 생겨버린다. 

또 응답을 주는 서비스가 장애시 데이터 요청을 했던 어플리케이션도 장애가 일어날 수 있다.

 

--메시지 지향 미들웨어의 필요성

메세지 API 는 비동기 프로토콜을 지원한다. 

또 메시지의 순서도 보장할 수 있다.

메세지 대기열에 메시지가 전달이되면 응답을 즉시 할 필요가 없다.

Message Queue 에 메시지가 전달만 되면 시스템에 그 메시지는 보관되 있으며

결합도를 낮출수도 있다.

 

4. 메시지 큐는 그럼 언제 쓰이는 걸까?

일단 특징을 살펴보자

-- 많은 양의 정보 처리에 쓸 수 있다.

-- 이메일 발송 및 문서 업로드에도 쓰인다.

-- 다양한 application에서 비동기 통신이 가능하다.

-- 다른 곳의 API 로부터 데이터 송수신이 가능하다.

 

메시지큐를 주로 사용하는 곳은 이러하다.

-- 대용량 데이터를 처리하기 위한 배치 작업이나, 채팅 서비스, 비동기 데이터를 처리할 때

프로세스 단위로 처리하는 웹 요청이나 일반적인 프로그램을 만들어서 서비스할 때

사용자가 많아지거나 데이터가 많아지면 요청에 대한 응답을 기다리는 수가 증가하게 된다.

그러면 나중에는 대기 시간이 지연되어서 서비스가 정상적으로 되지 못하는 상황이 와버린다.

때문에 기존에 분산되어 있던 데이터 처리를 한 곳에 집중하면서

메세지 브로커를 두어서 필요한 프로그램에 작업을 분산시키는 방법을 하는 것이다.

 

--메시지 브로커란?

메시지 브로커는 송신자에게서 나온 정보를 수신자에게 전달해주는 중개자 역할을 한다.

응용 소프트웨어간의 메시지를 교환할 수 있게 하며 이때 메시지가 적재되는 공간이 메시지 큐이다.

그리고 메시지의 그룹을 Topic 이라고 한다. 

 

https://doridorigang.tistory.com/4

https://steady-snail.tistory.com/165

https://12bme.tistory.com/176

https://heodolf.tistory.com/49

https://velog.io/@minsuk/Publish-Subscribe-%ED%8C%A8%ED%84%B4%EC%95%8C%EB%A6%BC

https://acet.pe.kr/673

'참고자료' 카테고리의 다른 글

EC2 에 mysql 8.0 설치하기  (0) 2021.10.20
자바 8 과 자바 11의 특징  (0) 2021.10.14
FrameWork 와 SpringFrameWork  (0) 2021.08.27
Request 의 방식의 종류  (0) 2021.07.06
JSON Web Token (JWT)  (0) 2021.07.06