Celery 란
Celery는 파이썬에서 가장 많이 쓰이는 비동기 작업 큐 프레임워크이다. 시간이 오래 걸리는 작업을 백그라운드에서 따로 처리를 해주는 시스템이기에 python backend에서 자주 사용되는 프레임워크다.
특징
-
비동기 작업 처리
- 웹 요청과 분리해서 처리
- 사용자는 빠르게 응답을 받고, 작업은 백그라운드에서 수행
-
분산 시스템 구조
- 여러개의 Worker를 띄워 병렬 처리
- 여러 서버에 나눠서 실행할 수 있어 확장성이 뛰어남
-
다양한 브로커 지원
-
다양한 Result Backend 지원
- 작업 완료 여부를 확인 가능.
- 결과 저장이 필요할 때 백엔드 저장소 설정이 가능하다.
-
우수한 설정 유연성
- 재시도, 우선순위, 타임아웃, 예약 실행 등 다양한 제어가 가능
-
주기적 작업 스케줄링
- 정해진 시간이나 주기에 따라 작업 자동 실행 가능
cron
,interval
,solar
등 다양한 시간 표현 방식 지원
-
웹 프레임워크와 쉬운 통합
Django
,Flask
,FastAPI
등 대부분의 웹 프레임워크와 연동 가능
-
모니터링 도구 지원
- 작업 실행 상태, 실패, 지연 시간 등을 시각적으로 확인이 가능하다.
구성
구성요소 | 역할 |
---|---|
Web Server | 사용자 요청을 받고 작업을 Celery에 전달 |
Celery | 작업을 정의, 브로커에 전달 |
Broker | 작업 큐를 저장하는 중간 매개체 |
Worker | 작업을 백그라운드에서 처리하는 실행 엔진 |
Result Backend | 작업 결과를 저장하는 선택적 구성 요소 |
(Optional) Scheduler | 주기적인 작업 등록 |
동작 구조
graph LR A["Celery에 작업 요청"] B["작업 큐(Redis 등)에 저장"] C["워커(Worker)가<br/>백그라운드에서 실행"] 사용자 --> 웹서버 --> A --> B --> C
- 사용자가 Producer (웹서버) 에 요청
- Producer는 Celery에 작업을 요청
- Broker (큐) 는 Redis, RabbitMQ 등 요청된 작업을 임시 저장한다.
- Worker 는 대기 중 작업을 백그라운드에서 실행한다
- Result Backend (선택) 작업 결과 저장 (Redis, DB 등)
Celery 사용 예제
- 이메일 전송
- 이미지/영상 처리
- 주기적 작업 스케쥴링 (
celery beat
) - 대용량 크롤링/데이터 분석
사용 예시
# Celery 설정
from celery import Celery
app = Celery("task", broker="redis://~")
@app.task
def send_email(to):
print(f"sending email to {to}")
send_email.delay("user@example.com")
#비동기 실행