[python] FastAPI에서 인메모리 캐싱 처리하기

FastAPI는 빠른 속도와 간결한 API 개발을 위한 Python 웹 프레임워크입니다. API 응답을 더 빠르게 만들기 위해 인메모리 캐싱을 사용할 수 있습니다. 이번 블로그에서는 FastAPI에서 인메모리 캐싱 처리하는 방법에 대해 알아보겠습니다.

1. 라이브러리 설치

FastAPI에서 인메모리 캐싱을 사용하기 위해 cachetools라이브러리를 설치해야 합니다. 아래 명령어를 사용하여 설치할 수 있습니다.

pip install cachetools

2. 캐시 설정

캐시를 사용하기 위해 FastAPI 아래에 Cachetools 모듈을 import합니다.

from fastapi import FastAPI
from cachetools import TTLCache

cache = TTLCache(maxsize=100, ttl=60)

위 코드에서 TTLCache는 Time-To-Live 기능이 있는 캐시 객체를 생성하기 위한 클래스입니다. maxsize는 캐시에 저장될 수 있는 최대 아이템 수이며, ttl은 아이템이 캐시에 저장된 후 유지되는 시간입니다.

3. 인메모리 캐싱 적용

FastAPI 앱 내에서 캐싱을 적용하려면 @app.get 데코레이터 아래에서 해당 함수를 정의하고, 캐싱하려는 데이터를 캐시에 저장하고 반환하는 코드를 작성합니다.

@app.get("/items/{item_id}")
def get_item(item_id: int):
    if item_id in cache:
        return cache[item_id]
    else:
        item = fetch_item_from_database(item_id)
        cache[item_id] = item
        return item

위 예제에서 get_item 함수는 /items/{item_id} 엔드포인트에서 실행되며, 요청된 item_id에 해당하는 데이터를 캐시에서 가져오거나 데이터베이스에서 조회하여 캐시에 저장합니다.

4. 캐시 데이터 갱신

FastAPI에서 캐시 데이터를 갱신하는 경우, 해당 데이터에 대한 캐시를 갱신하거나 삭제해야 합니다. 아래 예제는 캐시 데이터를 갱신할 때 cache.pop() 메서드를 사용하는 예시입니다.

@app.put("/items/{item_id}")
def update_item(item_id: int, item: str):
    update_item_in_database(item_id, item)
    cache.pop(item_id)
    return {"message": "Item updated successfully"}

위 예제에서 update_item 함수는 /items/{item_id} 엔드포인트에서 실행되며, 데이터베이스에서 아이템을 갱신한 후 해당 아이템의 캐시를 갱신 또는 삭제합니다.

결론

FastAPI에서 인메모리 캐싱을 사용하면 API의 응답 속도를 빠르게 하고, 데이터베이스 조회 등의 작업을 줄일 수 있습니다. 이번 블로그에서는 FastAPI에서 인메모리 캐싱 처리하는 방법에 대해 소개했습니다. 캐싱을 적용하면 성능 개선과 서버 부하 감소를 이룰 수 있으니, 적절하게 활용해보시기 바랍니다.

참고 자료