[파이썬] Flask에서의 레이트 리밋

Flask는 파이썬으로 작성된 경량 웹 프레임워크로, 빠른 개발과 유연한 확장성을 제공합니다. 하지만 많은 요청을 처리할 때 서버 부하가 증가하여 성능 문제가 발생할 수 있습니다. 이러한 문제를 해결하기 위해 Flask에서는 레이트 리밋 기능을 사용할 수 있습니다.

레이트 리밋이란?

레이트 리밋은 서비스가 받을 수 있는 요청의 수를 제한하는 기능입니다. 이를 통해 서버의 부하를 조절하고 공격으로부터 보호할 수 있습니다. Flask에서는 레이트 리밋 기능을 사용하기 위해 다양한 방법을 제공합니다.

Flask-Limiter 확장 사용하기

Flask-Limiter 확장을 통해 Flask 애플리케이션에서 레이트 리밋 기능을 쉽게 구현할 수 있습니다. Flask-Limiter는 Flask 애플리케이션에 대한 쿼터와 리밋을 관리하는 데 사용되는 강력한 도구입니다.

먼저 Flask-Limiter를 설치해야 합니다. 아래의 명령을 사용하세요.

pip install Flask-Limiter

다음은 Flask 애플리케이션에서 레이트 리밋을 설정하는 예제입니다.

from flask import Flask
from flask_limiter import Limiter
from flask_limiter.util import get_remote_address

app = Flask(__name__)
limiter = Limiter(app, key_func=get_remote_address)

@app.route('/')
@limiter.limit("10/minute") # 1분 동안 최대 10개의 요청을 허용
def index():
    return "Hello, Flask!"

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

위의 예제에서 @limiter.limit 데코레이터를 사용하여 레이트 리밋을 설정했습니다. 이렇게 설정하면 “/” 경로로 오는 요청은 1분당 최대 10개로 제한됩니다.

Flask-Redis와 함께 사용하기

만약 Flask 애플리케이션에서 분산된 레이트 리밋을 적용하려면 Flask-Redis 확장을 사용할 수 있습니다. Flask-Redis는 Redis 서버와 연결하여 분산된 캐싱 및 레이트 리밋을 구현하는 데 사용됩니다.

먼저 Flask-Redis를 설치해야 합니다. 아래의 명령을 사용하세요.

pip install Flask-Redis

다음은 Flask-Redis와 함께 레이트 리밋을 설정하는 예제입니다.

from flask import Flask
from flask_redis import FlaskRedis
from flask_limiter import Limiter
from flask_limiter.util import get_remote_address

app = Flask(__name__)
app.config['REDIS_URL'] = 'redis://localhost:6379/0' # Redis 서버 설정
redis_client = FlaskRedis(app)
limiter = Limiter(app, key_func=get_remote_address, storage_uri=app.config['REDIS_URL'])

@app.route('/')
@limiter.limit("10/minute")
def index():
    redis_client.incr('request_count') # 요청 횟수 저장
    return f"Hello, Flask! Request Count: {redis_client.get('request_count')}"

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

위의 예제에서 Flask-Redis를 사용하여 Redis 서버와 연결하고, redis_client를 통해 요청 횟수를 기록합니다. 이렇게 설정하면 “/” 경로로 오는 요청은 1분당 최대 10개로 제한되며, 요청 횟수도 Redis에 저장됩니다.

결론

Flask에서의 레이트 리밋은 서버의 성능 문제를 방지하고 공격으로부터 보호하기 위한 중요한 기능입니다. Flask-Limiter와 Flask-Redis를 활용하여 쉽게 레이트 리밋 기능을 구현할 수 있습니다. 이를 잘 활용하여 안정적이고 안전한 Flask 애플리케이션을 개발하세요.```