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..
FastAPI를 이용한 TDD 개발 - 6
·
프로그래밍 언어/파이썬
TDD 를 이용하여서 3개의 새로운 endpoint를 RESTful 개발로 진행하겠습니다. /summaries GET READ get all summaries /summaries/:id GET READ get a single summary /summaries POST CREATE add a summary 각각의 엔드포인트에서 1. 테스트를 작성합니다. 2. 테스트 코드가 실패하는 것을 확인합니다.(레드) 3. 테스트 코드가 통과 되도록 코드를 작성합니다(그린) 4. 리팩토링합니다. Post Route app 디렉토리 아래 api 디렉토리 아래 summaries.py 모듈을 작성하겠습니다. # project/app/api/summaries.py from fastapi import APIRouter, HTT..
FastAPI를 이용한 TDD 개발 - 5
·
프로그래밍 언어/파이썬
App Structure 테스트가 잘 수행 되었면 앱을 리팩터링하고 FastAPI의 APIRouter, 새로운 데이터베이스 초기화 함수 및 pydantic 모델을 추가해 보겠습니다. API라우터 먼저 "app" 폴더에 "api"라는 새 폴더를 추가합니다. 새로 생성된 폴더에 __init__.py 파일을 추가합니다 . 이제 경로를 project/app/api/ping.py/ping 라는 새 파일로 이동할 수 있습니다 . # project/app/api/ping.py from fastapi import APIRouter, Depends from app.config import get_settings, Settings router = APIRouter() @router.get("/ping") async def..