Django-Q를 활용한 비동기 작업 큐 구축 및 Redis·MongoDB 브로커 설정 가이드

Django-Q는 Django 환경에서 멀티 프로세싱을 지원하는 강력한 분산 작업 큐 라이브러리입니다. 복잡한 비동기 작업이나 주기적으로 실행해야 하는 스케줄링 태스크를 처리할 때 유용하며, 다양한 메시지 브로커와 원활하게 통합됩니다. 이 가이드에서는 Django-Q의 설치 방법과 주요 메시지 브로커별 설정 구성에 대해 자세히 설명합니다.

Django-Q의 주요 특징

  • 간편한 통합: Django의 설정 파일(settings.py)에서 직접 구동 환경을 관리할 수 있습니다.
  • 다양한 브로커 지원: Redis, MongoDB는 물론 Amazon SQS, IronMQ 등 여러 메시지 브로커를 선택할 수 있습니다.
  • 강력한 스케줄링: 단순 비동기 처리를 넘어 특정 시간에 작업을 실행하거나 반복 주기를 설정하는 기능이 내장되어 있습니다.
  • 작업 모니터링: Django 관리자 페이지를 통해 작업의 성공, 실패 여부 및 상태를 직관적으로 확인할 수 있습니다.

기본 설치 및 초기 설정

먼저 pip를 사용하여 Django-Q 패키지를 설치합니다.

pip install django-q

설치가 완료되면 Django 프로젝트의 settings.py 파일 내 INSTALLED_APPS 항목에 django_q를 추가합니다.

# settings.py
INSTALLED_APPS = [
    # ... 기존 앱들
    'django_q',
]

이후 데이터베이스 스키마를 반영하기 위해 마이그레이션을 실행합니다.

python manage.py migrate

메시지 브로커 구성 가이드

사용 환경에 따라 적합한 메시지 브로커를 선택하여 Q_CLUSTER 설정을 구성할 수 있습니다.

1. Redis 브로커 설정 (권장)

Redis는 높은 성능과 안정성으로 인해 Django-Q에서 가장 선호되는 브로커입니다. 먼저 Redis 클라이언트를 설치해야 합니다.

pip install redis
# settings.py
Q_CLUSTER = {
    'name': 'project_task_cluster',
    'workers': 8,
    'recycle': 500,
    'timeout': 100,
    'retry': 150,
    'broker': 'django_q.brokers.redis_broker.Redis',
    'redis': {
        'host': '127.0.0.1',
        'port': 6379,
        'db': 0,
        'password': None,
    }
}

2. MongoDB 브로커 설정

NoSQL 데이터베이스인 MongoDB를 브로커로 사용하여 영속성 있는 메시지 큐를 운영할 수 있습니다.

pip install pymongo
# settings.py
Q_CLUSTER = {
    'name': 'mongodb_backend_cluster',
    'workers': 4,
    'timeout': 60,
    'broker': 'django_q.brokers.mongo.Mongo',
    'mongo': {
        'host': 'localhost',
        'port': 27017,
        'db': 'task_queue_db',
        'collection': 'scheduled_tasks',
    }
}

3. Django ORM 브로커 설정

별도의 외부 브로커 서버를 운영하기 어려운 소규모 프로젝트라면 Django의 기본 데이터베이스를 큐로 사용할 수 있습니다.

# settings.py
Q_CLUSTER = {
    'name': 'orm_internal_cluster',
    'workers': 2,
    'orm': 'default',
    'broker': 'django_q.brokers.orm.ORM',
}

클러스터 실행 및 상태 확인

모든 설정이 완료되었다면 다음 명령어를 통해 백그라운드 작업을 처리할 클러스터를 가동합니다.

python manage.py qcluster

실행 중인 클러스터의 통계 정보나 상태를 확인하려면 아래 명령어를 사용합니다.

python manage.py qinfo

운영 시 고려 사항

시스템 최적화를 위해 다음 사항을 점검하는 것이 좋습니다.

  • 워커(Worker) 수 조정: 서버의 CPU 코어 수와 작업 부하에 맞춰 워커 프로세스 개수를 최적화하세요.
  • 제한 시간 설정: 작업이 무한 루프에 빠지는 것을 방지하기 위해 timeout 값을 적절히 지정해야 합니다.
  • 메모리 관리: 장기간 실행되는 워커의 메모리 누수를 방지하려면 recycle 옵션을 활용하여 주기적으로 프로세스를 재시작하십시오.

태그: django-q Django Redis MongoDB message-broker

7월 26일 15:49에 게시됨