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

Celery는 비동기 작업을 처리하기 위한 분산 작업 큐 시스템이고, Flask는 파이썬 기반의 웹 애플리케이션 프레임워크입니다. 이 두 기술을 함께 사용하면, Flask 애플리케이션에서 비동기적인 작업을 수행할 수 있습니다.

Celery와 Flask 설치하기

Celery와 Flask를 함께 사용하기 위해서는 먼저 두 라이브러리를 설치해야 합니다. 아래의 명령어를 사용하여 설치합니다.

pip install celery flask

Celery 작업 만들기

Celery에서 작업(Task)은 비동기적으로 실행되는 함수입니다. 먼저 Celery 작업을 정의하기 위해 작업 파일을 생성합니다.

# tasks.py

from celery import Celery

app = Celery('tasks', broker='redis://localhost:6379/0')

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

위의 코드에서 app = Celery('tasks', broker='redis://localhost:6379/0')는 Celery 객체를 생성하고 Redis를 메시지 브로커로 사용하도록 설정합니다. @app.task 데코레이터는 해당 함수가 Celery 작업으로 실행되도록 표시하는 역할을 합니다.

Flask 애플리케이션에 Celery 통합하기

이제 작성한 Celery 작업을 Flask 애플리케이션에 통합해 보겠습니다. Flask 애플리케이션에서 Celery 작업을 사용하기 위해 아래의 코드를 추가합니다.

# app.py

from flask import Flask
from tasks import add

app = Flask(__name__)

@app.route('/add/<int:x>/<int:y>')
def perform_addition(x, y):
    result = add.delay(x, y)
    return f"The result is: {result.get()}"

if __name__ == '__main__':
    app.run()

위의 코드에서 from tasks import add는 앞서 정의한 Celery 작업을 Flask 애플리케이션에 임포트합니다. /add/<int:x>/<int:y> URL에 대한 요청이 들어오면 perform_addition 함수가 실행되고, add.delay(x, y)를 통해 Celery 작업이 실행됩니다. 결과는 result.get()으로 얻을 수 있습니다.

Celery 워커 실행하기

Celery 워커는 Celery 작업을 처리하는 프로세스입니다. 아래의 명령어를 사용하여 Celery 워커를 실행합니다.

celery -A tasks worker --loglevel=info

위의 명령어를 실행하면 Celery 워커가 시작되고, Flask 애플리케이션에서 Celery 작업을 사용할 수 있게 됩니다.

이제 Flask 애플리케이션을 실행하고, /add/<int:x>/<int:y> URL에 요청을 보내면 Celery 워커가 비동기적으로 작업을 처리하고 결과를 반환합니다.

마무리

이제 Celery와 Flask를 함께 사용하는 방법에 대해 알아보았습니다. Celery를 사용하여 비동기 작업을 처리하면 Flask 애플리케이션의 응답 속도를 향상시킬 수 있습니다. Celery와 Flask를 함께 사용하여 좀 더 유연하고 확장 가능한 웹 애플리케이션을 개발해보세요.

참고 자료: