Infra

RabbitMQ: 상세하고 체계적인 가이드

yoongrammer 2024. 9. 18. 14:38
728x90

RabbitMQ: 상세하고 체계적인 가이드


현대의 애플리케이션은 복잡하고 분산된 시스템으로 구성되어 있습니다. 이러한 시스템 간의 효율적인 통신을 위해 메시지 브로커가 필수적입니다. 그 중에서도 RabbitMQ는 오픈 소스 메시지 브로커로서 널리 사용되고 있으며, 다양한 프로토콜과 언어를 지원합니다.

RabbitMQ란 무엇인가?


RabbitMQ는 AMQP(Advanced Message Queuing Protocol)를 구현한 메시지 브로커입니다. 이는 애플리케이션, 시스템, 서비스 간의 메시지 전달을 중개하여 비동기 통신을 가능하게 합니다. RabbitMQ는 신뢰성 있는 메시징, 유연한 라우팅, 고가용성 등을 제공합니다.

RabbitMQ의 아키텍처


RabbitMQ

RabbitMQ는 클라이언트 애플리케이션과 서버로 구성됩니다. 클라이언트는 메시지를 발행하거나 소비하며, 서버는 이러한 메시지를 큐에 저장하고 관리합니다. 주요 구성 요소는 다음과 같습니다:

  • 프로듀서: 메시지를 생성하여 익스체인지에 발행합니다.
  • 컨슈머: 큐에서 메시지를 가져와 처리합니다.
  • 익스체인지: 프로듀서로부터 받은 메시지를 라우팅하여 적절한 큐로 보냅니다.
  • : 메시지를 저장하는 버퍼로, 컨슈머가 메시지를 가져갈 때까지 보관합니다.

핵심 개념


프로듀서와 컨슈머

  • 프로듀서(Producer): 메시지를 생성하고 발행하는 역할을 합니다.
  • 컨슈머(Consumer): 큐에서 메시지를 가져와 처리합니다.

메시지

메시지는 프로듀서가 생성하여 컨슈머에게 전달되는 데이터 단위입니다. 헤더와 바디로 구성되며, 헤더에는 메타데이터가, 바디에는 실제 데이터가 포함됩니다.

큐는 메시지를 저장하는 FIFO(First In, First Out) 구조입니다. 컨슈머는 큐에서 메시지를 가져와 처리합니다.

익스체인지

익스체인지는 프로듀서로부터 받은 메시지를 큐로 라우팅하는 역할을 합니다. 다양한 타입의 익스체인지가 있으며, 각기 다른 라우팅 로직을 제공합니다.

바인딩

바인딩은 익스체인지와 큐를 연결하는 관계입니다. 라우팅 키 등을 이용하여 메시지가 어떤 큐로 전달될지 결정합니다.

익스체인지 타입


Direct 익스체인지

라우팅 키가 정확히 일치하는 큐로 메시지를 전달합니다.

direct

728x90

Fanout 익스체인지

라우팅 키와 상관없이 바인딩된 모든 큐로 메시지를 브로드캐스트합니다.

fanout

Topic 익스체인지

라우팅 키의 패턴 매칭을 통해 메시지를 큐로 라우팅합니다. 와일드카드 문자를 사용하여 유연한 매칭이 가능합니다.

topic

Headers 익스체인지

메시지의 헤더 속성을 기반으로 라우팅합니다.

header

기본 사용법: 파이썬 


메시지 발행

프로듀서는 메시지를 익스체인지에 발행합니다.

import pika

connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.basic_publish(exchange='익스체인지_이름', routing_key='라우팅_키', body='메시지 내용')
connection.close()

메시지 소비

컨슈머는 큐에서 메시지를 가져와 처리합니다.

import pika

def callback(ch, method, properties, body):
    print("받은 메시지: %r" % body)

connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.basic_consume(queue='큐_이름', on_message_callback=callback, auto_ack=True)
channel.start_consuming()

베스트 프랙티스


  • 메시지 영속성: 메시지 유실을 방지하기 위해 메시지와 큐를 영속적으로 설정합니다.
  • 확인 메커니즘: 프로듀서와 컨슈머 모두에서 확인(ACK)을 사용하여 메시지 전달을 보장합니다.
  • 자원 모니터링: 연결 수, 채널 수, 메시지 크기 등을 모니터링하여 성능을 유지합니다.
  • 보안 업데이트: 정기적으로 RabbitMQ와 Erlang을 업데이트하여 보안 취약점을 해결합니다.
728x90