동적 압축 사용 설정

동적 압축은 Cloud CDN에서 제공하는 응답을 자동으로 압축합니다. 네트워크를 통해 전송되는 데이터의 크기는 일반적인 경우 60%~85%까지 감소합니다.

크기를 줄이면 콘텐츠를 다운로드하는 데 걸리는 시간이 줄어듭니다. 스타일시트(CSS), 스크립트(자바스크립트), 동영상 매니페스트(HLS/DASH)와 같은 중요한 애셋의 경우 페이지 로드 및 동영상 시작 시간을 줄일 수 있습니다.

응답 압축의 이점에 대한 자세한 내용은 웹 기초 가이드를 참조하세요.

백엔드 서비스 또는 백엔드 버킷에서 압축을 사용 설정할 수 있습니다.

사용 사례 예시

동적 압축은 Cloud CDN 에지에서 클라이언트로 전송되는 데이터의 크기를 직접 줄입니다. 이 작업은 다음을 직접 수행할 수 있습니다.

  • CSS 및 자바스크립트 크기를 줄이면 웹페이지가 더 빠르게 렌더링되고 중요한 웹 성능 측정항목인 콘텐츠가 포함된 첫 페인트가 표시되는 시간이 줄어듭니다.
  • JSON 페이로드와 같은 REST API 응답을 캐싱할 때 큰 긍정적인 영향을 미칩니다. 이러한 페이로드는 반복되는 키, 공백, 중괄호로 인해 잘 압축됩니다. 5~10초 동안의 공개 API 캐싱은 데이터의 최신 상태를 유지하면서 원본 부하를 줄이는 데 널리 사용됩니다.

    캐싱이 없어도 이러한 응답을 압축하면 전송되는 총 바이트를 최대 90%까지 줄일 수 있습니다.

  • 동영상 전송을 위한 재생 시작 시간과 실시간 스트리밍의 조인 지연 시간을 개선합니다. 대규모 실시간 재생목록(매니페스트)에는 HLS 또는 DASH 재생목록 메타데이터는 물론 각 세그먼트의 호스트 + 경로 프리픽스가 포함된 상당한 양의 반복 데이터가 있습니다. 재생목록 로드 또는 재생목록 업데이트가 더 빨리 다운로드될수록 클라이언트가 참조된 동영상 세그먼트 파싱 및 다운로드를 대기하는 시간이 줄어듭니다. HLS 및 DASH 재생목록은 총 크기가 90% 넘게 감소하는 경우가 많습니다.

시작하기 전에

다음 조건을 충족하는지 확인하세요.

  • Cloud CDN이 사용 설정된 백엔드가 구성되어 있어야 합니다. Cloud CDN이 구성되어 있지 않으면 설정 가이드 중 하나를 따르세요.
  • 백엔드에 제공할 수 있는 압축 콘텐츠가 있습니다(예: 1KiB~10MiB인 웹 애셋 또는 동영상 매니페스트).
  • 클라이언트가 범위 요청 또는 강력한 ETag를 사용하여 부분 콘텐츠를 가져오지 않습니다. 이는 동적 압축과 호환되지 않습니다.
  • 클라이언트에서 Content-Length 헤더 없이 응답을 처리할 수 있습니다. 예를 들어 Cloud CDN에서 압축하는 캐시 부적중에는 Content-Length 헤더가 없습니다.
  • 백엔드 구성을 변경하는 데 필요한 IAM Compute 부하 분산기 관리자 역할(roles/compute.loadBalancerAdmin)이 있습니다.

백엔드 서비스 또는 백엔드 버킷에서 압축 사용 설정

압축을 사용 설정하려면 다음 단계를 수행합니다.

콘솔

새 원본 추가

새 원본을 추가 및 설정하려면 적절한 백엔드 유형에 대한 설정 개요의 안내를 따릅니다. 원본을 만들 때 고급 옵션 섹션을 사용하여 압축 모드 목록에서 자동을 선택해 동적 압축을 구성합니다.

기존 원본 수정

기존 Cloud CDN 원본을 수정하려면 다음 안내를 따르세요.

  1. Google Cloud 콘솔에서 Cloud CDN 원본 페이지로 이동합니다.

    원본으로 이동

  2. 수정할 원본 이름을 클릭한 후 수정을 클릭합니다.

  3. 원본 기본사항 섹션에서 다음을 클릭합니다.

  4. 호스트 및 경로 규칙 섹션에서 다음을 클릭합니다.

  5. 캐시 성능 섹션에서 고급 옵션으로 이동합니다.

  6. 압축 모드 목록에서 자동을 선택합니다.

  7. 변경사항을 적용하려면 완료를 클릭합니다.

gcloud

백엔드 서비스의 경우 --compression-mode 플래그와 함께 gcloud compute backend-services create 명령어 또는 gcloud compute backend-services update 명령어를 사용합니다.

백엔드 버킷의 경우 --compression-mode 플래그와 함께 gcloud compute backend-buckets create 명령어 또는 gcloud compute backend-buckets update 명령어를 사용합니다.

새 백엔드 서비스의 경우 create 명령어를 사용합니다.

gcloud compute backend-services create BACKEND_SERVICE_NAME \
    --compression-mode=AUTOMATIC

기존 백엔드 서비스의 경우 update 명령어를 사용합니다.

gcloud compute backend-services update BACKEND_SERVICE_NAME \
    --compression-mode=AUTOMATIC

새 백엔드 버킷의 경우 create 명령어를 사용합니다.

gcloud compute backend-buckets create BACKEND_BUCKET_NAME
    --compression-mode=AUTOMATIC

기존 백엔드 버킷의 경우 update 명령어를 사용합니다.

gcloud compute backend-buckets update BACKEND_BUCKET_NAME
    --compression-mode=AUTOMATIC

compression-mode는 다음 중 하나일 수 있습니다.

  • AUTOMATIC: 클라이언트에서 보낸 Accept-Encoding 헤더를 기반으로 최적의 압축을 자동으로 사용합니다. 이렇게 하면 대부분의 경우 Brotli 압축이 선호됩니다.
  • DISABLED(기본값): 압축을 사용 중지합니다.

API

백엔드 서비스의 경우 backendServices.insert 메서드 또는 backendServices.update 메서드를 사용합니다.

백엔드 버킷의 경우 backendBuckets.insert 메서드 또는 backendBuckets.update 메서드를 사용합니다.

다음 명령어 중 하나를 사용합니다.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices
PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets
PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/BACKEND_BUCKET

JSON 요청 본문에 다음 스니펫을 추가합니다.

"compressionMode": AUTOMATIC

compression-mode는 다음 중 하나일 수 있습니다.

  • AUTOMATIC(권장): 클라이언트에서 전송한 Accept-Encoding 헤더를 기반으로 최적의 압축을 자동으로 사용합니다. 이렇게 하면 대부분의 경우 Brotli 압축이 선호됩니다.
  • DISABLED(기본값): 압축을 사용 중지합니다.

몇 분 내에 모든 에지 위치에 구성이 적용됩니다. 백엔드에서 제공하는 압축 가능한 콘텐츠는 클라이언트에 전송되기 전에 압축됩니다.

압축 모드

기본 압축 모드는 DISABLED입니다.

AUTOMATIC 모드를 사용하면 Cloud CDN이 다음을 기반으로 최적의 압축 방법을 선택할 수 있습니다.

  • 클라이언트에 허용되는 인코딩
  • 응답의 예상 압축률
  • Cloud CDN 압축 속도(처리량)

Brotli는 비슷한 압축 해제 성능으로 gzip을 통해 대부분의 콘텐츠 유형에서 다운로드 크기를 추가로 10~20% 줄일 수 있으므로 클라이언트에서의 다운로드 시간 압축 해제 속도를 고려할 때 전반적으로 속도가 빨라집니다.

Cloud CDN은 선택한 압축 방법을 응답의 Content-Encoding 헤더에서 gzip 또는 brotli와 같이 나타냅니다.

Cloud CDN은 클라이언트의 총 다운로드 크기와 CPU 비용의 균형을 맞출 압축 수준을 결정합니다. 압축 수준이 높다고 해서 항상 성능의 이점을 얻을 수 있는 것은 아니며, 특히 성능이 낮은 휴대기기에서는 더 그렇습니다.

Cloud CDN에서 처음 콘텐츠를 압축하면 응답에서 Content-Length 헤더가 삭제됩니다. 이는 전체 응답이 압축될 때까지 전체 콘텐츠 길이를 알 수 없으므로 응답이 가능한 한 빠르게 제공될 수 있도록 하는 데 필요합니다. 응답이 압축되고 캐시되면 Cloud CDN은 이후 응답에 Content-Length 헤더를 포함할 수 있습니다. (HTTP/1.1 이하의 경우 Cloud CDN은 Content-Length를 사용하지 않으면 응답에 Transfer-Encoding: chunked를 사용합니다.)

응답은 언제 압축되나요?

요청에 gzip 또는 Brotli 알고리즘에 대한 지원을 명시적으로 나열하는 Accept-Encoding 헤더가 있는 경우 압축 가능한 콘텐츠 유형과 일치하는 Content-Type 헤더를 사용한 백엔드(원본)에서 제공되는 압축되지 않은 응답이 gzip 또는 Brotli로 적절하게 압축됩니다. 요청에 Accept-Encoding 헤더가 없거나 Accept-Encoding: *이 있는 경우 응답이 압축되지 않습니다.

예를 들어 클라이언트 요청의 Accept-Encoding 헤더가 있는 경우 응답은 다음 표의 정보에 따라 압축되거나 압축되지 않습니다.

Accept-Encoding 요청 헤더 응답 인코딩
gzip, compress, br