무거운 작업은 비동기로! Celery와 Redis 연동하기
웹 애플리케이션에서 이메일 발송, 데이터 분석, 파일 처리 등 시간이 오래 걸리는 작업을 비동기로 처리하여 사용자 경험과 서버 성능을 향상시키는 방법
왜 비동기 처리가 필요한가
동기 처리의 문제점
작업이 끝날 때까지 사용자 대기 시간 증가
여러 사용자가 동시에 무거운 요청을 보낼 때 서버 병목 발생
타임아웃으로 인한 요청 실패 가능성
비동기 처리의 장점
즉각적인 응답으로 향상된 사용자 경험
웹 서버 자원의 효율적 사용
작업 실패가 전체 서비스에 미치는 영향 최소화
Celery와 Redis 아키텍처
핵심 구성 요소
Task Queue: 처리할 작업들의 대기열
Message Broker (Redis): 작업 메시지를 전달하는 중간 관리자
Celery Worker: 작업을 실행하는 백그라운드 프로세스
Django 프로젝트 연동 설정
라이브러리 설치
Celery 설정 파일 생성 (myproject/celery.py)
프로젝트 초기화 (myproject/init.py)
Django 설정 (settings.py)
비동기 작업 생성 및 실행
작업 정의 (users/tasks.py)
View에서 작업 호출
Celery 실행 및 모니터링
워커 실행
Flower 모니터링 도구
실무 팁
멱등성 유지
작업이 여러 번 실행되어도 같은 결과가 나오도록 설계
작업 분리
하나의 작업은 작고 빠르게, 큰 작업은 여러 개로 분리
우선순위 큐 활용
긴급한 작업과 배치 작업을 별도 큐로 분리
에러 처리
재시도 로직과 Dead Letter Queue 구성으로 안정성 확보
Last updated
