FastAPI 애플리케이션에 Celery와 RabbitMQ를 결합하여 백그라운드 작업을 업그레이드하는 방법에 대해 다뤄보겠습니다. 대용량 이미지 처리나 데이터 분석처럼 시간이 오래 걸리는 작업을 효율적으로 관리하는 방법을 찾고 계신가요? 그렇다면 이 글이 딱 맞을 거예요!
Celery와 RabbitMQ란?
🟢 Celery: 강력한 비동기 작업 큐
Celery는 Python 기반의 비동기 작업 큐 시스템입니다. 쉽게 말해, **"이 작업을 백그라운드에서 처리해줘!"**라고 맡길 수 있는 도구죠. 예를 들어, 사용자가 웹사이트에서 이미지를 업로드했을 때, Celery가 백그라운드에서 크기 조정을 처리하도록 만들 수 있습니다.
특징:
작업을 작은 단위로 분리하여 워커(worker)가 실행
여러 개의 서버로 확장 가능
작업 실패 시 재시도 및 결과 저장 기능 제공
🔵 RabbitMQ: 메시지를 주고받는 중재자
Celery가 효율적으로 작동하려면 메시지를 전달할 브로커가 필요합니다. RabbitMQ는 작업 요청을 안전하게 큐(queue)에 저장하고, 워커가 이를 순차적으로 처리할 수 있도록 도와주는 역할을 합니다.
특징:
작업 요청을 잃어버리지 않도록 보장
웹 기반 관리 화면 제공(큐 상태 모니터링 가능)
서버가 갑자기 종료되더라도 메시지가 유지됨
반응형
왜 Celery와 RabbitMQ를 사용해야 할까?
현대 웹 애플리케이션에서 빠른 응답 시간은 필수입니다. 사용자가 "이미지 변환" 버튼을 눌렀을 때 10초 이상 기다린다면 불편하겠죠? 이런 무거운 작업을 백그라운드로 넘기고, 사용자에게 빠르게 응답할 수 있도록 Celery와 RabbitMQ를 활용합니다.
✅ Celery vs FastAPI의 기본 백그라운드 작업
FastAPI에도 백그라운드 작업을 처리하는 기능이 있지만, 몇 가지 한계가 있습니다:
FastAPI 백그라운드 작업은 API 서버에 종속되어 서버가 꺼지면 작업도 중단됨.
확장성 부족: 여러 서버에서 작업을 분산할 수 없음.
결과 저장 기능 없음: 실행된 작업의 결과를 저장할 수 없음.
반면, Celery는:
여러 개의 워커(worker)로 확장 가능
서버가 여러 대라도 분산 처리 가능
결과를 저장하고 나중에 확인 가능
RabbitMQ 설정하기
RabbitMQ를 쉽게 설치하려면 Docker를 사용하는 것이 편합니다. 먼저 RabbitMQ 컨테이너를 실행해볼까요?