오늘은 Celery
에 대해서 알아볼 것이다.
파이썬은 사실 많이 사용해보지 않아서 다시 한번 문법을 되새기고 관련 기반 기술 등을 익히고자 한다.
Celery
는 Python
동시성 프로그래밍에서 가장 많이 사용하는 방법 중 하나이며, 분산 메시지 전달을 기반으로 동작하는 비동기 작업 큐(Asynchronous Task/Job Queue)이다.
이는 Python Framework
라고도 하지만 보통 Worker
라고 불린다.
Worker
는 웹 서비스에서 Back단의 작업을 처리하는 별도의 프레임이며, 사용자에게 즉각적인 반응을 보여줄 필요가 없는 작업들로 인해 사용자가 느끼는 Delay
를 최소하 화기 위해 사용 된다.
예를 들어, 웹 서비스에서 응답 시간은 서비스의 생명과 직결되므로 비동기로 작업을 처리하게 넘기고 바로 응답을 하기 위해 사용 된다.
Celery
는 메시지를 전달하는 역할(Publisher
)과 메시지를 Message Broker
에서 가져와 작업을 수행하는 Worker
의 역할을 담당하게 된다.
Django
등으로 API 서버를 개발하고 운영하면서 사용자 요청에 포함될 필요가 없는 불필요한 과정이나 매우 무거원 쿼리 실행을 포함하는 경우가 있다.
회원 가입 축하 이메일 발송
, 주문 내역 엑셀 다운로드
등의 작업이 해당된다.
이 API에 포함된 외부 연동이나 무거운 작업들은 Celery Task
로 정의해서 Broker(RabbitMQ)
와 Consumer(Celery Worker)
를 이용해 Async
하게 처리함으로 써 사용자에게 가능한 빠른 응답 결과를 제공할 수 있을 것이다.
Celery
의 동작 구조이다. 웹 서비스(Django)에서 발생한 요청(Task)를 Message Broker
에서 받아 Celery
를 이용하여 분산 처리를 진행한다. Celery
에서는 작업이 완료되는 (특정 이벤트)에 DB Task를 수행한다.
Message broker
는 송신자의 이전 메시지 프로토콜로부터의 메시지를 수신자의 이전 메시지 프로토콜로 변환하는 중간 모듈이다.
Kafka
, ActiveMQ
, OpenMessage Queue
, RabbitMQ
, Redis
등이 여기에 해당된다.