[Celery] Python - Celery란?

Song-YunMin·2020년 12월 12일
7

Celery

오늘은 Celery 에 대해서 알아볼 것이다.
파이썬은 사실 많이 사용해보지 않아서 다시 한번 문법을 되새기고 관련 기반 기술 등을 익히고자 한다.

Celery란?

CeleryPython 동시성 프로그래밍에서 가장 많이 사용하는 방법 중 하나이며, 분산 메시지 전달을 기반으로 동작하는 비동기 작업 큐(Asynchronous Task/Job Queue)이다.
이는 Python Framework 라고도 하지만 보통 Worker라고 불린다.
Worker는 웹 서비스에서 Back단의 작업을 처리하는 별도의 프레임이며, 사용자에게 즉각적인 반응을 보여줄 필요가 없는 작업들로 인해 사용자가 느끼는 Delay를 최소하 화기 위해 사용 된다.

예를 들어, 웹 서비스에서 응답 시간은 서비스의 생명과 직결되므로 비동기로 작업을 처리하게 넘기고 바로 응답을 하기 위해 사용 된다.

Celery는 메시지를 전달하는 역할(Publisher)과 메시지를 Message Broker에서 가져와 작업을 수행하는 Worker의 역할을 담당하게 된다.

왜 Celery 인가?

Django 등으로 API 서버를 개발하고 운영하면서 사용자 요청에 포함될 필요가 없는 불필요한 과정이나 매우 무거원 쿼리 실행을 포함하는 경우가 있다.
회원 가입 축하 이메일 발송, 주문 내역 엑셀 다운로드 등의 작업이 해당된다.

이 API에 포함된 외부 연동이나 무거운 작업들은 Celery Task로 정의해서 Broker(RabbitMQ)Consumer(Celery Worker) 를 이용해 Async하게 처리함으로 써 사용자에게 가능한 빠른 응답 결과를 제공할 수 있을 것이다.

Celery 동작 구조

Celery의 동작 구조이다. 웹 서비스(Django)에서 발생한 요청(Task)를 Message Broker에서 받아 Celery를 이용하여 분산 처리를 진행한다. Celery에서는 작업이 완료되는 (특정 이벤트)에 DB Task를 수행한다.

Message broker

Message broker는 송신자의 이전 메시지 프로토콜로부터의 메시지를 수신자의 이전 메시지 프로토콜로 변환하는 중간 모듈이다.
Kafka, ActiveMQ, OpenMessage Queue, RabbitMQ, Redis등이 여기에 해당된다.

참고 문헌

Celery를 이용한 분산처리 프로세스 작성하기
분산 비동기 작업 처리를 위한 Celery 첫걸음

profile
고독한 서버 개발 3년차

0개의 댓글