메뉴
Amazon CloudFront
개발자 가이드 (API Version 2016-09-29)

객체가 CloudFront 엣지 캐시에 보관되는 시간 지정(만료)

CloudFront에서 다른 요청을 오리진에 전달하기 전에 객체를 CloudFront 캐시에 보관하는 시간을 제어할 수 있습니다. 이 기간을 단축함으로써 동적 콘텐츠를 제공할 수 있습니다. 이 기간이 늘어나면 객체가 엣지 캐시에서 바로 제공될 가능성이 높으므로 사용자에게 제공되는 성능이 향상됩니다. 보관 기간이 늘어나면 오리진에 걸리는 부하 역시 줄어듭니다.

일반적으로 CloudFront는 지정한 캐시 기간이 지날 때까지, 즉 객체가 만료될 때까지 엣지 로케이션에서— 객체를 제공합니다. 객체가 만료된 후 다음에 엣지 로케이션에서 이 객체에 대한 사용자 요청을 받으면, CloudFront에서는 이 요청을 오리진 서버로 전달하여 캐시에 최신 버전의 객체가 포함되어 있는지 확인합니다. 오리진의 응답은 객체 변경 여부에 따라 달라집니다.

  • CloudFront 캐시에 이미 최신 버전이 있는 경우 오리진에서는 304 상태 코드(수정되지 않음)를 반환합니다.

  • CloudFront 캐시에 최신 버전이 없는 경우 오리진에서는 200 상태 코드(OK)와 최신 버전의 객체를 반환합니다.

엣지 로케이션의 객체가 자주 요청되지 않는 경우 CloudFront에서는 만료 날짜 전에 이 객체를 제거하여 보다 최근에 요청된 객체를 위한 공간을 마련할 수 있습니다.

기본적으로 각 객체는 24시간 후에 자동으로 만료됩니다. 웹 배포의 경우, 기본 동작을 두 가지 방식으로 변경할 수 있습니다.

  • 동일한 경로 패턴과 일치하는 모든 객체에 대해 캐시 기간을 변경하려면 캐시 동작에 대한 [Minimum TTL], [Maximum TTL] 및 [Default TTL]의 CloudFront 설정을 변경할 수 있습니다. 개별 설정에 대한 자세한 내용은 Minimum TTL, Maximum TTLDefault TTL을 참조하십시오. 이러한 설정을 사용하려면 [Object Caching] 설정의[Customize] 옵션을 선택해야 합니다.

  • 개별 객체의 캐시 기간을 변경하려면 Cache-Control max-age 또는 Cache-Control s-maxage 명령 또는 Expires 헤더 필드를 객체에 추가하도록 오리진을 구성할 수 있습니다. 자세한 내용은 헤더를 사용하여 개별 객체의 캐시 기간 제어 단원을 참조하십시오.

[Minimum TTL], [Default TTL] 및 [Maximum TTL]이 Cache-Control max-ageCache-Control s-maxage 명령 및 Expires 헤더 필드와 상호 작용하는 방식에 대한 자세한 내용은 CloudFront에서 웹 배포용 객체를 캐싱하는 시간 지정 단원을 참조하십시오.

또한 CloudFront에서 다른 요청을 오리진에 전달하여 요청된 객체의 가져오기를 다시 시도하기 전에 오류(예: 404, 찾을 수 없음)가 CloudFront 캐시에 보관되는 시간 역시 제어할 수 있습니다. 자세한 내용은 CloudFront에서 HTTP 4xx 및 5xx 상태 코드를 처리 및 캐싱하는 방법 (오리진으로부터) 단원을 참조하십시오.

헤더를 사용하여 개별 객체의 캐시 기간 제어

Cache-ControlExpires 헤더를 사용하여 객체가 캐시에 머무르는 시간을 제어할 수 있습니다. [Minimum TTL], [Default TTL] 및 [Maximum TTL ]에 대한 설정은 캐시 기간에도 영향을 주지만 캐시 기간에 영향을 미치는 방식에 대한 개요는 다음과 같습니다.

  • Cache-Control max-age 명령을 사용하면 CloudFront에서 오리진 서버로부터 객체를 가져오기 전에 이 객체를 캐시에 보관하려는 시간(초)을 지정할 수 있습니다. CloudFront에서 지원되는 최소 만료 시간은 웹 배포의 경우 0초, RTMP 배포의 경우 3,600초입니다. 최대값은 100년입니다. 다음 형식으로 값을 지정합니다.

    Cache-Control: max-age=

    예를 들어, 다음 명령은 CloudFront에 3,600초(1시간) 동안 관련 객체를 캐시에 보관하도록 지시합니다.

    Cache-Control: max-age=3600

    브라우저 캐시에 보관하는 기간과는 다른 기간 동안 객체를 CloudFront 엣지 캐시에 보관하려는 경우, Cache-Control max-ageCache-Control s-maxage 명령을 함께 사용할 수 있습니다. 자세한 내용은 CloudFront에서 웹 배포용 객체를 캐싱하는 시간 지정 단원을 참조하십시오.

  • Expires 헤더 필드를 사용하면 다음과 같이 RFC 2616, Hypertext Transfer Protocol -- HTTP/1.1 Section 3.3.1, Full Date에 지정된 형식을 사용하여 만료 날짜와 시간을 지정할 수 있습니다.

    Sat, 27 Jun 2015 23:59:59 GMT

Expires 헤더 필드 대신 Cache-Control max-age 명령을 사용하여 객체 캐싱을 제어하는 것이 좋습니다. Cache-Control max-ageExpires 모두에 대해 값을 지정한 경우, CloudFront에서는 Cache-Control max-age의 값만 사용합니다.

자세한 내용은 CloudFront에서 웹 배포용 객체를 캐싱하는 시간 지정 단원을 참조하십시오.

뷰어의 GET 요청에 HTTP Cache-Control 또는 Pragma 헤더 필드를 사용하여 CloudFront가 객체에 대한 오리진 서버로 돌아가도록 할 수는 없습니다. CloudFront에서는 뷰어 요청의 헤더 필드를 무시합니다.

Cache-ControlExpires 헤더 필드에 대한 자세한 내용은 RFC 2616, Hypertext Transfer Protocol -- HTTP/1.1의 다음 단원을 참조하십시오.

PHP용 AWS SDK를 사용하여 Cache-ControlExpires 헤더 필드를 추가하는 방법의 예시는 Amazon Simple Storage Service 개발자 가이드Upload an Object Using the AWS SDK for PHP 단원을 참조하십시오. 일부 타사 도구를 사용하여 이러한 필드를 추가할 수도 있습니다.

CloudFront에서 웹 배포용 객체를 캐싱하는 시간 지정

웹 배포에서 Cache-Control 또는 Expires 헤더 및 CloudFront 최소, 최대 및 기본 TTL 값을 사용하여 다른 요청을 오리진에 전달하기 전에 CloudFront가 캐시에 객체를 보관하는 시간(초)를 제어할 수 있습니다. 헤더 값은 다른 요청을 CloudFront에 전달하기 전에 브라우저에서 객체를 캐시에 보관하는 시간도 결정합니다.

중요

하나의 캐시 동작에 대해 전체 헤더를 오리진에 전달하도록 CloudFront를 구성한 경우, CloudFront에서는 연결된 객체를 캐싱하지 않습니다. 대신 CloudFront에서는 그러한 객체에 대한 전체 요청을 오리진에 전달합니다. 그 구성에서 최소 TTL 값은 0이어야 합니다. 자세한 내용은 요청 헤더를 기반으로 객체를 캐싱하도록 CloudFront 구성 단원을 참조하십시오.

[Minimum TTL], [Maximum TTL] 및 [Default TTL]의 값을 지정하려면 [Object Caching] 설정의 [Customize] 옵션을 선택해야 합니다.

오리진 구성 최소 TTL = 0초 최소 TTL > 0초

오리진에서 Cache-Control max-age 명령을 객체에 추가

CloudFront 캐싱

CloudFront는 Cache-Control max-age 명령의 값 또는 CloudFront 최대 TTL의 값 중 더 작은 값 동안 객체를 캐싱합니다.

브라우저 캐싱

브라우저는 Cache-Control max-age 명령의 값 동안 객체를 캐싱합니다.

CloudFront 캐싱

CloudFront 캐싱은 CloudFront 최소 TTL과 최대 TTL 및 Cache-Control max-age 명령의 값에 따라 달라집니다.

  • 최소 TTL < max-age < 최대 TTL

    CloudFront는 Cache-Control max-age 명령의 값 동안 객체를 캐싱합니다.

  • max-age < 최소 TTL

    CloudFront는 CloudFront 최소 TTL의 값 동안 객체를 캐싱합니다.

  • max-age > 최대 TTL

    CloudFront는 CloudFront 최대 TTL의 값 동안 객체를 캐싱합니다.

브라우저 캐싱

브라우저는 Cache-Control max-age 명령의 값 동안 객체를 캐싱합니다.

오리진에서 Cache-Control max-age 명령을 객체에 추가하지 않음

CloudFront 캐싱

CloudFront는 CloudFront 기본 TTL의 값 동안 객체를 캐싱합니다.

브라우저 캐싱

브라우저에 따라 다릅니다.

CloudFront 캐싱

CloudFront는 CloudFront 최소 TTL 또는 기본 TTL의 값 중 더 큰 값 동안 객체를 캐싱합니다.

브라우저 캐싱

브라우저에 따라 다릅니다.

오리진에서 Cache-Control max-ageCache-Control s-maxage 명령을 객체에 추가

CloudFront 캐싱

CloudFront는 Cache-Control s-maxage 명령의 값 또는 CloudFront 최대 TTL의 값 중 더 작은 값 동안 객체를 캐싱합니다.

브라우저 캐싱

브라우저는 Cache-Control max-age 명령의 값 동안 객체를 캐싱합니다.

CloudFront 캐싱

CloudFront 캐싱은 CloudFront 최소 TTL과 최대 TTL 및 Cache-Control s-maxage 명령의 값에 따라 달라집니다.

  • 최소 TTL < s-maxage < 최대 TTL

    CloudFront는 Cache-Control s-maxage 명령의 값 동안 객체를 캐싱합니다.

  • s-maxage < 최소 TTL

    CloudFront는 CloudFront 최소 TTL의 값 동안 객체를 캐싱합니다.

  • s-maxage > 최대 TTL

    CloudFront는 CloudFront 최대 TTL의 값 동안 객체를 캐싱합니다.

브라우저 캐싱

브라우저는 Cache-Control max-age 명령의 값 동안 객체를 캐싱합니다.

오리진에서 Expires 헤더를 객체에 추가

CloudFront 캐싱

CloudFront는 Expires 헤더의 날짜 또는 CloudFront 최대 TTL의 값 중 더 빨리 도래하는 때까지 객체를 캐싱합니다.

브라우저 캐싱

브라우저는 Expires 헤더의 날짜까지 객체를 캐싱합니다.

CloudFront 캐싱

CloudFront 캐싱은 CloudFront 최소 TTL과 최대 TTL 및 Expires 헤더의 값에 따라 달라집니다.

  • 최소 TTL < Expires < 최대 TTL

    CloudFront는 Expires 헤더의 날짜와 시간까지 객체를 캐싱합니다.

  • Expires < 최소 TTL

    CloudFront는 CloudFront 최소 TTL의 값 동안 객체를 캐싱합니다.

  • Expires > 최대 TTL

    CloudFront는 CloudFront 최대 TTL의 값 동안 객체를 캐싱합니다.

브라우저 캐싱

브라우저는 Expires 헤더의 날짜와 시간까지 객체를 캐싱합니다.

오리진에서 Cache-Control: no-cache, no-store 및/또는 private 명령을 객체에 추가

CloudFront 및 브라우저에서는 헤더의 설정을 따릅니다.

CloudFront에서 Cache-Control: no-cache 헤더를 처리하는 방식에 대한 예외 사항은 동일 객체에 대한 동시 요청(트래픽 스파이크) 단원을 참조하십시오.

CloudFront 캐싱

CloudFront는 CloudFront 최소 TTL의 값 동안 객체를 캐싱합니다.

브라우저 캐싱

브라우저에서는 헤더의 설정을 따릅니다.

CloudFront 콘솔을 사용하여 웹 배포에 대한 설정을 변경하는 방법에 대한 자세한 내용은 CloudFront 배포 나열, 보기 및 업데이트 단원을 참조하십시오. CloudFront API를 사용하여 웹 배포에 대한 설정을 변경하는 방법에 대한 자세한 내용은 PUT Config 단원을 참조하십시오.

CloudFront에서 RTMP 배포용 객체를 캐싱하는 최소 시간 지정

RTMP 배포의 경우 CloudFront에서는 기본적으로 24시간 동안 엣지 캐시에 객체를 보관합니다. Cache-Control 또는 Expires 헤더를 객체에 추가하여 다른 요청을 오리진에 전달하기 전에 CloudFront에서 엣지 캐시에 객체를 보관하는 최소 시간을 변경할 수 있습니다. 최소 기간은 3,600초(1시간)입니다. 더 낮은 값을 지정하는 경우 CloudFront에서는 3,600초를 사용합니다.

Amazon S3 콘솔을 사용하여 객체에 헤더 추가

참고

Amazon S3 콘솔을 사용하면 한 번에 하나의 객체에만 헤더를 추가할 수 있지만, 일부 타사 도구를 사용하면 한 번에 여러 Amazon S3 객체에 헤더를 추가할 수 있습니다. Amazon S3를 지원하는 타사 도구에 대해 알아보려면 AWS S3 타사 도구로 웹 검색을 수행하십시오.

Amazon S3 콘솔을 사용하여 Cache-Control 또는 Expires 헤더 필드를 Amazon S3 객체에 추가하려면

  1. AWS Management Console에 로그인하고 https://console.aws.amazon.com/s3에서 Amazon S3 콘솔을 엽니다.

  2. Amazon S3 콘솔의 버킷 창에서 해당 파일이 포함된 버킷의 이름을 클릭합니다.

  3. 객체 목록에서 헤더 필드에 추가하려는 첫 번째 객체를 선택합니다.

  4. [Actions]를 클릭하고 [Properties]를 클릭합니다.

  5. 오른쪽 창에서 [Metadata]를 확장합니다.

  6. [Add More Metadata]를 클릭합니다.

  7. [Key] 목록에서 [Cache-Control] 또는 [Expires] 중에 해당되는 것을 클릭합니다.

  8. [Value] 필드에 다음 중 해당되는 값을 입력합니다.

    • Cache-Control 필드에는 다음을 입력합니다.

      max-age=number of seconds that you want objects to stay in a CloudFront edge cache

    • [Expires] 필드에는 HTML 형식의 날짜와 시간을 입력합니다.

  9. Save를 클릭합니다.

  10. 추가 객체에 헤더 필드를 추가하려는 경우, 다음 객체의 이름을 클릭하고 5~9단계를 반복합니다.