시작에 앞서
해당 내용은 <가장 빠른 풀스택을 위한 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/ 에 접속하면 환영 메시지를 확인할 수 있다.
'[파이썬 Projects] > <파이썬 웹개발>' 카테고리의 다른 글
[파이썬] 플라스크(Flask) - 테스팅(testing) (2) | 2024.07.22 |
---|---|
[파이썬] 플라스크(Flask) - 배포(Deployment) (2) | 2024.07.22 |
[파이썬] 플라스크(Flask) - RESTful API (0) | 2024.07.21 |
[파이썬] 플라스크(Flask) - 인증과 세션(2) (0) | 2024.07.21 |
[파이썬] 플라스크(Flask) - 인증과 세션(1) (3) | 2024.07.20 |