TOP
class="layout-aside-left paging-number">
본문 바로가기
[파이썬 Projects]/<파이썬 웹개발>

[파이썬] 플라스크(Flask) - 캐싱(caching)

by 기록자_Recordian 2024. 7. 21.
728x90
반응형
시작에 앞서
해당 내용은 <가장 빠른 풀스택을 위한 Flask & FastAPI>, Dave Lee 지음. BJ Public 출판.
내용을 토대로 작성되었습니다. 보다 자세한 사항은 해당 교재를 참고하시기 바랍니다.

캐싱(caching)

 

캐싱이란,

데이터를 한 번 받아오거나 계산한 결과를 메모리와 같은 빠르게 접근할 수 있는 임시 저장 공간에 보관하는 것을 의미한다.

즉, 데이터 처리의 효율성을 높이는 기술이며, 이 저장 공간을 캐시(cache) 라 부른다.

 

[캐싱의 주요 장점]

- 서버의 부하를 줄이고 사용자에게 더 빠른 응답을 가능하게 한다

- 애플리케이션의 성능과 사용자 경험을 크게 향상시킬 수 있다

- 시스템 성능의 향상

- 반복적인 요청에 대한 응답 시간을 줄일 수 있다

 

[캐싱의 단점]

- 캐싱된 데이터는 항상 최신 데이터가 아닐 수 있으므로 캐시 데이터의 유효성을 주기적으로 확인하고 업데이트 해야 한다

(동적으로 변경되는 페이지에 대해서는 캐싱 기능 추천 하지 않음)

 

▶ 자주 변경되지 않는 정적 데이터는 길게 캐싱할 수 있으나, 자주 변경되는 데이터는 짧은 시간 동안만 캐싱해야 한다.


캐싱 구현하기

 

플라스크에서는 flask_caching 확장을 이용하여 캐싱을 손쉽게 구현할 수 있다.

pip install Flask-Caching==2.1.0

 

◆ 예제로 캐싱 해보기

@cache.cached(timeout=60) 데코레이터를 사용하여 index 라우트의 결과를 60초 동안 캐시하도록 설정

※ 60초 동안 캐싱한다는 것은 데이터를 처음 요청받았을 때의 응답을 캐시에 저장하고, 이후에 동일한 요청이 들어오면 캐시에서 해당 데이터를 바로 제공한다는 뜻.

이 캐싱된 정보는 정확히 60초 동안만 유효하며, 60초가 지나면 캐시는 자동으로 해당 데이터를 삭제하거나 무효화한다.

from flask import Flask, render_template
from flask_caching import Cache

app = Flask(__name__)
cache = Cache(app, config={'CACHE_TYPE': 'simple'})

@app.route('/')
@cache.cached(timeout=60) # 결과를 60초 동안 캐시
def index():
	return render_template('index.html')

▶ render_template() 함수를 사용하여 HTML 템플릿을 렌더링할 때 플라스크는 기본적으로 프로젝트 루트 디렉터리에 있는 templates 라는 이름의 폴더를 찾는다.

이 폴더 내에서 HTML 파일을 찾아 랜더링 하기 때문에 위 코드를 테스트 해보려면 index.html 템플릿 파일을 만들고, 그 파일을 올바른 위치에 넣어야 한다.

 

위와 같이 my_flask_app 폴더 내에 app.py 파일을 생성하고,

또 templates 폴더를 만들고, 그 폴더 안에 index.html 파일을 만들어 하단의 코드를 입력한다.

<!DOCTYPE html>
<html lang="ko">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initialscale=1.0">
    <title>Flask 앱 환영 페이지</title>
</head>
<body>
    <h1>환영합니다!</h1>
    <p>Flask 앱의 메인 페이지입니다. </p>
</body>
</html>

다시 app.py 터미널에 flask run을 실행한 후 http://127.0.0.1:5000/ 에 접속하면 환영 메시지를 확인할 수 있다.

728x90
반응형