[python] FastAPI에서 캐시 무효화 구현하기

FastAPI는 강력한 웹 프레임워크이며, 캐싱을 통해 응답 시간을 효율적으로 개선할 수 있습니다. 하지만 때로는 캐시된 데이터가 업데이트되었을 때 캐시를 무효화해야 할 필요가 있습니다. 이번 블로그 포스트에서는 FastAPI에서 캐시 무효화를 구현하는 방법에 대해 알아보겠습니다.

Redis를 사용한 캐시 구현

FastAPI에서 가장 일반적으로 사용되는 방법은 Redis를 사용하여 캐시를 구현하는 것입니다. Redis는 인메모리 데이터베이스로, 매우 빠른 속도와 간편한 다루기를 제공합니다. 캐시 데이터를 Redis에 저장하고, 데이터가 업데이트될 때마다 Redis에서 해당 데이터를 지우는 방식으로 캐시 무효화를 구현할 수 있습니다.

아래는 FastAPI와 Redis를 함께 사용하여 캐시 무효화를 구현하는 예시 코드입니다:

import redis
from fastapi import FastAPI, HTTPException

app = FastAPI()
cache = redis.Redis()

@app.post("/update_data/")
def update_data(key: str) -> str:
    # 데이터 업데이트 로직

    # 캐시 무효화
    cache.delete(key)

    return "Data updated successfully"

@app.get("/data/{key}")
def get_data(key: str) -> str:
    # 캐시 데이터 가져오기
    cached_data = cache.get(key)

    if cached_data is None:
        # 캐시된 데이터가 없는 경우
        # 데이터 새로 조회 및 캐시
        new_data = fetch_data_from_db(key)
        cache.set(key, new_data)

        return new_data

    return cached_data

위의 예시 코드에서 update_data 엔드포인트는 데이터를 업데이트하는 동시에 Redis에서 해당 데이터를 지우는 역할을 합니다. get_data 엔드포인트에서는 캐시된 데이터가 없을 경우 데이터를 새로 조회하여 Redis에 저장하고, 캐시된 데이터가 있을 경우 Redis에서 해당 데이터를 가져옵니다.

주의사항

캐시 무효화를 구현할 때 몇 가지 주의사항이 있습니다:

마치며

FastAPI에서 캐시 무효화를 구현하는 방법에 대해 알아보았습니다. Redis와 FastAPI의 조합을 통해 효율적인 캐싱을 구현할 수 있으며, 적절한 캐시 무효화 전략을 선택하여 최적의 성능을 달성할 수 있습니다. 캐시 무효화는 애플리케이션의 데이터 정확성에 중요한 역할을 하므로, 신중하게 구현해야 합니다.

더 자세한 내용은 아래 참고 자료를 확인해주세요.

참고 자료