파이썬
프로젝트 배포 자동화 가이드 Part 1: 개발 환경 구성
윈도우에서 개발한 FastAPI 프로젝트를 리눅스 환경에서 배포하는 과정을 자동화해보겠습니다. 특히 Python 버전과 의존성 관리를 자동화하여 편리하게 배포할 수 있도록 구성하겠습니다.프로젝트 구조 설정my-fastapi-project/├── app/│ ├── api/│ ├── core/│ ├── models/│ └── main.py├── tests/├── .github/│ └── workflows/│ ├── ci.yml│ └── cd.yml├── scripts/│ ├── generate_requirements.py│ ├── get_python_version.py│ └── start.sh├── Dockerfile├── docker-compose.yml└..
FastAPI-Cache로 구현하는 효율적인 API 캐싱
FastAPI-Cache 소개와 설치FastAPI-Cache는 FastAPI 애플리케이션에서 손쉽게 캐싱을 구현할 수 있게 해주는 라이브러리입니다. Redis, Memcached 등 다양한 백엔드를 지원합니다.pip install fastapi-cache2[redis] # Redis 백엔드 사용시기본 설정FastAPI 애플리케이션에 캐시를 설정하는 방법입니다.from fastapi import FastAPIfrom fastapi_cache import FastAPICachefrom fastapi_cache.backends.redis import RedisBackendfrom redis import asyncio as aioredisapp = FastAPI()@app.on_event("startup")a..
Router Tags 활용
FastAPI의 include_router에서 사용되는 tags는 OpenAPI(Swagger) 문서화와 API 그룹화에 매우 유용합니다. 특히 Enum을 활용하면 일관성 있는 태그 관리가 가능합니다.기본적인 태그 사용법가장 단순한 형태의 태그 사용입니다.from fastapi import APIRouter, FastAPIapp = FastAPI()router = APIRouter()# 문자열 리스트로 태그 지정app.include_router( router, prefix="/users", tags=["users", "auth"] # 여러 태그 지정 가능)Enum을 활용한 태그 관리대규모 애플리케이션에서는 Enum을 사용하여 태그를 체계적으로 관리할 수 있습니다.from enum imp..
테스트, 배포, 성능 최적화 - Part 3
테스트 구현테스트는 애플리케이션의 안정성을 보장하는 핵심입니다. pytest를 활용하여 체계적인 테스트를 구현해보겠습니다.# tests/conftest.pyimport pytestfrom httpx import AsyncClientfrom sqlalchemy.ext.asyncio import AsyncSession, create_async_enginefrom sqlalchemy.orm import sessionmakerfrom app.main import appfrom app.api import depsfrom app.db.base import BaseTEST_DATABASE_URL = "postgresql+asyncpg://test:test@localhost/test_db"@pytest.fixture(..
라우터 구현과 에러 처리 - Part 2
라우터 구조화대규모 애플리케이션에서는 라우터를 체계적으로 구성하는 것이 중요합니다. 버전별, 기능별로 라우터를 분리하여 관리합니다.# app/api/v1/router.pyfrom fastapi import APIRouterfrom app.api.v1.endpoints import user, itemapi_router = APIRouter()api_router.include_router( user.router, prefix="/users", tags=["users"])api_router.include_router( item.router, prefix="/items", tags=["items"])# app/api/v1/endpoints/user.pyfrom fastapi im..
프로젝트 구조와 기본 설정 - Part 1
이 시리즈에서는 FastAPI의 모범 사례를 기반으로 확장 가능하고 유지보수가 쉬운 애플리케이션을 설계하는 방법을 알아보겠습니다.프로젝트 구조 설계첫 번째로 다룰 내용은 프로젝트 구조입니다. 잘 설계된 구조는 프로젝트의 확장성과 유지보수성을 크게 향상시킵니다.├── app/│ ├── api/│ │ ├── v1/│ │ │ ├── endpoints/│ │ │ │ ├── user.py│ │ │ │ └── item.py│ │ │ └── router.py│ │ └── deps.py│ ├── core/│ │ ├── config.py│ │ └── security.py│ ├── db/│ │ ├── session.py│ ..
[FastAPI] add_api_route 파라미터
FastAPI의 add_api_route는 매우 강력한 기능을 제공하지만, 많은 매개변수로 인해 처음에는 이해하기 어려울 수 있습니다. 각 매개변수의 역할과 실제 활용 방법에 대해 알아보겠습니다.필수 매개변수 이해하기from fastapi import FastAPI, Responsefrom typing import List, Dict, Anyapp = FastAPI()# 기본적인 매개변수 사용app.add_api_route( path="/users", # 엔드포인트 경로 endpoint=get_users, # 실행될 함수 methods=["GET"] # HTTP 메서드)응답 관련 매개변수응답 형식과 관련된 매개변수들은 API의 출..
[FastAPI] add_api_route로 동적 라우팅 구현
FastAPI를 사용하면서 동적으로 라우트를 추가해야 하는 경우가 종종 있습니다. 이럴 때 사용할 수 있는 것이 바로 add_api_route 메서드입니다. 일반적으로 데코레이터를 사용하는 방식과는 다르게, 프로그래밍 방식으로 라우트를 추가할 수 있어 유연한 API 설계가 가능합니다.add_api_route 기본 사용법가장 기본적인 사용법부터 살펴보겠습니다. 데코레이터 방식과 비교하면 다음과 같습니다.from fastapi import FastAPIapp = FastAPI()# 데코레이터 방식@app.get("/users/{user_id}")async def get_user(user_id: int): return {"id": user_id}# add_api_route 방식async def get_u..