[파이썬] Tornado에서의 메세지 브로커 연동

Tornado는 Python으로 작성된 웹 프레임워크로, 비동기식 네트워크 애플리케이션을 구축하는 데 사용됩니다. 이것은 높은 처리량과 확장성을 제공하며, 웹 소켓, 롱 폴링 및 SSE(Server Sent Events)와 같은 실시간 통신을 지원합니다.

메세지 브로커(Message Broker)는 분산 시스템 간에 메세지를 전송하고 처리하는 데 사용되는 중간 소프트웨어입니다. 메세지 브로커를 사용하면 애플리케이션에서 비동기 메세지를 보내고 받을 수 있으며, 이는 애플리케이션의 속도와 확장성을 향상시킬 수 있습니다.

이 글에서는 Tornado와 RabbitMQ를 사용하여 메세지 브로커와의 연동을 구현하는 방법을 알아보겠습니다.

RabbitMQ 설치

RabbitMQ는 Tornado와의 연동에 가장 일반적으로 사용되는 메세지 브로커입니다. RabbitMQ를 사용하기 위해서는 우선 RabbitMQ를 설치해야 합니다. 설치 방법은 해당 운영 체제에 따라 다를 수 있으므로, RabbitMQ 공식 문서를 참조하시기 바랍니다.

Tornado에서 RabbitMQ 연동하기

Tornado에서 RabbitMQ와 통신하기 위해 Pika라는 RabbitMQ 클라이언트 라이브러리를 사용합니다. Pika를 사용하여 RabbitMQ에 연결하고, 메세지를 발행하고 소비하는 간단한 예제를 살펴보겠습니다.

import pika
import tornado.ioloop
import tornado.web

# RabbitMQ 연결 설정
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.queue_declare(queue='my_queue')

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.publish_message()

    def publish_message(self):
        # RabbitMQ에 메세지 발행
        channel.basic_publish(exchange='', routing_key='my_queue', body='Hello, World!')
        print(" [x] Sent 'Hello, World!'")

def make_app():
    return tornado.web.Application([(r"/", MainHandler),])

if __name__ == "__main__":
    app = make_app()
    app.listen(8888)
    tornado.ioloop.IOLoop.current().start()

위의 코드에서는 RabbitMQ에 연결하고, ‘my_queue’라는 큐를 선언한 후, HTTP GET 요청이 오면 ‘Hello, World!’라는 메세지를 발행하도록 구현되어 있습니다.

메세지 소비하기

이어서, RabbitMQ에서 메세지를 소비하는 방법을 알아보겠습니다.

import pika

# RabbitMQ 연결 설정
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.queue_declare(queue='my_queue')

def callback(ch, method, properties, body):
    print(" [x] Received %r" % body)

# RabbitMQ에서 메세지 소비
channel.basic_consume(queue='my_queue', on_message_callback=callback, auto_ack=True)

print(' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming()

위의 코드는 RabbitMQ의 ‘my_queue’에서 메세지를 받아올 콜백 함수를 정의하고, 소비를 시작하는 부분입니다.

마무리

이제 Tornado와 RabbitMQ를 사용하여 메세지 브로커와의 연동을 구현하는 방법을 알게 되었습니다. RabbitMQ에 대한 더 자세한 내용과 다른 메세지 브로커와의 연동 방법에 대해서도 학습해보시기 바랍니다. 메세지 브로커를 효과적으로 활용하면 애플리케이션의 성능과 탄력성을 크게 향상시킬 수 있습니다.