CloudFront 캐시에서 직접 처리되는 요청의 비율 증가(캐시 적중률) - Amazon CloudFront

CloudFront 캐시에서 직접 처리되는 요청의 비율 증가(캐시 적중률)

오리진 서버에서 콘텐츠를 제공하는 대신 CloudFront 캐시에서 직접 콘텐츠를 제공하는 최종 사용자 요청의 비율을 높임으로써 성능을 향상시킬 수 있습니다. 이를 캐시 적중률 개선이라고 합니다.

다음 섹션에서는 캐시 적중률을 개선하는 방법을 설명합니다.

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

캐시 적중률을 높이기 위해 객체에 Cache-Control max-age 명령을 추가하도록 오리진을 구성하고 max-age에 실질적으로 가장 긴 값을 지정할 수 있습니다. 캐시 주기가 짧을수록 CloudFront에서는 요청을 오리진에 더 자주 보내서 객체가 변경되었는지 여부를 확인하고 최신 버전을 가져옵니다. max-agestale-while-revalidatestale-if-error 지시문으로 보완하여 특정 조건에서 캐시 적중률을 더욱 개선할 수 있습니다. 자세한 내용은 콘텐츠가 캐시에 유지되는 기간(만료) 관리 단원을 참조하십시오.

Origin Shield 사용

CloudFront Origin Shield는 오리진 앞에 캐싱의 추가 계층을 제공하기 때문에 CloudFront 배포의 캐시 적중률을 개선하는 데 도움이 됩니다. Origin Shield를 사용하면 CloudFront의 모든 캐싱 계층에서 오리진에 이르는 모든 요청은 단일 위치에서 이루어집니다. CloudFront는 Origin Shield의 단일 오리진 요청을 사용하여 각 객체를 검색할 수 있으며 CloudFront 캐시의 다른 모든 계층(엣지 로케이션 및 리전 엣지 캐시)은 Origin Shield에서 객체를 검색할 수 있습니다.

자세한 내용은 Amazon CloudFront Origin Shield 사용 단원을 참조하세요.

쿼리 문자열 파라미터 기반 캐싱

쿼리 문자열 파라미터를 기반으로 캐싱하도록 CloudFront를 구성한 경우, 다음을 수행하면 캐싱 성능을 개선할 수 있습니다.

  • 오리진에서 고유한 객체를 반환하는 쿼리 문자열 파라미터만 전달하도록 CloudFront를 구성합니다.

  • 동일 파라미터의 전체 인스턴스에 대해서는 대문자 또는 소문자만 사용합니다. 예를 들어 하나의 요청에 parameter1=A가 포함되어 있고 다른 요청에는 parameter1=a가 포함된 경우, CloudFront에서는 요청에 parameter1=A가 포함되었을 때와 parameter1=a가 포함되었을 때 각각 별도의 요청을 오리진에 전달합니다. 그런 다음 CloudFront는 오리진에서 개별적으로 반환된 해당 객체를 별도로 캐싱합니다. 이는 이러한 객체가 실제로는 동일하더라도 마찬가지입니다. A 또는 a만 사용하는 경우, CloudFront에서는 오리진에 더 적은 요청을 전달하게 됩니다.

  • 파라미터를 같은 순서로 나열합니다. 다른 순서로 나열하는 경우, 객체에 대한 하나의 요청에 쿼리 문자열 parameter1=a&parameter2=b가 포함되어 있고 같은 객체의 다른 요청에는 parameter2=b&parameter1=a가 포함되어 있다면, CloudFront에서는 두 요청을 오리진에 모두 전달하고 해당 객체가 실제로는 동일한 경우라도 이를 개별적으로 캐싱합니다. 파라미터에 언제나 같은 순서를 사용한다면 CloudFront에서는 오리진에 더 적은 요청을 전달하게 됩니다.

자세한 내용은 쿼리 문자열 파라미터 기반의 콘텐츠 캐싱 단원을 참조하세요. CloudFront에서 오리진에 전달한 쿼리 문자열을 검토하려는 경우, CloudFront 로그 파일에서 cs-uri-query 열의 값을 확인합니다. 자세한 내용은 표준 로그(액세스 로그) 구성 및 사용 단원을 참조하세요.

쿠키 값 기반 캐싱

쿠키 값을 기반으로 캐싱하도록 CloudFront를 구성한 경우, 다음을 수행하면 캐싱 성능을 개선할 수 있습니다.

  • 전체 쿠키를 전달하는 대신 지정된 쿠키만 전달하도록 CloudFront를 구성합니다. CloudFront가 오리진에 전달하도록 구성하는 쿠키의 경우 CloudFront에서 쿠키 이름과 값의 모든 조합을 전달합니다. 그런 다음 오리진이 반환하는 객체를 별도로 캐시합니다(객체가 모두 동일한 경우도 마찬가지).

    예를 들어, 최종 사용자가 각 요청에 두 개의 쿠키를 포함했다고 가정하면, 각 쿠키는 3가지 값을 가질 수 있으며 이 모든 쿠키 값의 조합이 가능합니다. 즉, CloudFront에서는 각 객체에 대해 오리진에 최대 6가지 요청을 전달합니다. 오리진에서 오직 하나의 쿠키를 기반으로 서로 다른 버전의 객체를 반환하는 경우, CloudFront에서는 오리진에 필요한 것 이상의 요청을 전달하게 되며 불필요하게 동일한 버전의 객체를 여러 번 캐싱하게 됩니다.

  • 정적 콘텐츠와 동적 콘텐츠의 캐시 동작을 별도로 만들고 오리진에는 동적 콘텐츠에 대해서만 쿠키를 전달하도록 CloudFront를 구성합니다.

    예를 들어, 배포에 대한 하나의 캐시 동작이 있고 .js 파일 및 .css 파일과 같은 거의 변동이 없는 두 동적 콘텐츠에 대한 배포를 사용 중이라고 가정합니다. CloudFront에서는 쿠키 값을 바탕으로 .css 파일의 개별 버전을 캐싱하여 각 CloudFront 엣지 로케이션에서 각각의 새 쿠키 값 또는 쿠키 값들의 조합에 대한 요청을 오리진에 전달하도록 합니다.

    경로 패턴이 *.css이고 CloudFront에서 쿠키 값에 따라 캐싱하지 않는 캐시 동작을 만든 경우, CloudFront에서는 .css 파일에 대한 요청 중 엣지 로케이션에서 수신하는 지정된 .css 파일에 대한 첫 번째 요청과 .css 파일이 만료된 후의 첫 번째 요청만 오리진에 전달합니다.

  • 가능한 경우, 각 사용자(예: 사용자 ID)별로 쿠키 값이 고유한 동적 콘텐츠에 대해서와 더 작은 수의 고유 값에 따라 달라지는 동적 콘텐츠에 대해서 별도의 캐시 동작을 만듭니다.

자세한 내용은 쿠키 기반의 콘텐츠 캐싱 단원을 참조하세요. CloudFront에서 오리진에 전달한 쿠키를 검토하려는 경우, CloudFront 로그 파일에서 cs(Cookie) 열의 값을 확인합니다. 자세한 내용은 표준 로그(액세스 로그) 구성 및 사용 단원을 참조하세요.

요청 헤더 기반 캐싱

요청 헤더를 기반으로 캐싱하도록 CloudFront를 구성한 경우, 다음을 수행하면 캐싱 성능을 개선할 수 있습니다.

  • 전체 헤더를 기반으로 전달 및 캐싱하는 대신 지정된 헤더를 기반으로만 전달하고 캐싱하도록 CloudFront를 구성합니다. 지정한 헤더의 경우 CloudFront에서 헤더 이름과 값의 모든 조합을 전달합니다. 그런 다음 오리진이 반환하는 객체를 별도로 캐시합니다(객체가 모두 동일한 경우도 마찬가지).

    참고

    CloudFront에서는 다음 주제에서 지정한 헤더를 오리진에 항상 전달합니다.

    요청 헤더에 따라 캐싱하도록 CloudFront를 구성한 경우, CloudFront에서 헤더 값에 따라 객체를 캐싱하는 경우를 제외하고는 CloudFront에서 전달하는 헤더를 변경하지 않습니다.

  • 큰 수의 고유 값을 갖는 요청 헤더를 기반으로 캐싱하지 않도록 하십시오.

    예를 들어 사용자 디바이스에 따라 서로 다른 크기의 이미지를 제공하려는 경우, 매우 큰 값을 가질 수 있는 User-Agent 헤더를 기반으로 캐싱하도록 CloudFront를 구성하지 마십시오. 대신 CloudFront 디바이스 유형 헤더인 CloudFront-Is-Desktop-Viewer, CloudFront-Is-Mobile-Viewer, CloudFront-Is-SmartTV-ViewerCloudFront-Is-Tablet-Viewer를 기반으로 캐싱하도록 CloudFront를 구성하십시오. 또한 태블릿과 데스크톱에 대해 같은 버전의 이미지를 반환하려는 경우, CloudFront-Is-Tablet-Viewer 헤더가 아닌 CloudFront-Is-Desktop-Viewer 헤더만 전달하세요.

자세한 내용은 요청 헤더 기반의 콘텐츠 캐싱 단원을 참조하십시오.

압축이 불필요할 때 Accept-Encoding 헤더 제거

압축이 오리진이나 CloudFront에서 지원되지 않거나 압축 자체가 불가한 콘텐츠라서 압축 활성화가 어렵다면 다음과 같이 Custom Origin Header를 설정하는 오리진에 배포의 캐시 동작을 연결하여 캐시 적중률을 높일 수 있습니다.

  • Header name(헤더 이름)Accept-Encoding:

  • Header value(헤더 값): (공백으로 유지)

이 구성을 사용하면 CloudFront가 캐시 키에서 Accept-Encoding 헤더를 제거하며 오리진 요청에 해당 헤더를 포함하지 않습니다. 이 구성은 CloudFront가 해당 오리진에서의 배포를 통해 제공하는 모든 콘텐츠에 적용됩니다.

HTTP를 사용한 미디어 콘텐츠 제공

온디맨드 비디오(VOD) 및 스트리밍 비디오 콘텐츠를 최적화하는 방법에 대한 자세한 내용은 CloudFront를 사용한 온디맨드 비디오 및 라이브 스트리밍 비디오 단원을 참조하십시오.