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

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

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

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

  • CloudFront 캐시에 이미 최신 버전이 있는 경우 오리진에서는 상태 코드 304 Not Modified를 반환합니다.

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

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

기본적으로 각 파일은 24시간 후에 자동으로 만료되지만, 다음 두 가지 방식으로 기본 동작을 변경할 수 있습니다.

최소 TTL, 기본 TTL최대 TTLCache-Control max-ageCache-Control s-maxage 명령 및 Expires 헤더 필드와 상호 작용하는 방식에 대한 자세한 내용은 CloudFront에서 객체를 캐싱하는 시간 지정 단원을 참조하십시오.

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

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

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

  • Cache-Control max-age 명령을 사용하면 CloudFront가 오리진 서버에서 객체를 다시 가져오기 전에 이 객체를 캐시에 보관하려는 시간(초)을 지정할 수 있습니다. CloudFront가 지원하는 최소 만료 시간은 0초입니다. 최대값은 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 개발자 안내서PHP용 AWS SDK를 사용하여 객체 업로드 단원을 참조하세요. 일부 타사 도구를 사용하여 이러한 필드를 추가할 수도 있습니다.

CloudFront에서 객체를 캐싱하는 시간 지정

CloudFront에서 오리진에 다른 요청을 보내기 전에 객체를 캐시에 보관하는 시간을 제어하려면 다음을 수행할 수 있습니다.

  • CloudFront 배포의 캐시 동작에서 최소값, 최대값 및 기본 TTL 값을 설정합니다. 캐시 동작에 연결된 캐시 정책(권장) 또는 레거시 캐시 설정에서 이러한 값을 설정할 수 있습니다.

  • 오리진의 응답에 Cache-Control 또는 Expires 헤더를 포함합니다. 또한 이러한 헤더는 CloudFront로 다른 요청을 보내기 전에 브라우저에서 브라우저 캐시에 객체를 유지하는 기간을 결정하는 데 도움이 됩니다.

다음 표에는 오리진에서 전송된 Cache-ControlExpires 헤더와 캐시 동작의 TTL 설정이 캐싱에 미치는 영향이 설명되어 있습니다.

오리진 헤더 최소 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가 Cache-Control: no-cache, no-store 및/또는 private 지시문이 포함된 오리진에서 객체를 가져온 다음 나중에 동일한 객체에 대한 다른 최종 사용자 요청을 가져오는 경우 CloudFront는 오리진에 연결하여 최종 사용자 요청을 이행하려고 시도합니다.

오리진에 연결할 수 있는 경우 CloudFront는 오리진에서 객체를 가져와 최종 사용자에게 반환합니다.

오리진에 연결할 수 없고 최소 TTL이 0보다 큰 경우 CloudFront는 이전에 오리진에서 가져온 객체를 제공합니다. 이 동작을 방지하려면 오리진에서 반환된 객체에 Cache-Control: stale-if-error=0 지시문을 포함합니다. 이렇게 하면 향후 요청 시 오리진에 연결할 수 없을 때 CloudFront가 이전에 오리진에서 가져온 객체를 반환하는 대신 오류를 반환합니다.

CloudFront 콘솔을 사용하여 배포에 대한 설정을 변경하는 방법에 대한 자세한 내용은 배포 업데이트 섹션을 참조하세요. CloudFront API를 사용하여 배포에 대한 설정을 변경하는 방법에 대한 자세한 내용은 UpdateDistribution을 참조하세요.

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

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

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

  2. 버킷 목록에서 헤더를 추가할 파일을 포함하는 버킷 이름을 선택합니다.

  3. 헤더를 추가할 파일 또는 폴더의 이름 옆에 있는 확인란을 선택합니다. 폴더에 헤더를 추가하면 해당 폴더 내 모든 파일에 영향을 줍니다.

  4. [작업(Actions)]을 선택하고 [메타데이터 편집(Edit metadata)]을 선택합니다.

  5. [메타데이터 추가(Add metadata)] 패널에서 다음을 수행합니다.

    1. [메타데이터 추가(Add metadata)]를 선택합니다.

    2. [유형(Type)]에서 [시스템 정의(System defined)]를 선택합니다.

    3. [키(Key)]에서 추가할 헤더의 이름(Cache-Control 또는 Expires)을 선택합니다.

    4. [값(Value)]에 헤더 값을 입력합니다. 예를 들어, Cache-Control 헤더의 경우 max-age=86400을 입력할 수 있습니다. Expires의 경우 만료 날짜 및 시간(예: Wed, 30 Jun 2021 09:28:00 GMT)을 입력할 수 있습니다.

  6. 페이지 하단에서 [메타데이터 편집(Edit metadata)]을 선택합니다.