일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 결제서비스
- 백준
- 이분탐색
- 레디스 동시성
- 코드 계약
- jwt 표준
- BFS
- 트랜잭샨
- gRPC
- 알람 시스템
- 카카오
- 누적합
- 좋은 코드 나쁜 코드
- 구현
- 디버깅
- 수신자 대상 다르게
- 숫자 블록
- branch 전략
- AWS
- spring event
- 객체지향패러다임
- 검색어 추천
- 쿠키
- piplining
- 프로그래머스
- 완전탐색
- 깊게 생각해보기
- docker
- 셀러리
- prg 패턴
- Today
- Total
코딩관계론
Celery필요성과 개념 본문
비동기 처리의 개념과 필요성
비동기 처리는 순차적으로 처리하는 것이 아니라, 요청이 발생한 순서와 상관 없이 결과를 반환하는 방식을 말합니다.
예를 들어, 웹 어플리케이션에서 사용자의 요청에 대한 처리가 비동기적으로 이루어지면, 서버는 해당 요청을 받은 후 다른 작업을 수행하다가 해당 요청이 완료되면 그 결과를 반환하는 방식으로 동작합니다. 이를 통해 서버의 자원을 효율적으로 사용할 수 있고, 사용자에게 더 빠른 응답이 가능해집니다.
비동기 처리의 필요성은 크게 두 가지로 볼 수 있습니다. 첫째, 대규모 트래픽이 발생하는 웹 서비스에서는 많은 요청이 동시에 발생할 수 있습니다. 이 경우 요청을 순차적으로 처리하면 응답 시간이 길어질 수 있습니다. 따라서 비동기 처리를 통해 대량의 요청을 빠르게 처리할 수 있습니다. 둘째, I/O 작업이 많은 서비스에서는 I/O 작업이 완료되기 전까지 CPU 자원이 대기해야 합니다. 이러한 상황에서는 I/O 작업이 완료될 때까지 다른 작업을 수행할 수 있는 비동기 처리가 필요합니다.
셀러리(Celery) 소개 및 구성 요소
셀러리는 파이썬에서 비동기 작업을 지원하는 프레임워크입니다. 셀러리는 메시지 브로커(Message Broker), 워커(Worker), 스케줄러(Scheduler)로 구성되어 있습니다.
메시지 브로커(Message Broker)는 셀러리의 핵심 요소 중 하나로, 작업을 등록하고 실행할 때 사용됩니다. 메시지 브로커는 작업 큐와 워커 사이에서 중개자 역할을 하며, 작업 실행을 위해 필요한 정보를 저장하고 관리합니다.
워커(Worker)는 큐에서 작업을 가져와 실행하고, 실행 결과를 메시지 브로커에게 반환합니다. 이 때, 여러 대의 워커가 하나의 큐를 공유할 수 있으며, 작업이 처리되는 속도를 높일 수 있습니다.
스케줄러(Scheduler)는 정해진 시간마다 작업을 실행시킬 수 있으며, 이를 통해 반복적으로 수행되는 작업을 자동화할 수 있습니다
메시지 브로커(Message Broker)의 역활 및 종류
메시지 브로커(Message Broker)는 셀러리에서 작업을 등록하고 실행할 때 사용되는 중심 컴포넌트입니다. 작업을 처리하는 워커(Worker)와 작업을 등록하고 관리하는 클라이언트 애플리케이션 간의 중개자 역할을 합니다.
메시지 브로커는 분산 시스템에서 동작하는 메시지 큐(Message Queue)를 구현한 서버입니다. 메시지 큐는 작업을 처리할 때 필요한 정보들을 담은 작업 메시지를 보관하고, 이를 다른 컴포넌트에게 전달해주는 역할을 합니다.
메시지 브로커에는 다양한 종류가 있습니다. 대표적인 예로 RabbitMQ, Apache Kafka, Redis 등이 있습니다. 이들 메시지 브로커는 각각의 특징을 가지고 있으며, 선택하는 브로커는 사용자의 요구 사항과 시스템 구성 등에 따라 달라질 수 있습니다.
RabbitMQ는 AMQP(Advanced Message Queuing Protocol)라는 메시지 프로토콜을 사용하며, 안정성과 확장성이 높습니다. Apache Kafka는 대용량 데이터 처리를 위한 메시지 시스템으로 유명하며, 높은 처리량과 지속적인 데이터 스트림 처리를 지원합니다. Redis는 기본적으로 인 메모리 데이터 스토어로 사용되지만, 메시지 브로커로서의 역할도 수행할 수 있습니다.
셀러리에서는 이러한 메시지 브로커들을 지원하며, 사용자가 선택한 메시지 브로커와 연결하여 비동기 작업을 처리합니다. 메시지 브로커를 적절히 선택하고 설정하여 셀러리를 활용하면, 대용량 처리를 비롯한 다양한 비동기 작업을 효율적으로 처리할 수 있습니다.
메시지 브로커(Message Broker)의 주요 기능
- 작업 큐(Queue) 관리: 메시지 브로커는 작업을 실행하기 전에 큐에 등록합니다. 이를 통해 실행할 작업을 관리하고, 작업 실행 순서를 정할 수 있습니다.
- 작업 상태 추적: 메시지 브로커는 작업의 실행 상태를 추적합니다. 이를 통해 어떤 작업이 실행되었는지, 작업이 어디까지 진행되었는지 등의 정보를 확인할 수 있습니다.
- 분산 처리(Distributed Processing): 메시지 브로커는 분산 환경에서 작업을 처리하는 데 사용됩니다. 여러 대의 워커가 작업을 처리할 때, 메시지 브로커가 작업을 분산시켜 처리하므로, 작업 처리 속도가 빨라집니다.
- 작업 복구: 메시지 브로커는 작업 실행 중에 예기치 않은 오류가 발생했을 때, 이를 복구합니다. 예를 들어, 작업 실행 도중 워커가 다운될 경우, 메시지 브로커는 해당 작업을 다른 워커에게 할당하여 작업을 계속 진행할 수 있습니다.
- 메시지 보관: 메시지 브로커는 처리할 작업을 보관합니다. 이를 통해, 처리하지 못한 작업을 나중에 다시 처리할 수 있으며, 빠른 응답 시간을 유지할 수 있습니다.
워커(Worker)의 역활 및 종류
워커(Worker)는 Celery에서 비동기 작업을 처리하는 역할을 합니다. 셀러리에서는 큐(Queue)에 등록된 작업들을 워커가 가져와서 실행하며, 실행 결과를 다시 메시지 브로커에 반환합니다.
Celery에서는 다양한 종류의 워커를 제공합니다. 주요 워커 종류는 다음과 같습니다.
- 기본 워커(Default Worker): 기본 워커는 Python에서 제공하는 multiprocessing 모듈을 사용하여 프로세스(Process)를 생성합니다. 따라서 여러 개의 작업을 동시에 처리할 수 있으며, 각각의 작업을 별도의 프로세스에서 실행합니다.
- 이벤트 워커(Eventlet Worker): 이벤트 워커는 Greenlet을 사용하여 이벤트 기반(event-based) 비동기 처리를 지원합니다. 이벤트 워커는 여러 개의 작업을 동시에 처리할 수 있으며, 각각의 작업을 동일한 Greenlet 내에서 실행합니다.
- 조합 워커(Combining Worker): 조합 워커는 여러 개의 기본 워커를 조합하여 사용할 수 있습니다. 조합 워커는 다수의 프로세스를 생성하여 여러 작업을 동시에 처리할 수 있습니다.
- 코루틴 워커(Coroutine Worker): 코루틴 워커는 이벤트 워커와 비슷한 방식으로 동작하며, asyncio 모듈을 사용하여 코루틴(Coroutine)을 지원합니다. 코루틴 워커는 비동기 처리 시 CPU와 메모리 자원을 효율적으로 사용할 수 있습니다.
- 스레드 워커(Thread Worker): 스레드 워커는 threading 모듈을 사용하여 스레드(Thread)를 생성하여 작업을 처리합니다. 스레드 워커는 기본 워커와 유사하게 동작하지만, 스레드를 사용하므로 여러 작업을 동시에 처리할 때 CPU와 메모리 자원의 소비가 더 적습니다.
각각의 워커 종류는 특정한 작업 환경에 적합하게 동작하도록 설계되어 있으며, 사용하는 작업 환경에 따라 적절한 워커를 선택하여 사용하는 것이 중요합니다.
워커(Worker)의 주요 기능
- 작업 수행: 큐에서 작업을 가져와 실행합니다. 작업은 파이썬 함수 또는 메서드일 수 있습니다. 작업은 완료될 때까지 워커는 다른 작업을 처리하지 않습니다.
- 결과 반환: 작업이 완료되면, 작업의 반환 값을 메시지 브로커에게 반환합니다. 반환 값은 다른 작업에서 사용할 수 있습니다.
- 예외 처리: 작업 실행 중 예외가 발생하면, 예외를 적절하게 처리합니다. 예외 처리는 다음과 같은 방식으로 이루어질 수 있습니다.
- 작업 상태 확인: 워커는 현재 처리 중인 작업의 상태를 확인할 수 있습니다. 이를 통해 현재 처리 중인 작업의 진행 상황을 모니터링할 수 있습니다.
- 다양한 워커 구현: 셀러리는 다양한 워커를 지원합니다. 이를 통해 다양한 작업 환경에서 셀러리를 사용할 수 있습니다. 각 워커는 다른 작업 처리 속도와 성능 특성을 가지므로, 적절한 워커를 선택하는 것이 중요합니다.
스케줄러(Scheduler)의 역활 및 종류
스케줄러(Scheduler)는 지정된 일정에 따라 작업을 실행하도록 예약해주는 도구입니다. 스케줄러는 주기적으로 실행되는 작업, 일회성 작업, 특정 시간에 실행되는 작업 등 다양한 작업을 지원합니다.
스케줄러의 주요 역할은 다음과 같습니다.
- 작업 예약: 스케줄러를 사용하면 특정 시간에 실행될 작업을 예약할 수 있습니다. 이를 통해 일괄적으로 작업을 실행하거나, 반복적으로 수행되는 작업을 자동화할 수 있습니다.
- 자동화: 스케줄러는 지정된 시간에 작업을 자동으로 실행해주기 때문에, 수동으로 실행할 필요가 없어지며, 인적 오류를 줄일 수 있습니다.
- 시간 관리: 스케줄러를 사용하면 시간을 효율적으로 관리할 수 있습니다. 일괄적으로 작업을 실행하거나, 작업을 예약함으로써 시간을 절약할 수 있습니다.
주요 스케줄러 종류는 다음과 같습니다.
- Celery Beat: Celery의 일부로 제공되는 스케줄러입니다. Celery Beat는 작업을 지정된 시간에 실행하도록 예약할 수 있습니다.(동적으로 수정 가능)
- cron: Unix/Linux 시스템에서 자주 사용되는 스케줄러입니다. cron은 텍스트 파일로 작성되며, 지정된 시간에 실행될 명령어를 정의합니다.
- Windows Task Scheduler: Windows 운영체제에서 제공하는 스케줄러입니다. 사용자가 지정한 시간에 작업을 실행하도록 예약할 수 있습니다.
- Apache Airflow: 데이터 파이프 라인을 구축하고 관리하기 위한 오픈소스 플랫폼으로, 스케줄링 뿐만 아니라 데이터 처리, 모니터링, 경고 등 다양한 기능을 제공합니다.
'개발 > SPOT' 카테고리의 다른 글
클라우드 기반 실시간 알람 시스템 설계에 대한 고찰 (0) | 2024.03.24 |
---|---|
사용자의 Custom 설정을 지원하는 비동기 프로그램(feat.Celery) (0) | 2023.04.19 |
미션별로 수신 대상자가 달라지는 SMS 기능 개발 (0) | 2023.04.06 |
그래프 기반으로 작성한 상태천이 프로그램 (0) | 2023.04.05 |
[Docker] --no-cache가 시간을 잡아 먹는다 (0) | 2022.10.23 |