Celery 작업이 실행된 후 백엔드에 저장되는 작업 결과는 장시간 남아 있을 경우 저장소 용량을 차지하고 성능에 영향을 미칠 수 있습니다. Django-celery-beat와 Celery는 이 문제를 해결하기 위해 각각의 방식으로 백엔드 데이터를 정리할 수 있는 옵션을 제공합니다. 이번 글에서는 `CELERY_TASK_RESULT_EXPIRES` 설정Django-celery-beat의 `celery.backend_cleanup` 태스크에 대해 알아보고, 두 설정의 사용 권장 사항을 설명하겠습니다.

1. CELERY_TASK_RESULT_EXPIRES: 작업 결과의 유효 기간을 설정하는 옵션

CELERY_TASK_RESULT_EXPIRES는 개별 작업의 결과가 백엔드에 얼마나 오래 남아 있을지를 초 단위로 설정하는 옵션입니다. 이 설정은 Celery 작업을 백엔드에 예약했을 때 TTL(Time-To-Live) 방식으로 동작하여, 작업 결과가 지정된 시간 이후 자동으로 삭제되도록 합니다.

  • 설정 예시:
    CELERY_TASK_RESULT_EXPIRES = 86400  # 24시간 (초 단위)
  • 이 설정을 통해 작업 결과가 24시간이 지나면 백엔드에서 자동으로 삭제됩니다. TTL 설정은 작업별 유효 기간을 조정하고자 할 때 유용하며, 백엔드에 불필요한 데이터가 축적되지 않도록 합니다.

2. Django-celery-beat의 celery.backend_cleanup: 주기적 클린업 태스크

Django-celery-beat를 사용하는 경우, celery.backend_cleanup 태스크가 백엔드에 쌓인 오래된 작업 결과를 주기적으로 정리합니다. 이 클린업 태스크는 기본적으로 하루에 한 번 실행되도록 예약되며, Django Admin에서 주기를 조정하여 더 자주 또는 덜 자주 실행하도록 설정할 수 있습니다. 주기적인 클린업 태스크는 TTL 설정이 없어도 자동으로 백엔드에 오래된 데이터가 쌓이는 것을 방지해 줍니다.

  • 주기 설정 예시: Django Admin에서 celery.backend_cleanup 주기를 조정해 실시간 데이터가 많다면 짧게, 그렇지 않다면 기본값(하루)로 유지할 수 있습니다.

3. 결론: 어떤 설정을 선택할까?

CELERY_TASK_RESULT_EXPIREScelery.backend_cleanup 설정은 서로 겹치는 기능을 하므로, 두 가지 중 하나만 사용해도 충분히 백엔드의 메모리 관리를 수행할 수 있습니다. 그러나 필요에 따라 두 설정을 모두 활성화할 수도 있습니다.

  • Django-celery-beat를 사용하는 경우: celery.backend_cleanup 태스크가 주기적으로 백엔드를 정리해주므로, 주로 이 클린업 태스크를 예약하고 TTL 설정은 하지 않아도 충분합니다.
  • 코드로 Celery 작업을 예약하는 경우: Django-celery-beat를 사용하지 않고 직접 작업 예약 코드를 작성한 경우라면 CELERY_TASK_RESULT_EXPIRES를 설정하여 TTL을 관리하는 것이 권장됩니다. 이렇게 하면 각 작업 결과가 설정된 시간 이후 자동으로 삭제되어 백엔드 메모리가 효율적으로 관리됩니다.

요약: Django-celery-beat의 클린업 태스크와 TTL 설정 중 하나만으로도 백엔드 관리가 가능하며, Django-celery-beat 사용자에게는 클린업 태스크 예약이 적합하고, 코드로 예약하는 경우에는 TTL 설정을 권장합니다. 두 설정을 병행하여 세부적인 데이터 관리를 추가할 수도 있습니다.

Timeline of TTL and cleanup task for Celery task result management