Amazon CloudFront
개발자 안내서 (API 버전 2016-09-29)

압축된 파일 제공

최종 사용자 요청이 요청 헤더에 Accept-Encoding: gzip을 포함하는 경우 특정 유형의 파일을 자동으로 압축하고 압축된 파일을 제공하도록 CloudFront를 구성할 수 있습니다. 콘텐츠가 압축되면 파일 크기가 더 작아지므로— 다운로드 속도가 빨라집니다. 원래 크기의 1/4 이하로 줄어드는 경우도 있습니다. JavaScript 및 CSS 파일의 경우 특히 다운로드 속도가 빨라지면 사용자에게 표시되는 웹 페이지의 렌더링 속도가 빨라집니다. 또한 CloudFront 데이터 전송 비용은 총 데이터 제공량에 따라 달라지므로, 압축된 파일을 제공함으로써 압축되지 않은 파일을 제공할 때에 비해 비용이 절감됩니다.

중요

최종 사용자 요청에는 요청 헤더에 Accept-Encoding: gzip이 포함되어 있어야 하며 그렇지 않은 경우 CloudFront는 요청한 파일을 압축하지 않습니다.

사용자 지정 오리진 또는 Amazon S3 오리진을 사용하는 경우, CloudFront 압축과 관계없이 파일을 압축하도록 오리진을 구성할 수 있습니다. 오리진은 CloudFront가 압축하지 않는 파일 유형을 압축할 수 있습니다. (CloudFront가 압축하는 파일 유형 단원을 참조하십시오.) 오리진이 CloudFront에 압축된 파일을 반환하는 경우, CloudFront는 Content-Encoding 헤더의 값을 기반으로 파일이 압축되었음을 감지하고 파일을 다시 압축하지 않습니다.

콘텐츠를 압축하도록 CloudFront 배포 구성

배포가 콘텐츠를 압축하도록 구성하려면 다음 방법 중 하나를 사용하여 압축 콘텐츠에 적용하려는 캐시 동작을 업데이트합니다.

  • CloudFront 콘솔자동으로 객체를 압축 설정을 업데이트합니다. 자세한 내용은 배포 만들기 단원을 참조하십시오.

  • CloudFront APICompress 요소의 값을 true로 변경합니다. 자세한 내용은 CreateDistribution 또는 UpdateDistribution을 참조하십시오.

  • AWS SDK 중 하나AWS 설명서 페이지에서 SDK 설명서를 참조하십시오.

  • AWS CLI – 자세한 내용은 AWS CLI Command Referencecreate-distribution 또는 update-distribution을 참조하십시오.

CloudFront를 사용하여 콘텐츠 압축

CloudFront는 Amazon S3 오리진과 사용자 지정 오리진 모두에 대해 파일을 압축할 수 있습니다. 콘텐츠를 압축하도록 CloudFront를 구성하는 경우, 캐시 동작에서 설정을 지정합니다.

콘텐츠를 압축하도록 CloudFront를 구성하는 경우, CloudFront가 콘텐츠를 제공하는 방법은 다음과 같습니다.

  1. CloudFront 배포를 생성 또는 업데이트하고 콘텐츠를 압축하도록 CloudFront를 구성합니다.

  2. 최종 사용자가 파일을 요청합니다. 최종 사용자가 Accept-Encoding: gzip 헤더를 요청에 추가합니다. 이는 최종 사용자가 압축된 콘텐츠를 지원함을 의미합니다.

  3. 이 엣지 로케이션에서 CloudFront는 요청에서 참조된 파일의 압축된 버전의 캐시를 확인합니다.

  4. 압축된 파일이 이미 캐시에 있는 경우, CloudFront는 최종 사용자에 파일을 반환하고 나머지 단계를 건너뜁니다.

  5. 압축된 파일이 캐시에 없는 경우, CloudFront는 오리진 서버에 요청을 전달하는데, 이것은 Amazon S3 버킷 또는 사용자 지정 오리진 중 하나입니다.

    참고

    CloudFront가 캐시에 압축되지 않은 버전의 파일이 있는 경우에도 오리진에 요청을 전달합니다.

  6. 오리진 서버는 CloudFront에 요청한 파일의 압축되지 않은 버전을 반환합니다.

  7. CloudFront는 파일을 압축할 수 있는지 확인합니다.

    • 파일은 CloudFront가 압축하는 유형이어야 합니다.

    • 파일 크기는 1,000 ~ 10,000,000바이트 사이여야 합니다.

    • 응답에는 Content-Length 헤더가 포함되어 있어 CloudFront에서 파일의 크기가 CloudFront가 압축하는 범위에 있는지 확인할 수 있도록 해야 합니다. Content-Length 헤더가 빠진 경우, CloudFront는 파일을 압축하지 않습니다.

    • 응답에 Content-Encoding 헤더가 포함되어서는 안 됩니다.

  8. 파일을 압축할 수 있는 경우, CloudFront는 압축하고 최종 사용자에 압축된 파일을 반환하고 캐시에 추가합니다.

  9. 최종 사용자는 파일을 압축 해제합니다.

다음을 참조하십시오.

CloudFront가 압축하는 파일 유형

CloudFront는 파일을 여러 가지 파일 유형으로 압축합니다. 전체 목록은 CloudFront가 압축하는 파일 유형 단원을 참조하십시오.

CloudFront가 압축하는 파일 크기

CloudFront는 1,000바이트 ~10,000,000바이트 크기의 파일을 압축합니다.

Content-Length 헤더

오리진에는 응답의 Content-Length 헤더가 포함되어 있어 CloudFront에서 파일의 크기가 CloudFront가 압축하는 범위에 있는지 확인할 수 있도록 해야 합니다. Content-Length 헤더가 빠진 경우, CloudFront는 파일을 압축하지 않습니다.

Etag 헤더

콘텐츠를 압축하도록 CloudFront를 구성하는 경우, CloudFront는 압축하는 파일에서 ETag 응답 헤더를 제거합니다. ETag 헤더가 있는 경우, CloudFront와 오리진은 그것을 사용하여 CloudFront 엣지 캐시의 파일 버전이 오리진 서버의 버전과 동일한지 확인할 수 있습니다. 하지만 압축 후 두 버전은 더 이상 동일하지 않게 됩니다. 따라서 압축된 파일이 만료되고 CloudFront가 오리진에 다른 요청을 전달하는 경우, 오리진은 항상 HTTP 상태 코드 304(수정되지 않음) 대신에 CloudFront에 파일을 반환합니다.

파일을 압축하도록 CloudFront를 구성하는 경우 이미 엣지 로케이션에 포함된 콘텐츠

CloudFront는 오리진에서 파일을 가져올 때 각 엣지 로케이션에 파일을 압축합니다. 콘텐츠를 압축하도록 CloudFront를 구성하는 경우, 이미 엣지 로케이션에 포함된 파일은 압축하지 않습니다. 또한 엣지 로케이션에서 파일이 만료되고 CloudFront가 오리진에 파일에 대한 다른 요청을 전달하는 경우, CloudFront는 오리진이 HTTP 상태 코드 304를 반환하는 경우 파일을 압축하지 않기 때문에 엣지 로케이션에는 이미 최신 버전의 파일이 포함되어 있습니다. CloudFront으로 이미 엣지 로케이션에 포함된 파일을 압축하려는 경우, 그 파일을 무효화해야 합니다. 자세한 내용은 파일 무효화 단원을 참조하십시오.

사용자 지정 오리진이 이미 파일을 압축하도록 구성된 경우

파일을 압축하도록 CloudFront를 구성하고 CloudFront가 역시 파일을 압축하도록 구성된 사용자 지정 오리진에 요청을 전달하는 경우, 사용자 지정 오리진에는 Content-Encoding 헤더가 포함되는데, 이를 통해 오리진이 CloudFront에 반환한 파일이 이미 압축되었음을 표시합니다. CloudFront는 최종 사용자에 캐싱된 파일을 반환하고 엣지 로케이션에서 캐싱합니다.

참고

응답에 Content-Encoding 헤더가 포함되어 있는 경우, CloudFront는 값과 관계없이 파일을 압축하지 않습니다.

요청에 Accept-Encoding: gzip이 포함되지 않는 경우

요청에 Accept-Encoding 헤더가 빠져 있는 경우, CloudFront는 압축되지 않은 콘텐츠를 제공합니다. Accept-Encoding 헤더에 deflate 또는 sdch와 같은 추가 값이 포함된 경우, CloudFront 에서는 오리진 서버에 요청을 전달하기 전에 이를 제거합니다.

HTTP 1.0을 사용하는 요청

CloudFront에 대한 요청이 HTTP 1.0을 사용하는 경우 CloudFront는 Accept-Encoding 헤더를 제거하고 압축되지 않은 콘텐츠를 제공합니다.

CloudFront가 사용 중인 경우

드물긴 해도 CloudFront 엣지 로케이션이 현저한 수준으로 사용 중인 경우, 일부 파일은 압축되지 않을 수 있습니다.

CloudFront가 압축하는 파일 유형

콘텐츠를 압축하도록 CloudFront를 구성하는 경우, CloudFront는 Content-Type 헤더에 다음 값이 포함된 파일을 압축합니다.

application/dash+xml

application/x-opentype

application/eot

application/x-otf

application/font

application/x-perl

application/font-sfnt

application/x-ttf

application/javascript

font/eot

application/json

font/ttf

application/opentype

font/otf

application/otf

font/opentype

application/pkcs7-mime

image/svg+xml

application/truetype

text/css

application/ttf

text/csv

application/vnd.ms-fontobject

text/html

application/vnd.apple.mpegurl

text/javascript

application/xhtml+xml

text/js

application/xml

text/plain

application/xml+rss

text/richtext

application/x-font-opentype

text/tab-separated-values

application/x-font-truetype

text/xml

application/x-font-ttf

text/x-script

application/x-httpd-cgi

text/x-component

application/x-javascript

text/x-java-source

application/x-mpegurl

vnd.apple.mpegurl

사용자 지정 오리진을 사용하여 콘텐츠 압축

CloudFront는 gzip을 사용하여 몇 가지 유형의 파일을 압축할 수 있습니다(CloudFront가 압축하는 파일 유형 참조). 그러나 다른 유형의 파일을 압축하거나 gzip이 아닌 압축 알고리즘(예: brotli)을 사용하려면 자체 서버에서 파일을 압축한 후 해당 파일을 CloudFront를 사용하여 제공하면 됩니다.

CloudFront를 사용하여 gzip 이외의 압축 알고리즘으로 압축된 파일을 제공하려면 Accept-Encoding 헤더를 기반으로 캐시하도록 CloudFront를 설정합니다. 이렇게 하면 CloudFront가 Accept-Encoding 헤더를 변경하지 않으며 오리진이 최종 사용자에게 해당 압축 파일을 반환할 수 있습니다.

오리진이 CloudFront에 압축된 파일을 반환하는 경우, Content-Encoding 헤더를 포함하여 파일이 이미 압축되었음을 CloudFront에 알립니다. 그다음 CloudFront는 압축된 파일을 최종 사용자에게 반환합니다.

Amazon S3 오리진을 사용하여 콘텐츠 압축

Amazon S3를 사용하여 콘텐츠를 저장할 때 gzip 압축 알고리즘을 사용하려면 CloudFront를 사용하여 콘텐츠를 압축할 수 있습니다. 그러나 gzip 대신 또는 gzip 이외에 brotli 등과 같은 다른 압축 알고리즘을 사용하려고 할 수 있습니다.

파일을 압축한 후, 예를 들어 다음과 같이 CloudFront로 파일을 제공할 수 있습니다.

  • Accept-Encoding 헤더를 기반으로 하여 캐시하도록 CloudFront를 구성합니다.

  • 오리진 요청 시 트리거되는 Lambda@Edge 함수를 사용하여 URI를 변경해서 Accept-Encoding 헤더에 기초하여 반환하려는 압축 파일을 가리키게 합니다.

  • 최종 사용자가 압축된 파일의 형식을 확인할 수 있도록 S3에 저장하는 파일에 콘텐츠 인코딩 메타데이터를 추가합니다. 자세한 내용은 Amazon Simple Storage Service 콘솔 사용 설명서의 S3 객체에 메타데이터를 추가하려면 어떻게 해야 합니까?를 참조하십시오.

오리진 서버가 IIS를 실행 중일 때 압축된 파일 제공

기본적으로 IIS에서는 CloudFront와 같은 프록시 서버를 통해 들어오는 요청에 대해 압축된 콘텐츠를 제공하지 않습니다. IIS를 사용 중인 경우 httpCompression 요소를 사용하여 콘텐츠를 압축하도록 IIS를 구성했다면, IIS에서 압축된 콘텐츠를 CloudFront에 반환하도록 noCompressionForProxies 속성의 값을 false로 변경합니다.

또한 몇 초 단위보다 요청된 빈도가 낮은 객체를 압축한 경우 frequentHitThresholdfrequentHitTimePeriod의 값을 변경해야 할 수 있습니다.

자세한 내용은 Microsoft 웹 사이트에서 IIS 설명서를 참조하십시오.

오리진 서버가 NGINX를 실행 중일 때 압축된 파일 제공

CloudFront에서 오리진 서버에 요청을 전달할 때는 Via 헤더를 포함합니다. 이렇게 하면 NGINX에서 요청이 프록시 설정된 것으로 해석되며, 기본적으로 NGINX에서는 프록시 설정된 요청의 압축을 비활성화합니다. NGINX의 버전에 gzip_proxied 설정이 포함된 경우, NGINX에서 압축된 콘텐츠를 CloudFront에 반환하도록 이 값을 any로 변경합니다. 자세한 내용은 ngx_http_gzip_module 모듈에 대한 NGINX 설명서를 참조하십시오.