[Server] 메시지 큐란?

김강욱·2024년 5월 7일
0

Server

목록 보기
2/2

이번 시간에는 간단하게 메시지 큐의 정의, 특징에 대해 알아보도록 하겠습니다.

🌈 메시지 큐란?


MSA(Microservice Architecture)에서 핵심적인 역할을 하고 있는 메시지 큐에 대해 알아봅시다.

메시지 큐(Message Queue)는 프로세스 또는 프로그램 간에 데이터를 교환할 때 사용하는 통신 방법을 의미합니다. 큐 구조로 메시지를 저장하고 전달한다고 해서 메시지 큐로 불립니다.

메시지 큐는 메시지 지향 미들웨어(Message Oriented Middleware:MOM)를 구현한 시스템을 의미하는데 여기서 말하는 메시지 지향 미들웨어(MOM)은 비동기 메시지를 사용하는 응용 프로그램들 사이에서 데이터를 송수신하는 것을 의미합니다.

메시지 지향는 메시지를 전달하는 과정에서 보관하거나 라우팅 및 변환할 수 있다는 장점을 가지고 있습니다. 여기서 말하는 메시지는 요청/응답/오류 메시지 혹은 단순한 정보 등의 작은 데이터가 될 수 있습니다.

1. 보관

메시지의 백업 기능을 유지함으로써 지속성을 제공하며 덕분에 송수신 측은 동시에 네트워크 연결을 유지할 필요가 없습니다.

2. 라우팅

미들웨어 계층 자신이 직접 메시지 라우팅을 수행하기 때문에, 하나의 메시지를 여러 수신자에게 배포할 수 있습니다.

3. 변환

송수신 측의 요구에 따라 전달하는 메시지를 변환할 수도 있습니다.

요약하자면 메시지 큐는 메시지를 임시로 저장하는 간단한 버퍼의 개념이고 동시에 메시지 지향 미들웨어(MOM)을 구현하여 송신자와 수신자 간의 비동기 메시지 전달이 가능하도록 해주는 시스템이라고 보실 수 있습니다.


🌈 Producer / Consumer


메시지 큐에서 등장하는 Producer, Consumer의 개념에 대해 알아보도록 하겠습니다.

Producer는 메시지를 생산하는 컴포넌트로 메시지 전송 시 메시지를 메시지 큐에 추가하는 역할을 합니다. 반면 Consumer는 메시지를 처리하는 컴포넌트이며 Consumer가 메시지를 검색하고 이를 사용해 어떤 작업을 수행할 때까지 메시지 큐에 메시지가 저장됩니다.

메시지 큐는 ProducerConsumer의 메시지 전달 역할을 하는 중간 매개체 역할을 하게 됩니다.

메시지 큐 구조 그림

사진 출처 : https://dev-jj.tistory.com/entry/MQ-Message-queue%EB%9E%80

📬 메시징 플랫폼 (메시지 브로커 vs 이벤트 브로커)

메시징 플랫폼은 메시지 브로커이벤트 브로커로 분류됩니다.

메시지 브로커는 메시지를 받아서 적절히 처리하고 나면 즉시 또는 짧은 시간 내에 삭제되는 구조입니다. Producer가 생산한 메시지를 메시지 큐에 저장하고, 저장된 메시지를 Consumer가 가져갈 수 있도록 합니다.

반면 이벤트 브로커는 서비스에서 나오는 이벤트를 마치 데이터베이스에 저장하듯이 이벤트 브로커의 큐에 저장합니다. 기본적으로 메시지 브로커의 역할도 수행가능하며 Consumer가 소비한 데이터를 필요로 하는 경우 다시 소비할 수 있습니다.

이벤트 브로커메시지 브로커의 역할을 수행할 수 있지만 메시지 브로커이벤트 브로커의 역할을 수행할 수 없습니다.


📝 메시지 큐를 사용하는 경우

메시지 큐는 Consumer가 실제로 메시지를 어느 시점에 가져가서 처리하는지를 보장하지 않습니다.

큐에 넣어둔 메시지가 소비되어 처리될 것이라고 믿고 이러한 비동기적 특성 때문에 메시지 큐는 실패하면 치명적인 핵심 작업보다는 애플리케이션의 부가적인 기능에 사용하는 것이 적합합니다.


🌈 메시지 큐의 특징


1. 비동기(Asynchronous)

메시지 큐는 생상된 메시지의 저장, 전송에 대한 동기화 처리를 진행하지 않고, 큐에 넣어두기 때문에 나중에 처리할 수 있습니다.

기존 동기화 방식은 많은 메시지를 전송할 경우 병목 현상이 생길 수도 있고, 뒤에 들어오는 요청에 대한 응답이 지연됩니다.

2. 낮은 결합도(Decoupling)

Producer의 서비스와 Consumer의 서비스가 독립적으로 행하면서 각 서비스 간의 결합도가 낮아집니다.

3. 확장성(Scalable)

Producer의 서비스 또는 Consumer의 서비스를 원하는 대로 확장할 수 있기 때문에 확장성이 좋습니다.

4. 탄력성(Resilience)

Consumer의 서비스가 다운되더라도 애플리케이션이 중단되는 것이 아니라 메시지는 메시지 큐에 남아있습니다. Consumer의 서비스가 다시 시작될 때 마다 추가 설정이나 작업을 수행하지 않아도 메시지 처리를 시작할 수 있습니다.

5. 보장성(Guarantees)

메시지 큐는 큐에 보관하는 모든 메시지가 결국 Consumer 서비스에게 전달된다는 일반적인 보장을 제공하고 있습니다.


참고 자료
[서버] 메세지 큐(Message Queue) 을 알아보자 - 최동근님

profile
TO BE DEVELOPER

0개의 댓글

관련 채용 정보