[python] Celery와 RabbitMQ를 함께 사용하는 방법은 어떻게 되는가?

Celery는 Python으로 작성된 분산 태스크 큐 시스템입니다. RabbitMQ는 AMQP(Advanced Message Queuing Protocol)를 구현한 오픈소스 메시지 브로커입니다. 이 두 가지 기술을 함께 사용하면 큰 규모의 작업을 처리하고 분산 시스템을 구축하는 데 도움이 됩니다.

Celery 설치

먼저, Celery를 설치해야 합니다. pip를 통해 쉽게 설치할 수 있습니다.

pip install celery

RabbitMQ 설치

RabbitMQ는 별도의 설치 과정이 필요합니다. 공식 홈페이지에서 다운로드하여 설치할 수 있습니다. 설치 후 RabbitMQ 서버를 실행해야 합니다.

Celery 설정

Celery를 사용하기 위해선 설정 파일을 작성해야 합니다. 일반적으로 config.py와 같은 이름으로 저장합니다.

# config.py

broker_url = 'amqp://guest:guest@localhost:5672//'  # RabbitMQ 연결 정보
result_backend = 'db+sqlite:///results.sqlite3'  # Celery 결과 저장소
task_serializer = 'json'
result_serializer = 'json'
accept_content = ['json']

위 예제에서는 RabbitMQ의 기본 로컬 호스트 주소를 사용하고 있습니다.

Celery 태스크 정의

Celery를 사용하여 태스크를 정의할 수 있습니다. 간단한 예제로 “add” 함수를 작성해보겠습니다.

# tasks.py

from celery import Celery

app = Celery('tasks', include=['tasks'])

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

Celery 실행

Celery는 별도의 워커 프로세스로 실행됩니다. 워커 프로세스는 RabbitMQ 서버와 통신하여 태스크 큐에 등록된 작업을 처리합니다.

터미널에서 다음 명령을 실행하여 Celery 워커를 실행합니다.

celery -A tasks worker --loglevel=info

-A 옵션은 Celery 어플리케이션을 지정하는 것이며, --loglevel 옵션은 로그 레벨을 설정하는 것입니다.

태스크 실행

태스크를 실행하기 위해 Python 스크립트를 작성할 수 있습니다.

# main.py

from tasks import add

result = add.delay(4, 6)  # 태스크를 큐에 등록
print(result.get())  # 태스크 결과 출력

위 예제에서 add.delay(4, 6)add 함수를 비동기로 실행하도록 큐에 등록하는 역할을 합니다. result.get()은 실행 결과를 가져오는 메서드입니다.

결론

이상으로, Celery와 RabbitMQ를 함께 사용하는 방법에 대해 알아보았습니다. Celery와 RabbitMQ를 통합하여 분산 작업을 처리하고 큰 규모의 시스템을 구축할 수 있습니다. 자세한 내용은 Celery와 RabbitMQ 공식 문서를 참조하시기 바랍니다.

References