Celery와 RabbitMQ를 연동하여 비동기 메시지 전송

소개

Celery는 Python에서 비동기 작업을 처리하기 위한 분산 작업 큐 시스템입니다. RabbitMQ는 메시지 브로커로서 Celery와 함께 사용되어 메시지를 안전하고 효율적으로 전송하는 데 사용됩니다. 이 블로그 포스트에서는 Celery와 RabbitMQ를 연동하여 비동기 메시지 전송을 구현하는 방법에 대해 알아보겠습니다.

Celery 설치하기

Celery를 사용하기 위해서는 먼저 Celery 패키지를 설치해야 합니다. 아래의 명령을 사용하여 Celery를 설치합니다.

pip install Celery

RabbitMQ 설치하기

RabbitMQ 설치는 간단합니다. 운영체제에 맞는 RabbitMQ 패키지를 다운로드하고 설치합니다. RabbitMQ를 설치한 후에는 RabbitMQ 서버가 실행 중인지 확인해야 합니다.

Celery와 RabbitMQ 연동하기

Celery와 RabbitMQ를 연동하기 위해 Celery 설정 파일에 RabbitMQ 서버의 정보를 추가해야 합니다. Celery 설정 파일은 Python 파일 형식이며, 환경변수로 설정할 수 있습니다.

# celeryconfig.py

BROKER_URL = 'amqp://guest:guest@localhost:5672//'
CELERY_RESULT_BACKEND = 'rpc://'

위의 예시에서는 amqp://guest:guest@localhost:5672//와 같이 RabbitMQ 서버에 대한 접속 정보를 설정하였습니다. 이 정보는 RabbitMQ 서버의 주소, 사용자 이름과 비밀번호, 포트 번호 등을 포함하고 있습니다.

비동기 작업 정의하기

Celery를 사용하여 비동기 작업을 정의하려면 @task 데코레이터를 사용해야 합니다. 아래의 예시는 add라는 함수를 비동기 작업으로 정의한 예시입니다.

# tasks.py

from celery import Celery

app = Celery('tasks', broker='pyamqp://guest@localhost//')

@app.task
def add(x, y):
    return x + y

위의 예시에서는 Celery 객체를 생성하고, @app.task 데코레이터를 사용하여 add 함수를 비동기 작업으로 정의합니다.

비동기 작업 실행하기

비동기 작업을 실행하기 위해서는 delay 메소드를 사용하여 작업을 큐에 추가합니다. 아래의 예시는 add 작업을 큐에 추가하고 결과를 출력하는 예시입니다.

# main.py

from tasks import add

result = add.delay(4, 5)
print(result.get())

위의 예시에서는 add.delay(4, 5)와 같이 delay 메소드를 사용하여 add 작업을 큐에 추가합니다. result.get()을 호출하여 작업의 결과를 가져옵니다.

결론

이 블로그 포스트에서는 Celery와 RabbitMQ를 연동하여 비동기 메시지 전송을 구현하는 방법에 대해 알아보았습니다. Celery와 RabbitMQ를 사용하면 Python에서 간편하게 비동기 작업을 처리할 수 있으며, 메시지 전송을 안전하고 효율적으로 할 수 있습니다.

더 자세한 정보는 Celery 문서RabbitMQ 문서를 참조하시기 바랍니다.

#python #Celery #RabbitMQ