[파이썬] Flask의 비동기 처리와 Celery 연동

Flask는 Python 기반의 경량 웹 프레임워크로, 비동기 처리를 구현할 수 있는 다양한 방법을 제공합니다. 이번 블로그 포스트에서는 Flask에서 비동기 작업을 처리하기 위해 Celery를 사용하는 방법에 대해 알아보겠습니다.

1. Celery 소개

Celery는 분산 작업 큐 시스템으로, 비동기 작업을 처리하기 위한 분산 태스크 큐를 제공하는 도구입니다. Flask와의 연동을 통해 비동기 작업을 쉽게 처리할 수 있습니다. Celery는 다양한 백엔드(Broker)와 호환되며, 여러 워커를 사용하여 태스크를 처리할 수 있는 장점이 있습니다.

2. Celery 설치

Celery를 Flask와 함께 사용하기 위해서는 먼저 Celery를 설치해야 합니다. 아래의 명령어를 사용하여 설치할 수 있습니다.

pip install celery

3. Flask와 Celery 연동하기

Flask와 Celery를 연동하기 위해선 flask-celery 라이브러리를 사용할 수 있습니다. 아래의 명령어를 사용하여 설치할 수 있습니다.

pip install flask-celery

Flask와 Celery를 연동하기 위해선 설정 파일에 Celery 설정을 추가해야 합니다. Flask의 인스턴스와 Celery의 인스턴스를 생성하고, Flask 애플리케이션과 Celery를 연결합니다.

from flask import Flask
from celery import Celery

app = Flask(__name__)

# Flask 애플리케이션과 Celery를 연결합니다.
app.config['CELERY_BROKER_URL'] = 'redis://localhost:6379/0'
app.config['CELERY_RESULT_BACKEND'] = 'redis://localhost:6379/0'

# Celery 인스턴스 생성
celery = Celery(app.name, broker=app.config['CELERY_BROKER_URL'])
celery.conf.update(app.config)

# 태스크 정의
@celery.task
def add(x, y):
    return x + y

# Flask 애플리케이션 실행
if __name__ == "__main__":
    app.run()

위의 코드에서는 Redis를 사용하여 Celery의 Broker로 설정하였습니다. 필요에 따라 다른 Broker를 사용할 수 있습니다.

4. 비동기 작업 실행하기

Celery를 사용하여 비동기 작업을 실행하는 방법은 다양합니다. 가장 간단한 방법은 delay() 메서드를 사용하여 작업을 호출하는 것입니다.

from app import add

result = add.delay(10, 20)
print(result.get())

위의 예제에서는 add 함수를 비동기로 실행하고, 결과를 출력하는 방법을 보여줍니다. delay() 메서드는 태스크를 비동기로 실행하고, get() 메서드를 사용하여 결과를 얻을 수 있습니다.

5. Celery 워커 실행하기

Celery는 워커 프로세스를 실행하여 태스크를 처리합니다. 다음 명령어로 Celery 워커를 실행할 수 있습니다.

celery -A app.celery worker --loglevel=info

위의 예제에서는 app.celery 모듈에서 Celery 애플리케이션을 로드하고, worker 명령을 사용하여 워커를 실행합니다. --loglevel 옵션을 사용하여 로깅 수준을 지정할 수 있습니다.

6. 결론

이번 블로그 포스트에서는 Flask에서 비동기 작업을 처리하기 위해 Celery를 사용하는 방법에 대해 알아보았습니다. Celery를 사용하면 Flask 애플리케이션에서 비동기 작업을 쉽게 처리할 수 있으며, 더 나은 확장성과 성능을 제공할 수 있습니다.

Celery의 자세한 사용법에 대해서는 공식 문서를 참고하시기 바랍니다.