[파이썬] Flask에서의 Redis 연동

Flask는 사용하기 간편하고 확장 가능한 웹 프레임워크로, Redis와 연동하여 좀 더 강력한 웹 어플리케이션을 개발할 수 있습니다. Redis는 인메모리 데이터베이스로서 데이터를 빠르게 읽고 쓸 수 있는 기능을 제공합니다.

Redis-Py 사용하기

Redis와 Flask를 연동하기 위해 인기있는 Redis 라이브러리인 redis-py를 사용할 수 있습니다.

먼저, 아래의 명령어로 redis-py를 설치합니다:

pip install redis

이제 Flask 애플리케이션에서 Redis를 사용해보겠습니다.

from flask import Flask
import redis

app = Flask(__name__)
r = redis.Redis(host='localhost', port=6379, db=0)

@app.route('/')
def hello():
    # Redis에 데이터 저장하기
    r.set('message', 'Hello, Redis!')

    # Redis에서 데이터 가져오기
    message = r.get('message').decode('utf-8')

    return message

if __name__ == '__main__':
    app.run()

위의 예제에서 redis.Redis()를 사용하여 Redis 서버에 연결합니다. hostport는 사용하고 있는 Redis 서버의 호스트와 포트에 맞게 설정해야 합니다. db는 Redis 데이터베이스의 번호입니다.

r.set() 함수를 사용하여 Redis에 데이터를 저장하고, r.get() 함수를 사용하여 데이터를 가져옵니다. Redis에서 가져온 데이터는 바이트로 반환되므로, decode('utf-8')을 사용하여 문자열로 변환합니다.

Flask 애플리케이션을 실행하고 localhost:5000에 접속하면 Redis에 저장된 데이터가 출력됩니다.

Redis를 이용한 캐싱

Redis는 매우 빠른 읽기 작업을 제공하기 때문에 웹 어플리케이션에서 캐시로 사용할 수 있습니다. Flask에서는 Redis를 이용한 간단한 캐싱 시스템을 구현할 수 있습니다.

from flask import Flask, request
import redis

app = Flask(__name__)
r = redis.Redis(host='localhost', port=6379, db=0)

@app.route('/')
def cached_hello():
    # Redis에 캐시된 데이터가 있는지 확인
    cached_message = r.get('cached_message')

    if cached_message:
        return cached_message.decode('utf-8')

    # Redis에 캐시된 데이터가 없는 경우
    name = request.args.get('name', 'Guest')
    message = f'Hello, {name}!'

    # 데이터 캐싱
    r.set('cached_message', message)

    return message

if __name__ == '__main__':
    app.run()

위의 예제에서 / 라우트에 접속하는 경우 쿼리 파라미터로 name을 받아옵니다. Redis에 cached_message라는 키로 저장된 데이터를 먼저 확인합니다. 만약 데이터가 존재하면 캐시된 데이터를 반환하고, 데이터가 없는 경우에는 새로운 메시지를 생성하고 Redis에 저장합니다.

이렇게 구현한 캐싱 시스템은 웹 페이지의 요청마다 동일한 데이터를 다시 계산하는 시간과 자원을 절약할 수 있습니다.

결론

Flask에서 Redis를 연동하여 빠르고 효율적인 웹 어플리케이션을 구축할 수 있습니다. Redis의 다양한 기능을 활용하여 데이터 캐싱, 세션 관리, 메시지 큐 등 다양한 용도로 활용할 수 있으니, 적절히 사용하여 성능 향상에 도움을 주세요!