동적 압축 사용 설정

동적 압축은 전역 외부 HTTP(S) 부하 분산기(기본)와 함께 작동하여 원본과 클라이언트 간에 Cloud CDN에서 제공하는 응답을 자동으로 압축합니다. 네트워크를 통해 전송되는 데이터의 크기는 일반적인 경우 60%~85%까지 감소합니다.

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

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

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

사용 사례 예시

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

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

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

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

시작하기 전에

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

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

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

콘솔

새 원본 추가

새 원본을 추가하려면 다음 안내를 따르세요.

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

    Cloud CDN 원본으로 이동

  2. 원본 추가를 클릭합니다. 새 원본 페이지가 표시됩니다.

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

    1. 원본 이름 필드에 원본 이름을 입력합니다.

      선택한 이름은 소문자로 시작하여 이후 소문자, 숫자 또는 하이픈 최대 62자로 구성되어야 합니다. 이름은 하이픈으로 끝날 수 없습니다.

    2. 원본 구성을 선택합니다.

      • 백엔드 버킷: Cloud Storage 버킷을 원본으로 사용합니다. 백엔드 버킷 정의에서 새 Cloud Storage 버킷이나 기존 Cloud Storage 버킷을 선택합니다.

      • 커스텀 원본: 커스텀 원본을 사용합니다. 커스텀 원본 정의에 Cloud CDN이 원본에 연결하는 데 사용하는 IP 주소 또는 도메인 이름 및 포트를 입력합니다.

      • 백엔드 서비스: 백엔드로 구성된 부하 분산기를 사용합니다. 백엔드 서비스 정의에서 사용할 백엔드 서비스를 선택합니다. 백엔드 서비스가 아직 구성되지 않았으면 지금 구성할 수 있습니다.

    3. 계속하려면 다음을 클릭합니다.

  4. 호스트 및 경로 규칙 섹션에서 다음 중 하나를 선택합니다.

    • 기존 부하 분산기 선택: 부하 분산기 선택 목록에서 기존 부하 분산기를 선택할 수 있습니다.

    • 새 부하 분산기 만들기: Cloud CDN에서 자동으로 새 부하 분산기를 만들 수 있습니다. 부하 분산기 이름 필드에 새 부하 분산기 이름을 입력합니다.

      이름은 소문자로 시작하여 이후 소문자, 숫자 또는 하이픈 최대 62자로 구성되어야 합니다. 이름은 하이픈으로 끝날 수 없습니다.

  5. 계속하려면 다음을 클릭합니다.

  6. 기본 옵션 섹션에서 다음 단계를 수행합니다.

    1. 캐시 모드에 다음 중 하나를 선택합니다.

      • 정적 콘텐츠 캐시: 대부분의 상황에서 이 설정을 사용하는 것이 좋습니다.

      • Cache-Control 헤더를 기준으로 원본 설정 사용: Cloud CDN은 응답 헤더에 valid-control 지시문으로 Cache-Control: public, max_age=3600과 같은 응답을 캐시합니다.

      • 모든 콘텐츠 강제 캐시: private, no-store 또는 no-cache 지시문을 무시하고 Cloud CDN에서 모든 콘텐츠를 캐시하도록 합니다.

    2. 정적 콘텐츠 캐시모든 콘텐츠 강제 캐시에서 다음을 설정할 수 있습니다.

      • 클라이언트 TTL: 브라우저나 클라이언트에 더 짧은 TTL을 설정하고 이러한 클라이언트가 보다 정기적으로 Cloud CDN에 대해 유효성을 다시 검사할 수 있습니다.

        클라이언트 TTL 값을 최대 TTL 값 이하로 설정해야 합니다.

      • 기본 TTL: 유효한 TTL이 아직 없는 응답에 대해 이 원본에서 제공하는 캐시된 콘텐츠의 기본 TTL(수명)을 지정합니다.

        기본 TTL 값을 최대 TTL 값 이하로 설정해야 합니다.

    3. 정적 콘텐츠 캐시최대 TTL을 선택합니다.

      최대 TTL을 사용하면 이 원본에서 제공하는 캐시된 콘텐츠의 최대 TTL을 설정할 수 있습니다.

    4. 캐시 키캐시 키 목록에서 다음 중 하나를 선택합니다.

      • 기본값: Cloud Storage에 알려진 쿼리 매개변수가 포함됩니다.

      • 커스텀: Cloud CDN이 캐시 항목을 구분하는 데 사용하는 캐시 키 구성요소(예: 쿼리 문자열 또는 HTTP 헤더)를 선택합니다.

    5. 고급 옵션에서 다음을 완료합니다.

      1. 압축 모드 목록에서 압축 모드를 선택합니다.

        동적 압축을 사용 설정하려면 자동을 선택합니다.

      2. 오래된 경우에도 제공에 Cloud CDN이 캐시 부적중 또는 원본 오류 시 비활성 콘텐츠를 계속 제공하는 시간을 선택합니다.

    6. 제한된 콘텐츠에 다음 중 하나를 선택합니다.

      • Cloud CDN으로 캐시한 콘텐츠에 대한 공개 액세스 허용: 대부분의 상황에서 이 설정을 사용하는 것이 좋습니다.

      • 서명된 URL 및 서명된 쿠키를 사용하여 액세스 제한: 승인된 뷰어에 대한 액세스 권한을 제한할 수 있습니다. 사용자에게 제한된 시간 동안 액세스 권한을 부여하는 시간이 제한된 URL이나 쿠키를 제공합니다. 자세한 내용은 서명된 URL 사용서명된 쿠키 사용을 참조하세요.

    7. 선택사항: 커스텀 응답 헤더를 추가합니다. 자세한 내용은 백엔드 서비스에서 커스텀 헤더 만들기를 참조하세요.

    8. 선택사항: 음성 캐싱을 사용 설정합니다. 자세한 내용은 음성 캐싱 사용을 참조하세요.

    9. 선택사항: 있는 경우 캐시를 우회하는 특정 헤더를 추가합니다. 자세한 내용은 캐시 우회를 참조하세요.

  7. 원본을 만들려면 완료를 클릭합니다.

기존 원본 수정

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

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

    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

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

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

압축 모드

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

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

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

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

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

응답은 언제 압축되나요?

압축 가능한 콘텐츠 유형과 일치하는 Content-Type 헤더로 백엔드(원본)에서 제공되는 압축되지 않은 응답은 클라이언트의 Accept-Encoding 헤더를 기준으로 압축됩니다.

대부분의 웹브라우저는 일련의 가중치 값을 가진 Accept-Encoding 헤더를 제공합니다. 예를 들어 Google Chrome은 일반적으로 Accept-Encoding: br;q=1.0, gzip;q=0.8, *;q=0.1을 전송하며, 이는 Gzip보다 Broli를 선호하도록 설정합니다. 최종 *;q=0.1은 다른 압축 스키마의 선호도가 가장 낮음을 의미합니다.

다른 클라이언트에서는 가중치 없이 선호도를 지정할 수 있습니다(예: Accept-Encoding: gzip, compress, br). 이 경우 서버는 자체 선호도를 기준으로 선택합니다.

동적 압축은 클라이언트에서 제공하는 선호도(가중치)가 없는 경우 다른 압축 인코딩보다 Brotli(br)를 선호합니다.

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

Accept-Encoding 요청 헤더 응답 인코딩
gzip, compress, br Brotli(br)
deflate 압축되지 않음
gzip;q=1.0, br;q=0.8, *;q=0.1 Gzip
deflate, gzip Gzip
identity 압축되지 않음

압축 가능한 콘텐츠 유형

동적 압축은 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 유형
일치검색 application/x-javascript
application/x-sdch-dictionary
application/javascript
application/xml
application/csv
application/json
application/json+protobuf
application/signed-exchange
application/vnd.apple.mpegurl
application/wasm
application/x-plist
application/x-protobuffer
application/x-protobuf
application/x-nacl
application/x-pnacl
font/ttf
font/otf
font/eot
image/svg+xml
image/pwg-raster
image/x-icon
image/vnd.microsoft.icon
video/vnd.mpeg.dash.mpd
audio/mpegURL
application/dash+xml
application/vnd.ms-sstr+xml
패턴 일치 application/*+json
application/*+xml
application/*mpegURL
text/*

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

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

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

  • 응답에 압축 가능한 콘텐츠 유형과 일치하는 Content-Type 헤더가 없습니다.
  • Content-Length 헤더가 없습니다.
  • 1KiB보다 작습니다.

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

  • 10MiB보다 큽니다.

  • Cache-Control: no-transform 헤더를 가집니다.

  • Vary: Accept-Encoding 헤더를 가집니다.

범위 요청

Cloud CDN이 응답을 압축하면 Cloud CDN은 Accept-Ranges: none 헤더를 추가하고 기존 Accept-Ranges 헤더를 대체합니다. 이러한 응답의 캐시 적중은 Range 헤더를 무시합니다.

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

ETag

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

Vary 헤더

압축 가능성이 있는 응답(요청에 따라 다름)을 제공하는 경우 Cloud CDN에서 응답에 Vary: Accept-Encoding 헤더를 추가합니다.

로깅

Cloud CDN 및 외부 HTTP(S) 부하 분산기 로그는 부하 분산기에서 응답을 압축했는지 여부와 압축 유형을 나타내는 compressionStatus 필드를 jsonPayload에 포함합니다.

{
  insertId: "1c02hw9g3gjay67"
  jsonPayload: {
    @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
    statusDetails: "response_sent_by_backend"
    cacheId: "IAD-862d661f"
    compressionStatus: "br"
  }
}

결제

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

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

측정항목

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

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

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

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

다음 단계

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