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 공식 문서를 참조하시기 바랍니다.