프로세스 혹은 프로그램 간에 데이터를 교환할 때 사용하는 통신 방법 중 하나로
메시지 지향 미들웨어(Message-Oriented middleware) 라고도 한다.
여기서 말하는 메시지란 애플리케이션에서 다른 애플리케이션을 이용할 수 있도록 생성하는 데이터(패킷)를 말하고 전송되는 순서대로 처리한다.
쉽게 생각하면 메시지 큐는 임시로 저장하는 간단한 버퍼이며 메시지 전송 시 생산자(Producer)로 취급되는 컴포넌트가 메시지를 큐에 추가하고 해당 메시지를 소비자(Consumer)로 취급되는 다른 컴포넌트가 메시지를 검색하고 어떤 작업을 수행할 때 까지 메시지 큐에 저장된다.
미들웨어란?
양 쪽을 연결하여 데이터를 주고 받을 수 있도록 중간에서 매개 역할을 하는 소프트웨어
네트워크를 통해서 연결된 여러 개의 컴퓨터에 있는 많은 프로세스들에게 어떤 서비스를 사용할 수 있도록 연결해 주는 소프트웨어를 말한다.
내가 개발하고 있는 백엔드 서버도 사실 미들웨어로 웹 서버는 웹 사이트를 벡엔드 데이터베이스에 연결하는 미들웨어이다.
메시지 큐는 소비자(Consumer)가 언제 메시지를 가져가서 처리할 지는 보장하지 않으므로 언젠가는 큐에 있는 메시지가 소비되어 처리될 수 있는 작업들을 대상으로 처리하는 것이 좋다.
개발을 하다보면 핵심이 되는 비즈니스 로직 처리 후에 부가적으로 처리해야 할 작업들, 이메일 전송, 카카오톡 전송 등이 있는데 바로 처리되지 않더라도 언제가 처리되어야 할 이러한 작업들에 메시지 큐를 사용할 수 있다.
정리하자면 응답이 지연은 어느정도로 허용되더라도 핵심 기능이 아닌 경우에 이를 사용하는 것이 적합하다.
장점
단점
메시지 큐를 운영하고 관리하기 위한 시스템이 필요하여 운영 및 관리 비용등이 늘어나고 전체적인 시스템 구조가 복잡해 질 수 있어 오버헤드가 발생할 수 있다.
AMQP(Advanced Message Queuing Protocol, 어드밴스트 메시지 큐잉 프로토콜)이란 메시지 지향 미들웨어를 위한 프로토콜을 말한다.
Exchange
메시지 브로커에서 큐에 메시지를 전달하는 컴포넌트
Publisher로부터 수신한 메시지를 Binding이라는 규칙으로 메세지의 복사본을 Queue에 배포한다.
여러 Exchange type이 있다.
Message Queue
수신한 메시지를 저장하는 역할을 한다. 단순히 우리가 알고 있는 FIFO 자료 구조 겠거니 생각하면 안되고 다양한 동작 설정이 존재 한다.
Binding
Exchange와 Queue의 관계를 정의하는 규칙으로
1:N, N:1등 여러 방식으로 바인딩한다.
Routing Key
송신 메시지 헤더에 포함되는 가상 주소로
Exchange type은 Routing Key를 이용하여 Binding 키에 맞춰서 큐에 메시지를 전달하게 된다.
Exchange Type
Header Exchange : Routing Key대신에 헤더 속성을 통해 라우팅을 결정 하는 것으로 key-value로 정의된 헤더에 의해 라우팅을 결정하는 것으로 다음과 같다.
참조한 책 및 사이트
https://www.ibm.com/kr-ko/topics/message-queues
https://dev-jwblog.tistory.com/140
https://tecoble.techcourse.co.kr/post/2021-09-19-message-queue/
https://gomyonglee.tistory.com/entry/%EB%AF%B8%EB%93%A4-%EC%9B%A8%EC%96%B4
https://kchanguk.tistory.com/84
https://devahea.github.io/2019/04/30/AMQ-%EB%AA%A8%EB%8D%B8%EA%B3%BC-Exchange-Queue-Binding-%EC%97%90-%EB%8C%80%ED%95%B4/