Celery로 비동기 데이터베이스 작업 처리하기

소개

데이터베이스 작업은 일반적으로 시간이 오래 걸리거나 리소스 집약적일 수 있습니다. 이러한 작업을 동기적으로 처리하면 애플리케이션의 응답 시간이 길어지고 성능 저하가 발생할 수 있습니다. 그러므로 비동기 방식으로 데이터베이스 작업을 처리하는 것이 중요합니다.

Celery는 파이썬으로 작성된 분산 작업 큐입니다. 이를 사용하면 애플리케이션의 비동기 작업을 효율적으로 처리할 수 있습니다. 이번 블로그 포스트에서는 Celery를 사용하여 비동기 데이터베이스 작업을 처리하는 방법에 대해 알아보겠습니다.

Celery 설정

Celery를 사용하기 위해 먼저 Celery를 설치해야 합니다. 아래와 같이 명령어를 실행하여 Celery를 설치합니다.

pip install celery

Celery를 사용하려면 Celery 인스턴스를 생성하고 작업자(worker)를 실행해야 합니다. celery.py라는 파일을 생성하고 다음과 같이 작성합니다.

from celery import Celery

app = Celery('myapp', broker='redis://localhost')

@app.task
def process_database_task(task_id):
    # 비동기로 처리할 데이터베이스 작업을 수행합니다.
    # ... 작업 로직 ...
    return result

위 코드에서 broker 매개변수는 Celery 작업 큐를 관리하는 메시지 브로커의 주소를 지정합니다. 여기서는 Redis를 사용하고 있습니다.

비동기 작업 실행

이제 비동기 데이터베이스 작업을 실행하는 방법을 알아보겠습니다. 예를 들어, 데이터베이스 작업을 비동기로 실행하려면 다음과 같이 process_database_task 작업을 호출하면 됩니다.

from celery import current_app

task = current_app.send_task('myapp.process_database_task', args=[task_id])
# task_id는 데이터베이스 작업에 필요한 인자입니다.

위 코드에서 current_app.send_task 함수를 사용하여 process_database_task 작업을 호출하면 작업은 Celery 작업자(worker)에게 전달되고 비동기적으로 실행됩니다.

결과 가져오기

작업이 완료되면 작업의 결과를 가져올 수도 있습니다. AsyncResult 클래스를 사용하여 작업 결과를 확인할 수 있습니다. 예를 들어, 다음과 같이 작업의 결과를 가져올 수 있습니다.

result = task.result

AsyncResult 클래스를 사용하여 작업이 완료될 때까지 기다릴 수도 있습니다. 예를 들어, 다음과 같이 작업이 완료될 때까지 기다릴 수 있습니다.

result = task.get()

결론

Celery를 사용하면 데이터베이스 작업과 같은 비동기 작업을 효율적으로 처리할 수 있습니다. Celery를 사용하여 애플리케이션의 성능을 향상시키고 응답 시간을 단축해보세요.

더 많은 내용을 학습하고 싶다면 Celery 공식 문서를 참조해주세요.

#python #celery