동적 압축

동적 압축을 사용하면 Cloud CDN이 응답이 출처와 클라이언트 사이에 제공될 때 자동으로 압축할 수 있습니다. 네트워크를 통해 전송되는 데이터의 크기는 일반적인 경우 60%~85%까지 감소합니다.

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

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

사용 사례

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

  • CSS 및 자바스크립트 크기를 줄이면 웹페이지가 더 빠르게 렌더링되고 중요한 웹 성능 측정항목인 콘텐츠가 포함된 첫 페인트가 표시되는 시간이 줄어듭니다.
  • JSON 페이로드와 같은 REST API 응답을 캐싱할 때 큰 긍정적인 영향을 미칩니다. 이러한 페이로드는 반복되는 키, 공백, 중괄호로 인해 잘 압축됩니다. 5~10초 동안의 공개 API 캐싱은 데이터의 최신 상태를 유지하면서 원본 부하를 줄이는 데 널리 사용됩니다.
  • 동영상 전송을 위한 재생 시작 시간과 실시간 스트리밍의 조인 지연 시간을 개선합니다. 대규모 실시간 재생목록(매니페스트)에는 HLS 또는 DASH 재생목록 메타데이터는 물론 각 세그먼트의 호스트 + 경로 프리픽스가 포함된 상당한 양의 반복 데이터가 있습니다. 재생목록 로드 또는 재생목록 업데이트가 더 빨리 다운로드될수록 클라이언트가 참조된 동영상 세그먼트 파싱 및 다운로드를 대기하는 시간이 줄어듭니다. HLS 및 DASH 재생목록은 총 크기가 90% 넘게 감소하는 경우가 많습니다.

압축 사용 설정

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

시작하기 전에

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

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

콘솔

Google Cloud Console에서의 동적 압축 사용 설정은 아직 지원되지 않습니다.

gcloud

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

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

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

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

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

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

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

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

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

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

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

  • AUTOMATIC: 콘텐츠를 자동으로 압축합니다.
  • DISABLED(기본값): 압축을 사용 중지합니다.
  • API

    백엔드 서비스의 경우 Method: backendServices.insert 또는 Method: backendServices.update API 호출을 사용합니다.

    백엔드 버킷의 경우 Method: backendBuckets.insert 또는 Method: backendBuckets.update API 호출을 사용합니다.

    다음 API 호출 중 하나를 사용합니다.

    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: 콘텐츠를 자동으로 압축합니다.
  • DISABLED(기본값): 압축을 사용 중지합니다.
  • 몇 분 내에 모든 에지 위치에 구성이 적용됩니다. 백엔드에서 제공하는 압축 가능한 콘텐츠는 클라이언트에 전송되기 전에 압축됩니다.

    압축 모드

    기본 압축 모드는 DISABLED입니다. loadBalancingSchemeEXTERNAL인 백엔드만 DISABLED 이외의 압축 모드를 구성할 수 있습니다.

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

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

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

    응답은 언제 압축되나요?

    현재 gzip 압축만 지원됩니다. 클라이언트가 gzipAccept-Encoding 인코딩 목록에 포함하면 Cloud CDN은 gzip을 사용하여 응답을 압축합니다. 그렇지 않은 경우 Cloud CDN은 응답을 압축하지 않습니다.

    응답은 현재 캐시 가능한 경우에만 압축됩니다.

    압축 가능한 콘텐츠 유형

    동적 압축은 Content-Type HTTP 응답 헤더를 기준으로 다음 MIME 유형에 적용됩니다. Content-Type 응답 헤더가 없는 응답은 압축되지 않습니다.

    일반적인 콘텐츠 유형과 MIME 유형은 다음과 같습니다.

    • HTML 콘텐츠: text/html
    • 스타일시트: text/css
    • 자바스크립트: application/javascript
    • JSON: application/json
    • HLS 재생목록: application/x-mpegURL 또는 application/vnd.apple.mpegURL
    • DASH 매니페스트: application/dash+xml

    다음 표에는 MIME 유형이 압축 가능성에 미치는 영향이 요약되어 있습니다.

      압축 가능한 MIME 유형
    일치검색 애플리케이션/x-javascript
    애플리케이션/x-sdch-dictionary
    애플리케이션/javascript
    애플리케이션/xml
    애플리케이션/csv
    애플리케이션/json
    애플리케이션/json+protobuf
    애플리케이션/signed-exchange
    애플리케이션/vnd.apple.mpegurl
    애플리케이션/wasm
    애플리케이션/x-plist
    애플리케이션/x-protobuffer
    애플리케이션/x-protobuf
    애플리케이션/x-nacl
    애플리케이션/x-pnacl
    폰트/ttf
    폰트/otf
    폰트/eot
    이미지/svg+xml
    이미지/pwg-raster
    이미지/x-icon
    이미지/vnd.microsoft.icon
    동영상/vnd.mpeg.dash.mpd
    애플리케이션/dicom+json
    오디오/mpegURL
    애플리케이션/dash+xml
    애플리케이션/vnd.ms-sstr+xml
    패턴 일치 애플리케이션/*+xml
    텍스트/*
    애플리케이션/*mpegURL

    이미지 및 동영상 형식(예: image/jpeg, image/png, video/mpeg4)은 거의 항상 압축되어 있으므로 Cloud CDN에서 압축하지 않습니다. 이미 압축된 응답을 다시 압축하면 파일 크기가 거의 줄어들지 않으며 클라이언트가 이러한 종류의 응답을 받을 때 예기치 않은 동작이 발생할 수 있습니다.

    응답이 압축되지 않은 경우는 언제인가요?

    동적 압축은 응답에 다음 특성 중 하나 이상이 있을 때 응답을 압축하지 않습니다.

    • 압축 가능한 콘텐츠 유형과 일치하는 Content-Type 헤더 없음
    • Content-Length 헤더 없음
    • 1KiB 미만

      압축 및 압축 해제에 소비된 시간은 종종 이점을 상쇄합니다. 압축할 콘텐츠도 적기 때문에 압축 효율이 떨어질 수 있습니다(압축률이 낮음).

    • 10MiB 초과

    • Cache-Control: no-transform 지시문

    범위 요청

    백엔드에서 동적 압축이 사용 설정되면 범위 지원이 사용 중지됩니다.

    • RangeIf-Range 헤더는 모든 요청에서 삭제됩니다.
    • Accept-Ranges: bytes 헤더가 모든 응답에서 삭제됩니다.

    클라이언트가 압축된 또는 압축되지 않은 리소스로부터 바이트 범위를 예상할 수 있는 방법이 없으므로, 이렇게 하면 잘못된 부분 콘텐츠가 클라이언트에 제공되지 않습니다.

    ETag

    동적 압축이 응답을 압축하면 RFC 7232 섹션 2.3에 따라 강력한 ETag 헤더가 약화됩니다. 예를 들어 ETag: "xyzzy"ETag: W/"xyzzy"로 바뀝니다.

    Vary 헤더

    압축 가능성이 있는 요청(요청에 따라 다름)의 경우 Vary: Accept-Encoding 헤더를 사용한 응답이 클라이언트에 제공됩니다.

    결제

    Cloud CDN 또는 Cloud Load Balancing에서 응답을 압축하면 관련 캐시 이그레스 또는 인터넷 이그레스가 각각 클라이언트에 전송된 최종 압축 바이트를 기준으로 측정됩니다.

    압축 가능한 대량의 응답을 제공하는 경우 월별 이그레스 비용이 줄어들고 최종 사용자의 성능이 향상될 수 있습니다.

    측정항목

    압축이 사용 설정되면 loadbalancing.googleapis.com 아래의 기존 https/response_bytes_count 측정항목이 압축된 응답 크기를 보고합니다.

    총 응답 바이트와 이그레스 처리량이 감소할 것으로 예상됩니다.

    HTML, CSS, 자바스크립트, JSON과 같이 압축이 잘 되는 대량의 텍스트 기반 콘텐츠를 제공하는 경우 응답 바이트가 크게 감소할 수 있습니다.

    자세한 내용은 Monitoring을 참조하세요.

    다음 단계

    • 캐시 모드가 콘텐츠를 더 쉽게 캐시하는 방법을 알아보려면 캐시 모드 사용을 참조하세요.
    • HTTP(S) 부하 분산 인스턴스 및 스토리지 버킷에 Cloud CDN을 사용 설정하려면 Cloud CDN 사용을 참조하세요.
    • 캐시 무효화에 대한 자세한 내용은 캐시 무효화 개요를 참조하세요.
    • GFE 접속 지점을 찾으려면 캐시 위치를 참조하세요.