메시지 큐란?

GwanMtCat·2023년 10월 10일
0

개념

프로세스 혹은 프로그램 간에 데이터를 교환할 때 사용하는 통신 방법 중 하나로
메시지 지향 미들웨어(Message-Oriented middleware) 라고도 한다.

여기서 말하는 메시지란 애플리케이션에서 다른 애플리케이션을 이용할 수 있도록 생성하는 데이터(패킷)를 말하고 전송되는 순서대로 처리한다.

쉽게 생각하면 메시지 큐는 임시로 저장하는 간단한 버퍼이며 메시지 전송 시 생산자(Producer)로 취급되는 컴포넌트가 메시지를 큐에 추가하고 해당 메시지를 소비자(Consumer)로 취급되는 다른 컴포넌트가 메시지를 검색하고 어떤 작업을 수행할 때 까지 메시지 큐에 저장된다.

미들웨어란?
양 쪽을 연결하여 데이터를 주고 받을 수 있도록 중간에서 매개 역할을 하는 소프트웨어

네트워크를 통해서 연결된 여러 개의 컴퓨터에 있는 많은 프로세스들에게 어떤 서비스를 사용할 수 있도록 연결해 주는 소프트웨어를 말한다.

내가 개발하고 있는 백엔드 서버도 사실 미들웨어로 웹 서버는 웹 사이트를 벡엔드 데이터베이스에 연결하는 미들웨어이다.


언제, 어디에 사용해야 할까?

메시지 큐는 소비자(Consumer)가 언제 메시지를 가져가서 처리할 지는 보장하지 않으므로 언젠가는 큐에 있는 메시지가 소비되어 처리될 수 있는 작업들을 대상으로 처리하는 것이 좋다.

개발을 하다보면 핵심이 되는 비즈니스 로직 처리 후에 부가적으로 처리해야 할 작업들, 이메일 전송, 카카오톡 전송 등이 있는데 바로 처리되지 않더라도 언제가 처리되어야 할 이러한 작업들에 메시지 큐를 사용할 수 있다.

정리하자면 응답이 지연은 어느정도로 허용되더라도 핵심 기능이 아닌 경우에 이를 사용하는 것이 적합하다.


메시지 큐의 장점, 단점

장점

  • 비동기 (Asynchronous)
    메시지 큐는 생산된 메시지의 저장, 전송에 대해 동기 방식으로 처리 하지 않고 큐에 메시지를 생산할 뿐이므로 부가 적인 작업을 처리할 떄 까지 기다릴 필요가 없어 핵심 로직에 집중할 수 있다.
  • 낮은 결합도 (Decouplling)
    어플리케이션 간의 핵심 작업에 집중하도록 처리하기 때문에 각 서비스 간의 결합도를 낮출 수 있는 장점이 있다.
  • 확장성 (Scalable)
    생산자와 서비스를 원하는 만큼 추가 가능하므로 확장성이 좋다.
  • 탄력성 Resilienece)
    메시지의 처리가 일부 실패 혹은 장애가 발생하더라도 전체에 영향을 주지 않으며, 메시지를 보관하고 있으므로 장애를 처리한 후에, 작업을 다시 시작할 수 있다.
  • 영속성 (Persistence)
    데이터를 메모리 대신에 디스크에 저장하여 데이터 유실을 어느정도 방지 가능하다.

단점

메시지 큐를 운영하고 관리하기 위한 시스템이 필요하여 운영 및 관리 비용등이 늘어나고 전체적인 시스템 구조가 복잡해 질 수 있어 오버헤드가 발생할 수 있다.


AMQP?

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

  • Fan-out : 메시지를 모든 큐에 브로드캐스팅(1:N) 하는 것으로 Routing Key가 무시 된다.

  • Direct-Exchange : 메시지의 Routing Key를 큐에 1대1로 매칭 시키는 방법으로 Exchange 로 전달된 메시지의 Routing Key와 Queue의 Binding Key가 정확히 매칭되는 큐로 전달이 된다.

  • Topic Exchange : Direct Exchange와 유사하나 고정된 Routing Key를 사용하는 것 대신에 와일드카드(Wildcard)를 사용하여 메시지를 하나 혹은 여러개의 패턴에 맞는 Queue에 보낸다.

  • Header Exchange : Routing Key대신에 헤더 속성을 통해 라우팅을 결정 하는 것으로 key-value로 정의된 헤더에 의해 라우팅을 결정하는 것으로 다음과 같다.

    • x-match = any: 헤더의 일부 값만 일치해도 해당 큐로 라우팅
    • x-match = all: 헤더의 모든 값이 일치해야 해당 큐로 라우팅

참조한 책 및 사이트

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/

0개의 댓글