FastAPI는 빠른 API 응답 시간을 제공하는 강력한 웹 프레임워크입니다. 그러나 몇 가지 튜닝을 통해 더욱 빠른 응답 시간을 달성할 수 있습니다. 이번 블로그 포스트에서는 FastAPI에서 API 응답 시간을 향상시키는 몇 가지 유용한 팁을 소개하겠습니다.
1. 빠른 ASGI 서버 사용
FastAPI는 기본적으로 Uvicorn ASGI 서버를 사용합니다. 그러나 더 빠른 ASGI 서버인 daphne
이나 hypercorn
을 사용하여 응답 시간을 개선할 수 있습니다. 다음은 hypercorn
을 사용하는 예시입니다.
import uvicorn
from myapp import app
if __name__ == "__main__":
uvicorn.run(app, server='hypercorn', host='0.0.0.0', port=8000)
2. 쿼리 파라미터 유효성 검사 최소화
FastAPI는 자동으로 요청의 쿼리 파라미터 유효성을 검사하므로 잘못된 입력을 처리하는 데 시간이 소요될 수 있습니다. 따라서 반드시 필요한 경우에만 쿼리 파라미터 유효성 검사를 수행하고, 불필요한 검사를 피하는 것이 좋습니다.
@app.get("/items/")
async def read_items(skip: int = 0, limit: int = 10):
# 유효성 검사 수행하지 않음
items = get_items_from_db(skip=skip, limit=limit)
return items
3. 비동기 작업 최적화
FastAPI는 비동기 작업을 효율적으로 처리할 수 있도록 지원합니다. 병렬 처리가 필요한 작업은 async
키워드를 사용하여 비동기 함수로 작성하고 await
를 통해 작업이 완료될 때까지 대기합니다.
@app.get("/items/")
async def read_items():
items = await get_items_from_db()
return items
4. 데이터베이스 연결 풀링 사용
데이터베이스 연결에는 시간이 걸릴 수 있으므로, FastAPI에서는 데이터베이스 연결 풀링을 사용하는 것이 좋습니다. 데이터베이스 연결 풀링은 미리 연결을 생성해 놓고 재사용하여 빠른 응답 시간을 유지합니다.
import databases
database = databases.Database("sqlite:///mydatabase.db", min_size=5, max_size=20)
5. 캐싱 사용
응답 결과를 캐싱하여 동일한 요청에 대한 응답 시간을 단축시킬 수 있습니다. FastAPI에서는 cachetools
라이브러리를 사용하여 캐싱을 구현할 수 있습니다.
from cachetools import cached, TTLCache
cache = TTLCache(maxsize=1000, ttl=300)
@cached(cache)
def heavy_computation():
# 복잡한 계산 작업
return result
위의 팁을 활용하여 FastAPI의 API 응답 시간을 향상시킬 수 있습니다. 하지만 응답 시간을 높이는 방법은 상황에 따라 다를 수 있으므로, 최적의 방법을 찾기 위해 약간의 실험이 필요할 수 있습니다.
FastAPI 공식 문서 및 FastAPI GitHub 저장소에서 더 많은 정보를 찾아볼 수 있습니다.