운영/메시지 큐 (Message Queue)

메시지 큐(Message Queue)

ioh'sDeveloper 2025. 1. 11. 17:16

 

메시지 큐(Message Queue)는 메시지의 무손실(durability)을 보장하며, 프로세스 간 비동기 통신(asynchronous communication)을 지원하는 데이터 전송 시스템이다.  메시지 큐는 데이터가 생산자(Producer)에서 소비자(Consumer)로 안전하게 전달될 때까지 중간 버퍼 역할을 수행한다. 메시지는 큐에 순서대로 저장되며, 소비자가 큐에서 메시지를 꺼내 처리할 때까지 유지된다. 이러한 특성 덕분에 시스템의 비동기 처리와 내결함성을 향상시킬 수 있다. 메시지 큐는 메시지의 버퍼 역할을 하며, 생산자(Producer)와 소비자(Consumer) 간의 비동기 데이터 전송을 가능하게 한다. 기본적으로 생산자가 메시지를 큐에 발행(publish)하고, 큐에 연결된 소비자가 메시지를 꺼내 적절한 작업을 수행하는 구조를 가진다.

메시지 큐의 아키텍처는 간단하다. 입력 서비스인 생산자 또는 발행자가 메시지를 만들어 메시지 큐에 발행하면, 큐에는 보통 소비자 혹은 구독자(Subscriber)라 불리는 서비스 또는 서버가 연결되어 메시지를 수신하고 처리한다.


✅ 메시지 큐의 주요 특징

  1. 비동기 처리: 생산자와 소비자가 독립적으로 메시지를 전송하고 수신할 수 있다.
  2. 내결함성(Fault Tolerance): 메시지가 큐에 저장되어 있어 일시적인 장애가 발생하더라도 데이터가 손실되지 않는다.
  3. 확장성(Scalability): 생산자와 소비자는 각기 독립적으로 확장 가능하다. 큐의 크기가 커지면 더 많은 소비자를 추가하여 처리 속도를 높일 수 있다.
  4. 결합도 감소: 서비스 간 결합도가 낮아져 유지보수와 확장이 용이하다.

✅ 메시지 큐의 동작 방식

Producer(생산자) 메시지를 생성해서 큐에 넣는 주체
Queue(큐): 메시지를 저장하는 중간 버퍼 역할을 수행하며, 메시지가 소비자에게 전달될 때까지 안전하게 보관
Consumer(소비자): 큐에서 메시지를 꺼내어 처리하는 주체

 

메시지 큐를 사용하면 생산자와 소비자 간의 비동기 통신이 가능해져, 예를 들어 생산자가 소비자 프로세스가 다운된 상황에서도 메시지를 발행할 수 있고, 반대로 소비자도 생산자 서비스가 가용하지 않은 상황에서도 큐에 저장된 메시지를 수신하여 처리할 수 있다.


단계별 설명

  1. 메시지 생성: 생산자가 메시지를 생성하고 메시지 큐에 발행한다.
  2. 메시지 저장: 메시지는 큐에 저장되며, 소비자가 수신할 준비가 될 때까지 대기 상태로 유지된다.
  3. 메시지 수신: 소비자가 큐에 연결되어 대기하고 있다가 메시지를 꺼낸다.
  4. 메시지 처리: 소비자는 수신한 메시지를 기반으로 필요한 작업을 수행한다.

 

이러한 단계별 설명을 통해 메시지 큐의 동작 방식을 직관적으로 이해할 수 있다. 이러한 구조를 통해 서비스 간 결합도를 낮추고 시스템의 확장성과 안정성을 높일 수 있다.


✅ 동기 vs 비동기 통신

통신 방식 설명

통신 방식 동기 (Synchronous) 비동기 (Asynchronous)
응답 시간 즉시 응답 필요 나중에 응답 가능
장애 내성 장애 시 데이터 손실 가능 메시지 저장으로 데이터 보존
확장성 수평 확장이 어려움 수평 확장 용이

✅ 메시지 큐의 사용 사례

메시지 큐는 다양한 비동기 작업에 활용될 수 있다. 대표적인 예로는 이미지 보정 애플리케이션이 있다. 이외에도 이메일 발송 시스템, 주문 처리 시스템, 그리고 애플리케이션 로그 수집과 같은 시나리오에서 메시지 큐를 활용할 수 있다. 예를 들어, 사용자가 회원가입을 할 때 즉시 이메일을 보내는 대신, 메시지 큐에 이메일 발송 작업을 넣고, 별도의 이메일 서비스가 이 작업을 처리하도록 비동기적으로 관리할 수 있다. 이로 인해 웹 애플리케이션의 응답 시간이 줄어들고, 시스템의 처리 효율이 높아진다. 이미지의 크로핑(cropping), 샤프닝(sharpening), 블러링(blurring) 등과 같은 작업은 시간이 오래 걸릴 수 있는 프로세스이므로 비동기적으로 처리하는 것이 효율적이다. 웹 서버는 사진 보정 작업을 메시지 큐에 넣고, 작업(worker) 프로세스들은 큐에서 이 작업을 꺼내어 비동기적으로 완료한다. 이렇게 하면 생산자와 소비자 서비스의 규모는 각기 독립적으로 확장될 수 있다.

예를 들어, 큐의 크기가 커지면 더 많은 작업 프로세스를 추가하여 처리 시간을 줄일 수 있다. 반대로, 큐가 거의 항상 비어 있는 상태라면 불필요한 자원을 절약하기 위해 작업 프로세스 수를 줄일 수 있다.

 


✅ 메시지 큐의 종류

메시지 큐 서비스설명

RabbitMQ 오픈 소스 메시지 브로커, AMQP 지원
Apache Kafka 분산 메시지 스트리밍 플랫폼
ActiveMQ 자바 기반의 오픈 소스 메시지 브로커
Amazon SQS AWS에서 제공하는 메시지 큐 서비스
Redis 인메모리 데이터 저장소, 메시지 큐 기능 포함

✅ 메시지 큐의 주요 패턴

  1. Point-to-Point (P2P)
    • 한 개의 Producer가 메시지를 전송하면 한 개의 Consumer만 메시지를 받습니다.
    • 예: 주문 처리 시스템
  2. Publish/Subscribe (Pub/Sub)
    • Producer가 메시지를 발행하면 여러 Consumer가 구독하여 메시지를 받습니다.
    • 예: 알림 시스템

✅ 메시지 큐의 활용 사례

  1. 이메일 발송 시스템
    • 사용자가 회원가입 시 이메일을 바로 발송하지 않고 메시지 큐에 넣어 비동기로 처리합니다.
  2. 주문 처리 시스템
    • 대규모 주문이 들어와도 큐에 메시지를 쌓아 두고, 한 번에 하나씩 순서대로 처리합니다.
  3. 로그 수집
    • 애플리케이션에서 발생하는 로그를 메시지 큐로 보내고, 별도의 로그 처리 서비스가 이를 처리합니다.