본문 바로가기
Python/API

Celery 란 무엇인가?

by JONGSKY 2024. 4. 4.
728x90
SMALL

1. 글을 작성하게 된 계기

 

기존에 운영하던 환경이

fastapi-redis-celery 형태였으며

django에서도 동일하게 celery를 활용해서 배포하고 있다.

 

이번 기회에 이론적인 내용에 대해서 정리하고 한다.

 

2. Celery는 무엇인가?

 

Celery는 Python으로 작성된 분산 작업 대기열 시스템이다.

 

대규모 시스템에서 비동기 작업 실행과 작업 스케줄링을 용이하게 위해 설계되었다.

예를 들자면, 웹 서비스에서 응답시간은 생명과 같다. 빨리 응답해야 하는 웹 서비스에서 3초 이상 아니 1초 이상의 딜레이는

유저에게는 오류와 같으며 렉이라고 인지하게 된다.

그래서 이를 위해 비동기 작업을 처리할 수 있도록 넘기고 뒤에서 작동은 되게 하고 유저에게는 바로 응답하기 위해 사용된다.

 

즉, 백그라운드에서 시간이 많이 소요되는 작업을 효율적으로 처리할 수 있게되는 것이다.

 

3. Celery의 주요 구성 요소

 

https://medium.com/featurepreneur/introduction-to-asynchronous-task-queueing-celery-be5fac364350

 

  • Broker (메시지 브로커): Celery는 RabbitMQ, Redis, Amazon SQS와 같은 메시지 브로커를 사용해 작업 메시지를 큐에 보관함
    메시지 브로커는 클라이언트(작업을 요청하는 주체)와 워커(작업을 실행하는 주체) 사이에서 메시지를 전달하는 역할을 함
  • Worker: 워커는 실제로 작업을 실행하는 프로세스
    메시지 브로커로부터 작업 메시지를 수신하고 작업을 수행, 결과를 저장 또는 반환함
  • Task: Celery에서 실행되는 작업을 의미, 함수로 task를 정의할 수 있으며 task는 비동기적으로 실행될 수 있음
  • Result Backend: 작업의 결과를 저장하는 곳 (Redis, RabbitMQ, SQLAlchemy 등 다양한 저장소로 이용 가능)

 

4. Celery 동작 구조

 

https://muktar.tech/a-guide-to-using-celery-with-django-for-background-processing-fb14e6c4a299

 

 

웹 서비스(ex. Django, FastAPI)에서 발생한 Task(요청)를 Message Broker에서 받아 Celery를 이용해 분산처리 진행

단, 이때 Celery를 구동할 때 몇 개의 worker로 구동할지, Concurrency는 몇으로 해야 할지 등을 잘 고려해야 한다.

 

Celery를 구동할 때 고려해야할 worker와 Concurrency는 추후 별도의 게시글로 정리할 예정이다.

 

5. 결론

 

Celery를 잘 활용하면 web application에서 발생할 수 있는 여러 task들을 비동기적으로 Queue 처리가 가능해지게 한다.

728x90
LIST