ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [개념 정리] Celery란 무엇인가?
    django 2022. 2. 14. 19:52

    # 동기 vs 비동기

      - 동기 : 요청과 그 결과가 동시에 일어난다. 요청을 보낸 후 응답(=결과)를 받아야지만 다음 동작이 이루어지는 방식

      - 비동기 : 요청과 그 결과가 동시에 일어나지 않는다. 요청을 보낸 후 응답를 받지 않아도 다음 동작을 할 수 있음


    # Celery란?

     : Celery는 비동기적으로 작업을 처리하고 응답을 하게 해주는 파이썬 프레임워크이다. Django로 API 서버를 개발하고 운영하면서 사용자 요청에 포함될 필요가 없는 불필요한 과정이나 매우 무거운 쿼리 실행을 포함하는 경우가 있다.
    예를 들어 회원 가입 축하 이메일 발송, 어드민 주문내역 엑셀 다운로드 같은 기능이 이에 해당된다. 회원가입 축하 이메일 발송은 사실 고객(client)에게 중요한 부분이 아니다. 고객은 일단 가입을 하고 서비스를 이용하기를 원할 것이다. 
    이렇듯 API 에 포함된 외부 연동이나 무거운 작업들은 Celery Task로 정의해서 브로커(RabbitMQ)와 컨슈머(Celery Worker)를 이용해 비동기로 처리함으로써 사용자에게 가능한 빠른 응답 결과를 제공할 수 있다.


    # Celery 동작 구조

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

     

    # Broker와 Workers

     : Celery는 안 보이는 곳에서 열심히 일하는 백그라운드 일꾼 (workers)이다. 처리해야 할 일들은 Queue에 쌓이는데, 큐에 쌓인 일을 일꾼들이 가져다가 열심히 일을 한다. 파이썬 언어로 작성되어 있다. Celery는 메시지로 작업(Task)을 주고받는 시스템이기 때문에 중간에 브로커(Broker) 역할을 하는 분리된 중계 시스템이 필요하다. 브로커가 작업 메시지를 전달받은 대기열(Queue)에 보관해두면 적절한 작업자(Worker)가 메시지를 가져가서 작업(Job)을 수행하게 된다. Message Broker에는 Kafka, ActiveMQ, OpenMessage Queue, RabbitMQ, Redis 등이 있다.


    # Celery Beat?

     : Celery는 파이썬으로 작성된 분산 작업 큐이다. 이 큐에 작업들을 넣어 놓으면 순차적으로 백그라운드에서 작업이 수행된다. 사용자의 요청이 시간이 오래 걸리는 경우나 다른 시스템과 연동되어 그 시스템에서 응답이 올 때까지 대기해야 되는 경우에 주로 사용하게 된다. 이 외에도 주기적으로 어떤 통계를 도출해 낸단더지, 회원들에게 메일을 보내거나 하는 배치(일괄 처리) 작업이 필요한 경우가 종종 생기는데 이때 Celery를 이용할 수 있다. 작업 큐에 주기적으로 필요한 작업들을 넣어주면 되는데 이 역할을 하는것이 Celery에 포함된 beat라는 녀석이다. 한마디로 Celery beat는 작업 스케쥴러이다. 자세한 사용법은 추후에 다뤄볼 예정이다.


    참조

    https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=c_ist82&logNo=220777624611 

    https://velog.io/@sms8377/Celery-Python-Celery%EB%9E%80

    https://whatisthenext.tistory.com/127

    https://wangin9.tistory.com/entry/celery

    https://wangin9.tistory.com/entry/celery

Designed by Tistory.