Post

메세지 큐(Message Queue)

image

메세지 큐란?

Queue 란 선입선출(First in First out) 구조를 가진 자료구조입니다.

Queue 는 2개의 끝을 가지며 각각은 입구와 출구입니다.

새로운 데이터는 입구로 들어오고 나가는 데이터는 출구에서 나갑니다.

메세지 큐(Message Queue)

대용량의 데이터를 처리하기 위해 분산 처리할때 쓰는 것입니다.

프로세스 또는 프로그램 간에 데이터를 교환할 때 사용하는 통신 방법 중에 하나입니다.

image

Queue 라는 자료구조를 채택해서 메세지를 전달하는 시스템이며, 메세지 지향 미들웨어(MOM) 을 구현한 시스템입니다.

메세지를 발행하고 전달하는 부분을 Producer 라고 하며, 메세지를 받아서 소비하는 부분을 Consumer 라고 합니다.

소프트웨어 아키텍처 디자인 패턴인 MSA(Microservice Architecture) 에서 아키텍처의 핵심적인 역할을 합니다


메세지 큐에서 데이터를 운반하는 방식

메세지 큐가 메세지 혹은 이벤트가 송신되고 수신되는 하나의 통신 통로라고 하면

브로커는 메세지 큐에 메세지 혹은 이벤트를 넣어주고 중개하는 역할을 하는 주체

메세지 브로커

메세지 브로커는 Producer 가 생산한 메세지를 메세지 큐에 저장하고,

저장된 메세지를 Consumer가 가져갈 수 있도록 합니다.

메세지 브로커는 Consumer 가 메세지 큐에서 데이터를 가져가게 되면

짧은 시간 내에 메세지 큐에서 삭제되는 특징이 있습니다

ex) RabbitMQ, ActiveMQ, AWS SQS, Redis

이벤트 브로커

이벤트 브로커 또한 기본적으로 메세지 브로커의 역할을 할 수 있습니다.

하지만 반대로 메세지 브로커는 이벤트 브로커의 기능을 하지 못합니다

이벤트 브로커가 관리하는 데이터를 이벤트라고 하며,

이벤트 브로커 방식에서는 Consumer 가 소비한 데이터를 필요한 경우 다시 소비할 수 있습니다.

또한 메세지 브로커 보다 대용량 데이터를 처리할 수 있는 능력이 있습니다

ex) Kafka


메세지 큐 사용 이유

Producer와 Consumer간의 속도가 다를 때,

둘 중 어느 한 컴포넌트가 장애가 발생했을 때 상황 등에 대응이 가능합니다. ( 비동기 방식 )

장애 전파를 막을 수 있습니다.

Producer 서비스에 전달되는 것을 보장합니다.

메세지 큐의 실제 적용사례

대규모 이벤트 처리, 로그 수집, 데이터 동기화 등에 사용됩니다.

메시지 큐는 대량의 데이터를 효율적으로 처리하고, 다양한 시스템 간의 데이터를 일관되게 유지할 수 있기 때문입니다.

1
2
3
4
Queue<String> messageQueue = new LinkedList<>();
    messageQueue.add("메시지1");
    messageQueue.add("메시지2");

EX) 회원가입‘이나 ‘주문’과 같은 작업은 가입한 시점

주문한 시점에 트리거되어서 유저에게 완료되었다는 안내 메시지를 보내거나 쿠폰을 발급하는 등 여러 동작들을 수행하는 경우

특정한 시간에만 트래픽이 몰리는 경우 (서비스 특성 or 선착순 이벤트 등등)

사용할 수 있는 자원에 비해 처리해야할 데이터 양이 엄청 많을 때

다수의 어플리케이션이 어떤 데이터 저장소를 공유해야할 때

이메일 전송할때

메세지 큐의 장점

  1. 비동기(Asynchronous): Queue에 넣어두기 때문에 나중에 처리할 수 있습니다.

  2. 낮은 결합도(Decoupling): 애플리케이션과 분리할 수 있습니다.

  3. 탄력성(Resilience): 일부가 실패 시 전체에 영향을 받지 않습니다.

  4. 과잉(Redundancy): 실패 할 경우 재실행이 가능합니다.

  5. 신뢰성(Guarantees): 작업이 처리된 걸 확인할 수 있습니다.

  6. 확장성(Scalable): 다수의 프로세스들이 큐에 메시지를 보낼 수 있습니다.

메세지 큐의 단점

큐가 가득 차서 더는 큐에 메세지를 저장할 수 없는 상황에서는 메세지를 다른 곳에 보존하거나 버리게 됩니다.

송신측이 수신측보다 빠르면 큐의 크기가 작아서 해당 문제가 빈번할 수 있습니다.

즉, 메세지큐가 문제시 전체에 영향을 끼칩니다.

This post is licensed under CC BY 4.0 by the author.