[python] Django REST framework에서의 작업 스케줄링 방법

Django REST framework은 웹 API 개발을 위한 강력한 도구입니다. 하지만 때로는 일부 작업을 주기적으로 실행해야 할 때가 있습니다. 이를 위해 Django에서 제공하는 작업 스케줄링 라이브러리를 사용할 수 있습니다.

Celery와 함께 사용하기

Celery는 분산 작업 큐를 구현하는 데 사용되는 라이브러리입니다. 그리고 Django와 잘 통합됩니다. Celery를 사용하여 Django REST framework에서 작업 스케줄링을 구현하는 방법을 알아보겠습니다.

Celery 설치

먼저, Celery를 설치해야 합니다. 다음 명령을 사용하여 Celery를 설치합니다:

pip install celery

Celery 설정

Celery를 Django 프로젝트에 설정해야 합니다. settings.py 파일을 열고 다음과 같이 Celery 관련 설정을 추가합니다:

# settings.py

# Celery settings
CELERY_BROKER_URL = 'redis://localhost:6379/0'  # Redis broker URL
CELERY_RESULT_BACKEND = 'redis://'  # Redis backend URL

# Task configuration
CELERY_BEAT_SCHEDULE = {
    'task-name': {
        'task': 'myapp.tasks.my_task_function',
        'schedule': crontab(minute='*/15'),  # Run every 15 minutes
        # Additional options...
    },
}

위의 예제에서는 Redis를 사용하여 Celery 브로커 및 결과 백엔드를 구성하였습니다. CELERY_BEAT_SCHEDULE은 작업 스케줄을 정의하는 딕셔너리입니다. task-name은 원하는 작업 이름, myapp.tasks.my_task_function은 실행하려는 작업 함수의 경로입니다. schedule은 작업이 실행되는 시간을 지정합니다.

작업 함수 작성

스케줄링하려는 작업 함수를 작성해야 합니다. myapp 디렉토리에 tasks.py 파일을 만들고 다음과 같이 작업 함수를 정의합니다:

# tasks.py

from celery import shared_task

@shared_task
def my_task_function():
    # 작업 수행
    ...

위의 예에서는 @shared_task 데코레이터를 사용하여 작업 함수를 Celery 작업으로 등록합니다. 작업 함수 내에서 실제 작업을 수행합니다.

Celery worker 실행

마지막으로, Celery worker를 실행해야 합니다. 다음 명령을 사용하여 worker를 실행합니다:

celery -A myapp worker --loglevel=info

위의 명령에서 myapp은 Django 프로젝트의 이름입니다. --loglevel 옵션을 사용하여 로그 레벨을 지정할 수 있습니다.

작업 스케줄링 테스트

이제 작업 스케줄링이 제대로 작동하는지 확인해보겠습니다. Django 서버를 실행하고, 스케줄링된 작업이 주기적으로 실행되는지 확인하세요.

참고 자료