[python] FastAPI에서 Redis 캐싱 구현하기

FastAPI는 빠른 웹 애플리케이션 개발을 위한 강력한 프레임워크입니다. 이번에는 FastAPI와 Redis를 함께 사용하여 캐싱을 구현하는 방법에 대해 알아보겠습니다. 캐싱은 반복적인 작업을 최적화하여 성능을 향상시키는 데에 유용합니다.

Redis 설치

Redis는 인메모리 데이터 구조 저장소로 사용됩니다. 우선 Redis를 설치해야합니다. 아래의 명령어를 사용하여 Redis를 설치합니다.

$ sudo apt-get install redis-server

FastAPI와 Redis 연결

FastAPI에서 Redis를 사용하기 위해서는 redis 모듈을 설치해야합니다. 다음 명령어를 사용하여 redis 모듈을 설치합니다.

$ pip install redis

Redis와 연결하려면 Redis 클라이언트를 생성해야합니다. 다음과 같이 Redis 클라이언트를 생성합니다.

import redis

redis_client = redis.Redis(host='localhost', port=6379)

위 코드에서 localhost6379는 각각 Redis 서버의 호스트와 포트를 나타냅니다. 필요에 따라 호스트와 포트를 수정하여 Redis에 연결할 수 있습니다.

캐싱 로직 구현

이제 Redis에 값을 저장하고 가져오는 캐싱 로직을 구현해보겠습니다.

from fastapi import FastAPI
import redis

app = FastAPI()

redis_client = redis.Redis(host='localhost', port=6379)

@app.get("/cached")
def get_cached_value(key: str):
    cached_value = redis_client.get(key)
    if cached_value is not None:
        return {"value": cached_value.decode()}
    else:
        value = compute_value()  # 캐시에 없는 경우 계산하여 값을 가져옴
        redis_client.set(key, value)  # Redis에 값을 저장
        return {"value": value}

위 코드에서 /cached 엔드포인트는 캐싱된 값을 가져옵니다. 먼저 Redis에서 해당 키로 저장된 값이 있는지 확인하고, 값이 존재하면 해당 값을 반환합니다. 값이 존재하지 않으면 compute_value() 함수를 사용하여 값을 계산하고, 이 값을 Redis에 저장한 후 반환합니다.

테스트

위의 코드를 실행하기 전에 Redis 서버를 시작해야합니다.

$ redis-server

FastAPI 애플리케이션을 시작하려면 다음 명령어를 사용합니다.

$ uvicorn main:app --reload

이제 localhost:8000/cached?key=test로 GET 요청을 보내면 key에 대한 캐싱된 값을 가져올 수 있습니다. 캐싱된 값이 없는 경우에는 새로 계산되어 Redis에 저장됩니다.

결론

FastAPI와 Redis를 함께 사용하여 캐싱 기능을 구현했습니다. 이를 통해 성능을 향상시키고 반복적인 계산을 줄일 수 있습니다. Redis를 사용하는 것은 간단하고 효과적인 방법이므로, FastAPI 애플리케이션에서 캐싱을 구현할 때 고려해보세요.

참고 자료