이전 내용
[FastAPI] 파일 업로드
이전 내용 [FastAPI] 비동기 처리 (asynchronous processing)이전 내용 [FastAPI] 고급 인증: 세션이전 내용 [FastAPI] 고급인증: JWT이전 내용 [FastAPI] 인증과 세션이전 내용 [FastAPI] SQLAlchemy와 CRUD (Depends, db.query)
puppy-foot-it.tistory.com
캐싱(caching)
캐싱이란,
데이터나 결과를 미리 저장해놓고, 다음에 같은 요청이 들어오면 미리 저장된 데이터를 사용하여 빠르게 응답하는 기술이다. 캐싱을 통해 서버의 부하를 줄이고 응답 시간을 개선할 수 있다. 만약 특정 API 요청으로부터 항상 동일한 데이터를 가져와야 할 경우, 이 데이터를 미리 저장해두고 같은 요청이 들어올 때마다 저장된 데이터를 반환하면 된다.
◆ FastAPI와 캐싱
FastAPI는 캐싱 기능을 기본적으로 제공하지 않으나, HTTP 헤더를 통해 캐싱 기능을 구현할 수 있어 클라이언트나 프록시 서버가 응답을 캐시할 수 있도록 지시하여 재요청 시 빠른 응답을 가능하게 한다.
클라이언트 측에서 캐시를 효과적으로 사용하려면 HTTP 캐싱을 통해 브라우저나 프록시 서버가 어떻게 응답을 캐싱할지 지시할 수 있다. Cache-Control 헤더를 사용하면 캐싱 정책을 명확히 전달할 수 있다.
※ 프록시 서버
클라이언트와 인터넷 사이에서 중개자 역할을 하는 서버로, 사용자의 요청을 받아 인터넷에 있는 서버로부터 데이터를 가져오고 그 결과를 사용자에게 다시 전달한다.
- 주요 기능: 캐싱, 인터넷 사용 모니터링, 필터링, 보안 강화 등
Cache-Control 헤더를 사용하여 캐싱 설정하기
Cache-Control 헤더는 클라이언트에게 응답을 얼마나 오랫동안, 어떤 조건으로 캐싱할지 지시하는 데 사용된다.
이 코드는 "/" 경로로 GET 요청을 받으면 JSON 형태로 응답하고, 응답 헤더에 Cache-Control 값을 설정한다.
from fastapi import FastAPI
from fastapi.responses import JSONResponse
app = FastAPI()
@app.get("/", response_class=JSONResponse)
def read_root():
content = {"message": "Hello, FastAPI!"}
headers = {
"Cache-Control" : "public, max-age=60",
}
return JSONResponse(content=content, headers=headers)
- "Cache-Control" : "public, max-age=60": 응답이 공개적으로 60초 동안 캐시될 수 있음을 의미.
[Cache-Control 헤더 설정 가능한 주요 옵션(지시어)]
Cache-Control 지시어를 적절히 조합하여 사용하면 웹 애플리케이션의 성능을 향상시키고, 서버의 부하를 줄일 수 있다.
- public: 어떤 캐시 시스템이든 응답 저장. CDN과 같은 공용 캐시에 적합.
- private: 응답이 사용자의 브라우저와 같은 개인 캐시에서만 저장되어야 함을 의미.
- no-cache: 캐시된 복사본을 사용하기 전에 매번 서버에 검증 요청. 즉, 캐시는 컨텐츠를 저장할 수 있지만, 사용 전에 항상 서버에 확인해야 함.
- no-store: 응답이 전혀 캐시되어서는 안 됨을 의미. 보안상의 이유로 중요한 정보를 포함하는 응답에 사용.
- max-age=<seconds>: 응답이 얼마나 오랫동안 캐시로 간주될 수 있는지를 초 단위로 지정하며, 이 시간이 지나면 캐시는 더 이상 유효하지 않게 됨.
- s-maxage=<seconds>: max-age와 비슷하나, 오직 공용 캐시에 대해서만 적용되며 개인 캐시는 이 지시어를 무시.
사용 예
- 자주 변경되지 않는 정적 자원: public과 max-age 설정
- 매번 최신 정보를 제공해야 하는 동적 컨텐츠: no-cache 사용하여 항상 최신 상태 유지
[테스트 방법]
main.py를 실행하여 서버를 실행한 후 크롬 브라우저를 열어 http://127.0.0.1:8000/ 으로 이동.
개발자 도구를 열어 [네트워크] 탭을 선택한 후 웹페이지를 새로고침하여 좌측 하단의 Name에 있는 요청을 클릭하면 우측에 상세 정보가 나타난다.
거기서 Headers 탭을 클릭하여 응답 헤더 (Response Headers)를 보면 Cache-Control 헤더가 있고, 값에 public, max-age=60 이 설정되어 있는 것을 확인할 수 있다.
[참고]
가장 빠른 풀스택을 위한 플라스크 & FastAPI
다음 내용
'[파이썬 Projects] > <파이썬 웹개발>' 카테고리의 다른 글
[파이썬] FastAPI - 미들웨어(middleware) - 2: CORS (0) | 2025.05.08 |
---|---|
[파이썬] FastAPI - 미들웨어(middleware) - 1: TrustedHostMiddleware (0) | 2025.05.08 |
[파이썬] FastAPI - 파일 업로드 (0) | 2025.05.08 |
[파이썬] FastAPI - 비동기 처리 (asynchronous processing) (0) | 2025.05.08 |
[파이썬] FastAPI - 고급 인증: 세션 (0) | 2025.05.07 |