캐시

지니🧸·2023년 5월 1일
1

CS 저장소

목록 보기
40/48

캐시의 생명 주기

웹 브라우저가 여태 서버에 요청한 적 없는 리소스를 가져오려고 할 때, 서버와 브라우저는 HTTP 요청과 응답을 주고 받는데, HTTP 응답에 포함된 Cache-Control 헤더에 받은 값으로 리소스의 생명주기가 결정된다

유효 기간: max-age

서버의 Cache-Control 헤더의 값으로 max-age=<seconds> 또는 Expires 헤더 값을 지정해 이 리소스의 캐시가 유효한 시간을 결정할 수 있다.

유효 기간이 만료되기 전에 GET 요청이 또 들어오면 브라우저는 서버에 요청을 보내지 않고 디스크/메모리에서 캐시를 읽어와 사용한다. 한번 브라우저에 저장된 캐시는 만료될 때까지 계속 브라우저에 존재하기 때문에 CDN invalidation 등의 작업이 있어도 강제로 지우기는 어렵다.

재검증

유효 기간이 지난 캐시가 필요한 경우 브라우저는 서버에 조건부 요청을 통해 캐시의 유효성을 검증한다.

브라우저가 갖고 있는 캐시가 유효하다면, 서버는 304 Not Modified 응답을 보낸다. 유효하지 않다면 200 OK 등의 적합한 상태 코드와 함께 최신값을 내려준다. 추가로 HTTP 요청을 보내 새로 값을 받을 필요가 없어 효율적이다.

304 Not Modified 응답은 HTTP 본문을 포함하지 않기 때문에 매우 빠르게 내려받을 수 있다

no-cache와 no-store

no-cacheno-store는 Cache-Control의 값이다.

no-cache는 Cache-Control에서 max-age를 0으로 설정하는 것과 동일한 효과를 가져, 캐시를 저장하기는 하지만 사용할 때마다 서버에 재검증 요청을 보내야 한다

no-store는 캐싱 자체를 하면 안되는 리소스에 해당하는데, 캐시를 아예 저장도 하지 말라는 뜻이다. 해당 리소스는 캐시 저장소에 절대 저장되지 않는다

CDN (Content Delivery Network)

CDN은 콘텐츠 전송 기술로, 지리적 제약 없이 빠르고 안전하게 콘텐츠를 전송할 수 있다. 서버와 사용자 간의 물리적 거리를 줄여 콘텐츠 로딩에 소요되는 시간을 최소화하는데, 각 지역에 캐시 서버(PoP, Points of presence)를 분산 배치해, 근접한 사용자의 요청에 원본 서버 대신에 캐시 서버가 콘텐츠를 전달한다.

캐시의 위치

CDN과 같은 중간 서버를 사용하면 캐시는 여러 곳에 생길 수 있다. 사용자의 요청은 CDN에 전달되고, CDN은 서버에 응답을 받아와 캐싱하여, 사용자에게 캐시된 응답을 반환한다. 사용자는 이 때 받은 응답을 캐시한다.

CDN Invalidation

CDN invalidation은 CDN에 저장되어 있는 캐시를 삭제한다는 뜻이다. CDN 캐시와 브라우저 캐시는 각각 다른 곳에 위치하기 때문에 CDN 캐시의 삭제는 브라우저 캐시의 삭제와 관련 없다.

중간서버나 CDN이 여러개 존재하는 경우에는 중간 서버 각각에서 캐시를 삭제해야지만 전체 캐시를 삭제할 수 있다.

Cache-Control

CDN과 같은 중간 서버가 특정 리소스를 캐시할 수 있는지의 여부는 Cache-Control 헤더 값으로 public 또는 private을 추가하냐의 문제다.

public은 중간 서버를 포함한 모두가 캐시를 저장할 수 있다는 뜻이다.

private은 가장 끝의 사용자 브라우저만 캐시를 저장할 수 있다.

Cache-Control: public, max-age=86400

중간 서버에서만 적용되는 max-age값은 s-maxage 값으로 결정할 수 있다.

Cache-Control: s-maxage=31536000, max-age=0


참고: https://toss.tech/article/smart-web-service-cache

profile
우당탕탕

0개의 댓글