메시지 큐(Message Queue)

rudwnd33·2022년 2월 26일
0

TIL

목록 보기
77/77
post-thumbnail

메시지 큐(Message Queue)

메시지 큐는 프로세스 또는 프로그램 인스턴스가 데이터를 서로 교환할 때 사용하는 통신 방법 중 하나로, 메시지 지향 미들웨어(Message Oriented Middleware, MOM)를 구현한 시스템을 의미한다. MOM이란 비동기 메시지를 사용하는 응용 프로그램들간의 데이터 송·수신을 의미한다.

메시지 큐는 메시지를 임시로 저장하는 간단한 버퍼라고 할 수 있다. 메시지를 송·수신하기 위해 중간에 메시지 큐를 두는 것이다.

메시지 큐를 사용하면 시스템의 서로 다른 부분이 통신하고 비동기식으로 작업을 처리할 수 있다. 메시지 큐는 메시지를 임시로 저장하는 간단한 버퍼를 제공하고, 메시지를 전송 및 수신하기 위해 소프트웨어 구성 요소가 메시지 큐에 연결하도록 허용하는 엔드포인트를 제공한다. 메시지는 보통 크기가 작으며, 요청, 응답, 오류 메시지 또는 평범한 정보가 될 수 있다. 메시지를 전송하려면 Producer라고 부르는 구성 요소가 메시지를 대기열에 추가한다. 해당 메시지는 Consumer라고 부르는 또 다른 구성 요소가 메시지를 검색하고 이를 사용해 어떤 작업을 수행할 때까지 메시지 큐에 저장된다.

중간에 메시지 큐를 둠으로써 동기 방식의 데이터 통신에서 발생할 수 있는 병목 현상을 방지할 수 있고 중간 미들웨어에게 메시지를 위임하여 순차적으로 처리할 수 있게 한다.

메시지 큐 장점

  • 비동기(Asynchronous)
    메시지를 큐에 넣기 때문에 나중에 처리할 수 있다.

  • 디커플링(Decoupling)
    애플리케이션과 분리할 수 있다.

  • 회복·탄력성(Resilience)
    일부가 실패했을 때 전체에 영향을 주지 않는다.

  • 과잉(Redundancy)
    실패 시 재실행이 가능하다.

  • 보장성(Guarantee)
    작업이 처리된 것을 확인할 수 있다.

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

메시지 큐 사용처

메시지 큐잉은 대용량 데이터를 처리하기 위한 배치 작업, 채팅, 비동기 데이터를 처리할 때 사용된다.

  • 다른 곳의 API로부터 데이터 송·수신이 가능하다.
  • 다양한 애플리케이션에서 비동기 통신이 가능하다.
  • 이메일 발송 및 문서 업로드가 가능하다.
  • 많은 양의 프로세스들을 처리할 수 있다.

일반적인 클라이언트-서버 구조에서는 사용자가 요청을 하면 서버는 그에 대한 처리를 한 후 클라이언트에게 응답을 준다. 간단한 서버 구조에서는 굳이 메시지 큐를 사용할 필요가 없다. 사용자가 응답을 기다려야 하는 HTTP 요청을 바로 처리하지 않고 중간에 메시지 큐를 두는 경우는 바람직하지 않아 보인다. 또한 메시지 큐를 적용하려면 다양한 메시지 큐 중에서 시스템의 목적에 맞는 것을 선정해야 한다. 이후 선정된 메시지 큐의 사용 방법도 익혀야 하며, 지원하는 다양한 옵션 중에 시스템이 추구하는 목적에 맞는 옵션을 찾아 설정해야 한다.

이메일 전송

어떤 웹 사이트의 비밀번호를 잊어버려서 이메일을 통해 임시 비밀번호를 받거나, 새로운 회원가입을 위한 인증 코드를 받아본 경험이 있을 것이다. 우리는 이러한 상황들에서 이메일이 즉각적으로 수신되기를 기대하지는 않는다. 아무리 성격이 급한 사람이라도 몇 분 안에 오겠거니 생각할 것이다. 어느 정도의 응답 지연이 허용되며, 애플리케이션의 핵심 기능은 아닌 경우이므로 메시지 큐는 이런 경우 도움이 될 수 있다.

  • 비밀번호 재설정을 위해 이메일을 발급하는 서비스, 회원가입을 위해 이메일을 발급하는 서비스 등은 메시지(이메일)를 큐에 넣을 수 있다.
  • 이메일 전송 전용 서비스는 이메일이 어느 서비스로부터 생산되었는지와는 관계없이, 메시지 큐의 메시지를 하나씩 소비하고, 그저 이메일이 전송되어야 할 곳으로 이메일을 전송한다.
  • 이와 같은 접근 방식은 메시지 큐에 들어오는 메시지 수가 너무 많아지는 경우에 이메일 전송 전용 서비스 인스턴스를 더 둠으로써 확장할 수 있으므로 확장성이 좋다.

블로그 포스팅

모든 블로그 사용자가 웹에 최적화되어 있거나, 용량이 작은 이미지만 업로드하진 않을 것이다. 블로그 서비스의 응답 시간을 늦추지 않으면서 사용자들에게 유연성을 제공하는 방법으로, 사용자가 업로드한 모든 이미지를 포스팅 과정에서 즉각적으로 처리하는 것이 아닌, 사후처리하며 최적화하는 방법이 있다. 사용자 경험에 약간의 영향을 미칠 수는 있지만, 최적화는 응용 프로그램에서 가장 중요한 것은 아니며 작업을 즉시 수행할 필요도 없다. 메시지 큐는 이러한 상황에서도 사용될 수 있다.

  1. 사용자가 고용량의 이미지가 포함된 블로그 포스팅을 한다.
  2. 이미지는 저장소에 전송된다.
  3. 업로드된 이미지에 대한 정보가 포함된 메시지를 이미지 최적화 서비스의 메시지 큐에 담는다.
  4. 이미지 최적화 서비스는 저장소에서 이미지를 가져와 최적화하고, 2번에서 저장해놨던 이미지를 대체한다.

유튜브에 영상을 업로드할 때도 영상 화질이 바로 좋게 업로드되지 않고 일정 시간이 지나야 좋은 화질이 적용됐던 것으로 기억하는데 이때도 메시지 큐가 사용되었을까?!

출처

profile
주니어 백엔드 개발자

0개의 댓글