캐싱 유형
1) 클라이언트 측 캐싱 (Client-side Caching)
- 저장 위치 : 사용자의 기기 (브라우저, 앱, ...)
- 이미 로드한 정적 리소스를 저장하여, 재요청 시 로딩 속도를 개선함
- 주로 브라우저 캐시를 통해 이뤄짐
: HTTP 헤더로 캐싱 정책 설정 ex) Cache-Control, Expires, ...
- 네트워크 요청 없이 오프라인 액세스를 지원할 수 있음
[장점]
· 서버에 대한 요청량 감소 → 서버의 부하 감소
· 데이터가 로컬에 있어 즉시 제공 가능 → 응답 속도 빠름
[단점]
· 저장 용량이 제한적임
· 최신 데이터를 가져오려면 캐시를 삭제해야 함
2) 서버 측 캐싱 (Server-side Caching)
- 저장 위치 : 서버 내 메모리/디스크 또는 별도의 캐시 서버(Redis, Memcached 등)
- 서버에서 데이터를 준비하는 과정에서 캐싱을 사용함
: 반복된 요청에 대해 동일한 응답을 일일이 생성하지 않고, 미리 계산된 데이터를 제공함
- 주로 동적 데이터를 캐싱함 (API 응답, 렌더링 결과 등)
[장점]
· DB/서버의 부하 감소
· 복잡한 계산이나 데이터 처리 시간을 줄임
[단점]
· 캐싱 무효화 정책을 잘못 설정하면 최신 데이터와 다른 데이터를 제공할 수 있음
· 캐시 저장소를 위한 추가적인 비용이 발생할 수 있음
3) CDN Caching
- 저장 위치 : 전 세계에 분산된 CDN 서버
- 정적 리소스를 사용자와 가까운 위치에 저장하여 제공함
- HTTP 헤더로 캐싱 정책 설정
[장점]
· 글로벌 성능 향상
: 사용자가 자신과 가까운 CDN 서버로부터 콘텐츠를 받음 → 응답 속도 빠름
· 정적 리소스 요청이 CDN에서 처리됨 → 서버 부하 감소
· 자동 확장 지원 → 트래픽이 급증하더라도 안정적임
[단점]
· 비용 증가
· 동적 데이터를 캐싱하는 데에는 적합하지 않음
※ CDN (Content Delivery Network)
- 콘텐츠를 사용자에게 더 빠르고 효율적으로 제공하기 위해 전 세계에 분산된 서버 네트워크
- 콘텐츠 캐싱
- 트래픽 분산
: 특정 서버로의 트래픽 집중을 방지하고, 여러 서버로 요청을 분배함
- 콘텐츠를 원본 서버가 아닌, 사용자와 가까운 엣지 서버(Edge Server)에서 제공함
- DDoS 방어 및 웹 애플리케이션 방화벽(WAF) 기능을 제공함
캐싱 정책을 설정하는 HTTP 헤더
# Cache-Control
- 현대 HTTP 캐싱의 핵심 헤더
[주요 지시자]
i. max-age
: 콘텐츠를 캐싱할 최대 시간 (초 단위)
Cache-Control: max-age=3600 // 3600초 (1시간) 동안 캐싱
ii. no-cache
: 캐싱된 데이터가 있어도 서버에서 유효성을 확인한 후 사용함
Cache-Control: no-cache
iii. no-store
: 데이터를 절대 캐싱하지 않음
Cache-Control: no-store
iv. must-revalidate
: 캐시된 콘텐츠가 만료된 경우, 클라이언트가 반드시 서버에 유효성 검사를 요청하도록 강제함
Cache-Control: public, max-age=3600, must-revalidate
v. public
: 모든 클라이언트와 프록시에서 캐싱 허용
Cache-Control: public, max-age=86400
vi. private
: 특정 사용자만 캐싱 가능
Cache-Control: private, max-age=3600
# Expires
- 특정 시점 이후 캐싱된 콘텐츠가 만료되었음을 알림
- HTTP/1.0에서 사용되었으며, 현재는 Cache-Control의 max-age로 대체됨
// 2024년 11월 21일 12시 이후에는 콘텐츠를 새로 가져와야 함
Expires: Wed, 21 Nov 2024 12:00:00 GMT
# Vary
- 서버 응답이 요청 헤더의 값에 따라 다를 수 있음을 알림
// 클라이언트의 언어에 따라 다른 데이터를 캐싱함
Vary: Accept-Language
# Pragma
- HTTP/1.0에서 사용되었으며, 현재는 Cache-Control로 대체됨
Pragma: no-cache
'CS' 카테고리의 다른 글
[CS] 해시 알고리즘 (Hash Algorithm) (0) | 2024.11.26 |
---|---|
[CS] 웹 보안(Web Security)과 주요 취약점 (0) | 2024.11.25 |
[CS] 백엔드 개발자 로드맵 따라가기 (진행중) (0) | 2024.11.23 |
[CS] 캐싱 전략 (0) | 2024.11.21 |
[CS] 인증 (Authentication) (0) | 2024.11.20 |