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