[python] Flask-RESTful에서 로컬 캐싱을 이용한 응답 시간 개선 방법

Flask-RESTful은 파이썬의 웹 프레임워크인 Flask를 기반으로 한 RESTful API 개발을 위한 라이브러리입니다. 이 라이브러리를 사용하여 RESTful API를 개발할 때 응답 시간을 개선하기 위해 로컬 캐싱을 이용할 수 있습니다.

로컬 캐싱은 서버에서 받은 응답을 클라이언트가 저장하여 동일한 요청이 발생할 경우 서버에 재요청하지 않고 저장된 응답을 사용하여 응답 시간을 줄일 수 있는 방법입니다. 이를 통해 클라이언트와 서버 간의 통신을 최소화하고, 네트워크 대역폭을 절약하는 효과를 얻을 수 있습니다.

Flask-RESTful에서 로컬 캐싱을 사용하기 위해서는 다음과 같은 방법을 사용할 수 있습니다.

  1. 메모리 캐싱 사용
    • Flask에서 제공하는 cache 객체를 사용하여 메모리에 응답을 캐싱합니다.
    • cache 객체는 Flask-Caching 라이브러리를 설치하여 사용할 수 있습니다.
    • 간단한 예제 코드는 다음과 같습니다.
    from flask import Flask
    from flask_restful import Api, Resource
    from flask_caching import Cache
    
    app = Flask(__name__)
    api = Api(app)
    cache = Cache(app)
    
    class MyResource(Resource):
        @cache.cached(timeout=60)  # 60초 동안 응답을 캐싱합니다.
        def get(self):
            # 응답 로직 작성
            return {'message': 'Hello, World!'}
    
    api.add_resource(MyResource, '/myresource')
    
    if __name__ == '__main__':
        app.run(debug=True)
    
  2. 파일 캐싱 사용
    • Flask에서 제공하는 send_file 함수를 사용하여 파일을 응답으로 전송합니다.
    • 파일을 특정 디렉토리에 저장하고, 동일한 요청이 발생할 경우 저장된 파일을 응답으로 전송합니다.
    • 파일 캐싱을 사용하기 위해서는 별도의 로직을 구현해야 합니다.
    • 예제 코드는 다음과 같습니다.
    from flask import Flask, send_file
    
    app = Flask(__name__)
    
    @app.route('/myresource')
    def get_myresource():
        cache_file_path = 'cache/myresource.json'
        if not os.path.exists(cache_file_path):
            # 파일이 존재하지 않을 경우 응답 로직 작성
            # 응답 결과를 파일로 저장
            with open(cache_file_path, 'w') as f:
                f.write('{"message": "Hello, World!"}')
    
        return send_file(cache_file_path)
    
    if __name__ == '__main__':
        app.run(debug=True)
    

로컬 캐싱을 이용한 응답 시간 개선 방법은 간단하면서도 효과적인 방법입니다. Flask-RESTful 라이브러리를 사용하여 RESTful API를 개발할 때는 로컬 캐싱을 고려하여 응답 시간을 개선해 보세요.

참고 자료