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

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

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

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

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

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

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

엣지 로케이션의 파일이 자주 요청되지 않는 경우, CloudFront 최근에 요청된 파일을 위한 공간을 확보하기 위해 파일을 제거하고 만료일 전에 파일을 제거할 수 있습니다.

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

최소 TTL(Minimum TTL), 기본 TTL(Default TTL)최대 TTL(Maximum TTL)max-ages-maxage 명령 및 Expires 헤더 필드와 상호 작용하는 방식에 대한 자세한 내용은 객체를 캐시하는 CloudFront 시간 지정 섹션을 참조하세요.

오리진에 다른 요청을 전달하여 요청된 객체를 다시 CloudFront 가져오려고 시도하기 전에 오류 (예:404 Not Found) 가 CloudFront 캐시에 남아 있는 기간을 제어할 수도 있습니다. 자세한 설명은 오리진의 HTTP 4xx 및 5xx 상태 코드를 CloudFront 처리하고 캐시하는 방법 섹션을 참조하세요.

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

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

  • Cache-Control max-age 디렉티브를 사용하면 원본 서버에서 객체를 다시 CloudFront 가져오기 전에 객체가 캐시에 남아 있을 기간 (초) 을 지정할 수 있습니다. CloudFront 지원되는 최소 만료 시간은 0초입니다. 최대값은 100년입니다. 다음 형식으로 값을 지정합니다.

    Cache-Control: max-age=

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

    Cache-Control: max-age=3600

    객체를 브라우저 캐시에 있는 기간과 다른 기간 동안 CloudFront 엣지 캐시에 보관하려는 경우 및 지시문을 함께 사용할 수 있습니다. Cache-Control max-age Cache-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 시간 지정 섹션을 참조하세요.

객체를 찾기 위해 원본 서버로 강제로 CloudFront 돌아가라는 최종 사용자의 GET 요청에는 HTTP Cache-Control 또는 Pragma 헤더 필드를 사용할 수 없습니다. CloudFront 뷰어 요청에서 해당 헤더 필드를 무시합니다.

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

오래된(만료된) 콘텐츠 제공

CloudFront Stale-While-RevalidateStale-If-Error 캐시 제어 지시문을 지원합니다.

  • stale-while-revalidate 디렉티브를 사용하면 CloudFront 오리진에서 새 버전을 비동기적으로 가져오는 동안 캐시에서 오래된 콘텐츠를 제공할 수 있습니다. 이렇게 하면 사용자가 백그라운드 가져오기를 기다릴 필요 없이 엣지 로케이션에서 CloudFront 즉시 응답을 수신하고 향후 요청을 위해 새로운 콘텐츠가 백그라운드에서 로드되므로 지연 시간이 개선됩니다.

    다음 예시에서는 응답을 1시간 동안 CloudFront 캐시합니다 ()max-age=3600. 이 기간 이후에 요청하면 오래된 콘텐츠를 CloudFront 제공하는 동시에 오리진에 캐시된 콘텐츠를 다시 검증하고 새로 고치라는 요청을 보냅니다. 오래된 콘텐츠는 콘텐츠가 재검증되는 동안 최대 10분(stale-while-revalidate=600) 동안 제공됩니다.

    Cache-Control: max-age=3600, stale-while-revalidate=600
  • stale-if-error 지침은 오리진에 연결할 수 없거나 CloudFront 500~600 사이의 오류 코드를 반환하는 경우 캐시에서 오래된 콘텐츠를 제공할 수 있도록 허용합니다. 이를 통해 뷰어가 오리진 가동 중단 중에도 콘텐츠에 액세스할 수 있습니다.

    다음 예제에서는 응답을 1시간 동안 CloudFront 캐시합니다 (). max-age=3600 이 기간이 지난 후 오리진이 다운되거나 오류가 반환되는 경우, 최대 24시간 동안 오래된 콘텐츠를 CloudFront 계속 제공합니다 ()stale-if-error=86400.

    Cache-Control: max-age=3600, stale-if-error=86400
    참고

    사용자 지정 오류 stale-if-error 응답과 사용자 지정 오류 응답을 모두 구성한 경우 지정된 기간 내에 오류가 발생하면 CloudFront 먼저 오래된 콘텐츠를 제공하려고 시도합니다. stale-if-error 오래된 콘텐츠를 사용할 수 없거나 콘텐츠 stale-if-error 기간이 지난 경우 해당 오류 상태 코드에 구성된 사용자 지정 오류 응답을 CloudFront 제공합니다.

둘 다 함께 사용

stale-while-revalidatestale-if-error는 지연 시간을 줄이고 오리진이 응답하거나 복구하기 위한 버퍼를 추가하도록 함께 사용할 수 있는 독립적인 캐시 제어 지시문입니다.

다음 예제에서는 응답을 1시간 동안 CloudFront 캐시합니다 (). max-age=3600 이 기간 이후에 요청하면 콘텐츠를 다시 검증하는 동안 최대 10분 (stale-while-revalidate=600) 동안 오래된 콘텐츠를 CloudFront 제공합니다. 원본 서버가 콘텐츠를 다시 CloudFront 확인하려고 시도하는 중에 오류를 반환하면 최대 24시간 동안 오래된 콘텐츠를 CloudFront 계속 제공합니다 (). stale-if-error=86400

Cache-Control: max-age=3600, stale-while-revalidate=600, stale-if-error=86400
작은 정보

캐싱은 성능과 최신 상태 사이의 균형을 유지하는 것입니다. stale-while-revalidatestale-if-error와 같은 지시문을 사용하면 성능과 사용자 경험을 향상할 수 있지만 원하는 콘텐츠의 최신 상태에 맞게 구성을 조정해야 합니다. 오래된 콘텐츠 지시문은 콘텐츠를 새로 고쳐야 하지만 최신 버전이 필요하지 않은 사용 사례에 가장 적합합니다. 또한 콘텐츠가 전혀 또는 거의 변경되지 않는 경우 stale-while-revalidate로 인해 불필요한 네트워크 요청이 추가될 수 있습니다. 대신 캐시 기간을 길게 설정하는 것이 좋습니다.

객체를 캐시하는 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디렉티브 값과 최대 TTL 값 중 더 작은 값으로 객체를 캐싱합니다. CloudFront

브라우저 캐싱

브라우저는 Cache-Control: max-age 지시문의 값 동안 객체를 캐싱합니다.

CloudFront 캐싱

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

  • 최소 TTL < max-age < 최대 TTL인 경우 디렉티브 값에 대해 객체를 CloudFront 캐싱합니다. Cache-Control: max-age

  • 최소 TTL max-age 미만인 경우 최소 TTL 값만큼 객체를 CloudFront 캐시에 저장합니다. CloudFront

  • 최대 max-age TTL보다 큰 경우 최대 TTL 값만큼 객체를 CloudFront 캐시에 저장합니다. CloudFront

브라우저 캐싱

브라우저는 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디렉티브 값과 최대 TTL 값 중 더 작은 값으로 객체를 캐싱합니다. CloudFront

브라우저 캐싱

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

CloudFront 캐싱

CloudFront 캐싱은 CloudFront 최소 TTL 및 최대 TTL 값과 지시문에 따라 달라집니다. Cache-Control: s-maxage

  • 최소 TTL < s-maxage < 최대 TTL인 경우 디렉티브 값에 대해 객체를 CloudFront 캐싱합니다. Cache-Control: s-maxage

  • 최소 TTL s-maxage 미만인 경우 최소 TTL 값만큼 객체를 CloudFront 캐시에 저장합니다. CloudFront

  • 최대 s-maxage TTL보다 큰 경우 최대 TTL 값만큼 객체를 CloudFront 캐시에 저장합니다. CloudFront

브라우저 캐싱

브라우저는 Cache-Control: max-age 지시문의 값 동안 객체를 캐싱합니다.

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

CloudFront 캐싱

CloudFront Expires헤더의 날짜 또는 CloudFront 최대 TTL 값 중 더 빠른 날짜까지 객체를 캐시합니다.

브라우저 캐싱

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

CloudFront 캐싱

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

  • 최소 TTL < Expires < 최대 TTL인 경우 헤더의 날짜 및 시간까지 객체를 CloudFront 캐싱합니다. Expires

  • 최소 TTL Expires 미만인 경우 최소 TTL 값만큼 객체를 CloudFront 캐시에 저장합니다. CloudFront

  • 최대 Expires TTL보다 큰 경우 최대 TTL 값만큼 객체를 CloudFront 캐시에 저장합니다. CloudFront

브라우저 캐싱

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

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

CloudFront 그리고 브라우저는 헤더를 존중합니다.

CloudFront 캐싱

CloudFront CloudFront 최소 TTL 값만큼 객체를 캐싱합니다. 이 표 아래의 경고를 참조하세요.

브라우저 캐싱

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

주의

오리진에서Cache-Control: no-cache,no-store, 및/또는 private 디렉티브를 포함하는 객체를 가져왔다가 나중에 같은 객체에 대한 또 다른 최종 사용자 요청을 CloudFront CloudFront 받는 경우, 오리진에 접속하여 뷰어 요청을 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)]을 선택합니다.