Celery와 FastAPI - 8
·
프로그래밍 언어/파이썬
이번에는 Broadcaster와 WebSockets를 사용하여 어플리케이션에서의 비효율적인 폴링 절차를 최적화하는 방법을 확인해봅니다. XHR Short Polling을 사용하여 태스크 상태를 확인했지만, 이 방식은 많은 연결과 쿼리를 생성하여 리소스를 낭비할 수 있으며, 폴링 간격에 따라 태스크 완료와 클라이언트 업데이트 사이에 지연이 발생할 수 있습니다. 목표 Broadcaster를 사용하여 Redis pub/sub을 통해 다중 프로세스 알림 처리를 해봅니다. asyncio에 대해 알아 봅니다. asgiref 라이브러리를 이용하여 async를 sync로 변환해봅니다. Websocket? WebSocket 프로토콜은 클라이언트와 서버 간의 양방향(full-duplex) 통신 채널을 단일 TCP 연결을 ..
Celery와 FastAPI - 7
·
프로그래밍 언어/파이썬
FastAPI 애플리케이션에서 Zapier, SendGrid, Stripe와 같은 외부 서비스를 사용할 때, RESTful API나 웹훅을 활용하게 됩니다. 올바르게 구현하면 개발 과정을 가속화하고 시간 및 비용을 절약할 수 있습니다. 그러나 중요한 점은 서비스를 통합하면서도 웹 애플리케이션의 전반적인 성능을 저하시키지 않도록 주의해야 한다는 것입니다. 특히 메인 웹 프로세스를 차단하지 않으면서 작업을 처리하는 것이 중요합니다. Celery를 활용하여 외부 서비스를 애플리케이션에 통합하는 방법을 확인 해보겠습니다. Celery는 백그라운드에서 시간이 많이 소요되는 작업을 처리할 수 있도록 해주어, request/response 흐름을 외부에서 작업을 처리 하게 만듭니다. 목표 Celery Worker를 ..
Celery와 FastAPI - 6
·
프로그래밍 언어/파이썬
Celery task 디버깅 방법에 대해 알아 보겠습니다. 목적 Celery task 디버깅에 대해 알아보기 rdb를 이용한 celery task 디버깅 방법1 : Eager Mode Celery 태스크 디버깅은 쉽지 않습니다.. Celery 태스크는 일반적으로 비동기적으로 실행되기 때문에, 전통적인 디버깅 방법(예: 브레이크포인트 설정)을 사용하는 것이 어려울 수 있습니다. 이 장에서는 Celery 태스크를 디버깅하는 몇 가지 방법을 살펴보고, 그 중 'Eager Mode'를 사용하는 방법에 대해 집중적으로 설명하겠습니다. 'Eager Mode'는 Celery 태스크를 동기적으로 실행하게 하여, 일반 코드를 디버깅할 때와 같은 방식으로 태스크 내 코드를 디버깅할 수 있게 해줍니다. 태스크가 메시지 큐로..
Celery와 FastAPI - 5
·
프로그래밍 언어/파이썬
Auto-reload 설정 live code re-loading은 개발자에게 코드 변경에 대한 빠른 피드백을 제공하는 간단하지만 효과적인 방법입니다. Uvicorn은 기본적으로 이 기능을 제공하지만, Celery는 그렇지 않습니다. 따라서 작업 코드에 변경이 있을 때마다 Celery 워커를 수동으로 재시작해야 합니다. 이는 개발의 비효율성입니다. 코드베이스에 변경이 있을 때 Celery 워커가 자동으로 재시작되도록 Celery 워커의 Auto-reload 문제를 해결하는 방법을 확인해 봅니다. WatchFiles Uvicorn을 --reload 플래그와 함께 실행하면, watchfiles을 이용하여 파일 감시 및 코드 re-load를 위한 도구로 사용됩니다. Celery 워커에도 watchfiles를 사..
Celery와 FastAPI - 4
·
프로그래밍 언어/파이썬
목표 이번 장에서는 Docker Compose를 사용하는 이유와 어디에 사용하는지 알아 볼 수 있습니다. Docker Compose를 사용하여 FastAPI, Postgres, Redis, Celery 생성 및 관리를 할 수 있습니다. Docker, Docker Compose를 사용하여 애플리케이션 개발 속도를 올릴수 있습니다. Docker Compose Docker Compose는 멀티-컨테이너 Docker 애플리케이션을 정의하고 실행하기 위한 도구입니다. YAML 파일을 사용해 애플리케이션의 서비스를 구성하며, 단일 명령으로 모든 컨테이너의 생성 및 시작 과정을 수행합니다. 이러한 접근 방식은 개발 환경을 단순화하고 표준화하는 데 큰 이점을 제공합니다. Docker Compose의 필요성 Docker..
Celery와 FastAPI - 3
·
프로그래밍 언어/파이썬
이번에는 테스트와 프로젝트 스케일 확장을 쉽게하기 위해, factory patter으로 리팩토링 해보겠습니다. 팩토리 패턴이란? 디자인 패턴중의 하나인 팩토리(Factory) 패턴은 객체 생성 처리를 서브 클래스에 위임하여, 객체 생성을 위한 인터페이스를 정의하는데 목적이 있습니다. 즉, 객체를 생성하는 코드와 사용하는 코드를 분리하여, 클라이언트가 특정 클래스의 인스턴스를 직접 사용하지 않고도 필요한 객체를 얻을 수 있도록 하는 생성 패턴입니다. 목표 FastAPI 앱 인스턴스 초기화를 위해 애플리케이션 팩토리 생성 애플리케이션 팩토리 패턴과 작동하도록 Celery 설정 SQLAlchemy와 Alembic을 사용하여 데이터베이스 변경 사항 관리 App factory 'project'라는 ..
Celery와 FastAPI - 2
·
프로그래밍 언어/파이썬
이번 글의 목표 FastAPI로 Celery 설정 하기 Python Shell에서 Celery 작업 실행 하기 Flower로 Celery 앱 모니터링 하기 Redis 설정 레디스를 OS에 직접 설치하거나 Docker를 이용하여 설치 및 실행 할 수 있습니다. Docker docker run -p 6379:6379 --name some-redis -d redis Docker Hub에서 Redis docker 이미지가 다운로드 되어서 포트 6379로 백그라운드 작업으로 실행됩니다. 아래 명령어를 통해서 레디스가 실행중인지 확인 할 수 있습니다. docker exec -it some-redis redis-cli ping # PONG Celery 설정 1단계 : FastAPI 앱에서 task message를 m..
Celery와 FastAPI - 1
·
프로그래밍 언어/파이썬
Celery의 기본구성요소와 일반적인 Producer/Consumer 기반의 task queue에 대해 보겠습니다. 목표 Celery 같은 task queue 사용 이유에 대해 알 수 있습니다. producer/consumer 모델을 알아보고, Celery와의 관련성을 알 수 있습니다. Celery 사용 이유 Celery는 FastAPI, Django, Flask와 같은 Python 기반 웹 프레임워크와 자주 연동되는 오픈 소스, 비동기 태스크 큐입니다. 이는 전형적인 요청/응답 주기 외부에서 백그라운드 작업을 관리하기 위한 것입니다. 즉, 사용자가 작업이 끝나기를 기다리게 하지 않고 즉시 HTTP 응답을 반환한 다음, 프로세스를 백그라운드 태스크로 실행할 수 있습니다. 사용 케이스 댓글 기능에서 "@사..