Celery 기초알아보기

Celery는 분산 작업 큐 시스템으로, 파이썬으로 작성된 대표적인 비동기 작업 처리 라이브러리입니다. Celery를 사용하면 애플리케이션에서 시간이 걸리는 작업을 비동기적으로 처리할 수 있으며, 작업을 백그라운드에서 실행하여 애플리케이션의 성능을 향상시킬 수 있습니다.

Celery의 주요 구성 요소

Celery는 크게 세 가지 주요 구성 요소로 구성되어 있습니다:

  1. 큐(Broker): Celery 작업을 수신하고 관리하는 메시지 브로커입니다. 일반적으로 RabbitMQ, Redis, Amazon SQS 등과 같은 메시지 브로커를 사용할 수 있습니다.

  2. 작업자(Worker): 작업을 수행하는 Celery의 실제 실행자입니다. 애플리케이션에서 비동기 작업을 처리하는 역할을 합니다.

  3. 결과 저장소(Result Backend): 작업의 결과를 저장하는 저장소입니다. 작업의 결과를 쉽게 추적하고 확인할 수 있도록 합니다. Redis, RabbitMQ, SQLAlchemy 등과 같은 저장소를 사용할 수 있습니다.

Celery의 동작 원리

  1. Celery 작업을 수행하고자 하는 코드를 작성합니다. 이 코드는 @task 데코레이터를 이용하여 Celery Task로 등록됩니다.

  2. 작업을 호출하면, Celery는 해당 작업을 메시지 브로커로 전송합니다.

  3. 메시지 브로커는 작업을 큐에 등록합니다.

  4. 작업자(Worker)가 큐에서 작업을 가져와 실행합니다.

  5. 작업이 성공적으로 완료되면 결과를 결과 저장소에 저장합니다.

Celery 사용 예시

다음은 Celery를 사용하여 비동기 작업을 처리하는 예시 코드입니다:

# celery.py 파일

from celery import Celery

app = Celery('myapp', broker='amqp://guest@localhost//', backend='redis://localhost')

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

위 코드는 add 라는 Celery 작업을 정의한 예시입니다. 이 작업은 주어진 두 수를 더한 결과를 반환합니다.

이렇게 작성된 코드를 실행하기 위해서는 Celery 실행자를 실행해야 합니다. 아래 명령어를 사용하여 실행할 수 있습니다:

$ celery -A celery worker --loglevel=info

이렇게 Celery를 실행하고 나면, Celery 작업을 호출하여 비동기적으로 실행할 수 있습니다:

# main.py 파일

from celery import current_app
from celery.result import AsyncResult

# 작업 실행
result = current_app.send_task('add', args=[4, 6])

# 작업 결과 확인
result.get()

위 코드에서 send_task 함수는 add 작업을 실행하고, get 메서드는 작업 결과를 동기적으로 가져오는 역할을 합니다.

마치며

Celery는 파이썬에서 비동기 작업을 처리할 때 꼭 필요한 라이브러리입니다. 이번 포스트에서는 Celery의 기초에 대해 알아보았는데, 더 자세한 내용은 Celery 공식 문서를 참고해보시기 바랍니다.

#TechBlog #Celery