728x90

Cloud front 란?

https://docs.aws.amazon.com/ko_kr/AmazonCloudFront/latest/DeveloperGuide/Introduction.html

 

Amazon CloudFront란 무엇입니까? - Amazon CloudFront

Amazon CloudFront란 무엇입니까? Amazon CloudFront는 .html, .css, .js 및 이미지 파일과 같은 정적 및 동적 웹 콘텐츠를 사용자에게 더 빨리 배포하도록 지원하는 웹 서비스입니다. CloudFront는 엣지 로케이션

docs.aws.amazon.com

 

cloud front 설정의 cache 의 TTL 을 설정할때 min, max default 값이 있따는 것은 Origin (s3) 에서 보낸 Metadata 의 Cache-Control 값을 존중해서 사용한다는 뜻입니다.

 

cloud front 의 Min 보다 작은 값을 Origin 에서 보내오면 min 값을 TTL 값으로 사용하겠다는 뜻이며, cloud front 의 max 값 보다 큰 값을 Origin 에서 보내오면 max 값을 TTL 값으로 사용한다는 뜻입니다.

또한, Origin 에서 특정한 Cache-Control 값이 없으면 Default 값을 사용한다는 뜻입니다.

 

TTL 이 긴데도 불구하고 Cache Miss 가 나는 경우

  • 처음 요청하는 Object 인 경우
  • 해당 Region 의 edge 서버 들에 부하가 있어 다른 region 으로 라우팅 되었을 경우
    • cache 는 region 별로 달리 저장되기 때문에 다른 region 으로 라우팅 되면 miss 가 발생 할 수 있음

동작방식

cloud front 의 설정은 origin server 의 데이터를 캐싱하는 설정이고 client 에서 ttl 시간 내에 반복적으로 보내온 요청을 origin server 에 물어보지 않고 바로 cloud front 가 처리함

web browser 가 캐싱 했다가 cf 에 다시 요청해야 하는 기간 TTL 이 만료되고 브라우저에서 CF 로 요청 CF 에 캐싱이 없으면

origin server 로 요청 customize 로 설정되어 있는 경우 origin server 의 cache control 을 최대한 존중

Use origin cache headers 일 경우 cache-control 을 그대로 사용

 

Status code [200, 304]

200 - hit from cloud front

304 - hit from cloud front

https://docs.aws.amazon.com/ko_kr/AmazonCloudFront/latest/DeveloperGuide/Expiration.html#ExpirationDownloadDist

 

콘텐츠가 캐시에 유지되는 기간(만료) 관리 - Amazon CloudFront

CloudFront가 Cache-Control: no-cache, no-store 및/또는 private 지시문이 포함된 오리진에서 객체를 가져온 다음 나중에 동일한 객체에 대한 다른 최종 사용자 요청을 가져오는 경우 CloudFront는 오리진에 연

docs.aws.amazon.com

 

AWS 문서에 따르면 cache-control 이 없으면 browser 에 대한 cache 는 browser 마다 각각 다르다.

CF 설정은 TTL 은 cloud front 단에서 관리하는 캐시 설정이므로 browser 에서 캐싱이 만료되면 cf로 요청한다.

CF 에서 아직 캐싱이 유요하다면 cache hit 이고 cloud front 에 캐싱 된 object etag 와 비교하여 변경된게 없으면 304 status 를 response 한다.

 

Browser Request Header
- cache-control: max-age=0 
- if-modified-since: Tue, 27 Sep 2022 02:37:48 GMT
- if-none-match: "7ajsdklfjalskdnvklznxcklvjlzdksjfkla"

 

본 헤더의 의미는 Browser에 컨텐츠가 캐시되어 있으며, Browser에 캐시된 컨텐츠를 사용하기 위해 유효한지 확인을 위해 브라우저->CloudFront로 유효성 검사 요청입니다.

(if-modified-since, if-none-match은 이전에 컨텐츠가 수신/캐시되었을때 응답 헤더에서 확인된 Last-modified, Etag 값 이용)

 

CloudFront에서는 유효성 검사시 위의 값을 비교하여  결과가 유효한 경우 304 Not modified로 응답 헤더만 전달하며, 

유효하지 않은 경우 200 OK로 신규 컨텐츠 전달합니다.

 

해당 요청을 보낸 주체는 Browser이며, 요청을 수신하여 맞는 응답을 전달한 것은 CloudFront PoP입니다.

728x90