동적 압축은 Media CDN에서 제공하는 응답을 자동으로 압축합니다. 네트워크를 통해 전송되는 데이터의 크기는 일반적인 경우 60% ~85% 까지 감소합니다.
크기가 줄어들면 스타일시트 (CSS), 스크립트 (자바스크립트), 동영상 매니페스트(HLS/DASH)와 같은 중요한 애셋의 다운로드 속도가 빨라져 페이지 로드 및 동영상 시작 시간이 크게 줄어들 수 있습니다.
대규모 라이브 동영상 재생목록 (매니페스트)에는 HLS 또는 DASH 재생목록 메타데이터는 물론 각 세그먼트의 호스트 및 경로 프리픽스가 포함된 상당한 양의 반복 데이터와 가져오기가 있습니다. 재생목록 로드 또는 재생목록 업데이트가 더 빨리 다운로드될수록 클라이언트가 참조된 동영상 세그먼트 파싱 및 다운로드를 대기하는 시간이 줄어듭니다. HLS 및 DASH 재생목록은 총 크기가 90% 이상 줄어드는 경우가 많습니다.
응답 압축의 이점에 대한 자세한 내용은 웹 기초 가이드를 참조하세요.
동적 압축 작동 방식
동적 압축이 사용 설정되면 클라이언트가 지원되는 압축 알고리즘 중 하나 (br 또는 gzip)를 허용하는 경우 원본에서 제공되는 압축 가능한 콘텐츠
를 전송 전에 압축할 수 있습니다.
Media CDN은 압축 가능한 모든 응답에 Vary: Accept-Encoding 헤더를 추가합니다. 관련 정보는
압축 불가능한 콘텐츠를 참조하세요.
또한 요청의 Accept-Encoding 헤더가 br 또는 gzip을 지정하여 압축된 콘텐츠를 선호함을 나타내는 경우 (선택적으로 0이 아닌 q 매개변수 포함) Media CDN은 다음을 수행합니다.
응답에서
Content-Length헤더를 삭제합니다. 전체 응답이 압축될 때까지 전체 콘텐츠 길이를 알 수 없으므로 응답을 최대한 빨리 제공할 수 있도록 해야 합니다. HTTP/1.1 이하의 경우 Media CDN은Content-Length를 사용하지 않으면 응답에Transfer-Encoding: chunked를 사용합니다.응답이 압축되고 캐시되면 Media CDN은 이후 응답에
Content-Length헤더를 포함하고 값을 압축된 본문 콘텐츠의 길이로 설정할 수 있습니다.Accept-Ranges를none으로 설정합니다. 이렇게 하면 클라이언트에 이 리소스에 대한 범위 요청이 무시된다고 알립니다.RFC 9110 섹션 8.8.3에 따라 강력한
ETag응답 헤더를 약화시킵니다. 예를 들어ETag: "xyzzy"는ETag: W/"xyzzy"로 바뀝니다.선택한 압축 알고리즘을 나타내는
Content-Encoding헤더를br또는gzip으로 설정합니다.Media CDN은 응답의 예상 압축률과 압축 속도 또는 처리량을 기반으로 최적의 압축 알고리즘을 선택합니다.
클라이언트가 지원하는 경우 다른 압축 알고리즘의
Accept-Encoding헤더에 더 높은q값이 있더라도 Brotli 압축이 사용됩니다.HLS 매니페스트는
gzip만 사용하여 압축됩니다.
Media CDN은 클라이언트의 총 다운로드 크기와 CPU 비용의 균형을 맞출 압축 수준을 결정합니다. 압축 수준이 높다고 해서 항상 성능의 이점을 얻을 수 있는 것은 아니며, 특히 성능이 낮은 휴대기기에서는 더 그렇습니다.
동적 압축 구성
요청을 제공하는 경로에서 동적 압축을 사용 설정할 수 있습니다.
시작하기 전에
다음 단계를 따르세요.
제공할 준비가 된 압축 가능한 콘텐츠가 있는 Media CDN 원본 을 식별하거나 만듭니다.
경로 규칙에 동적 압축 사용 설정
기본적으로 경로 규칙의 압축 모드는 사용 중지되어 있습니다.
모드를 자동으로 설정하면 모든 적격 응답에 동적 압축이 사용 설정됩니다. 또한 Media CDN에 최적의 압축 알고리즘을 자동으로 선택하도록 지시합니다.
동적 압축을 사용 설정하려면 다음 단계를 수행합니다.
콘솔
콘솔에서 Media CDN 페이지로 이동합니다. Google Cloud
경로 규칙을 구성할 서비스의 세부정보 페이지를 열려면 서비스 이름을 클릭합니다.
수정 모드로 전환하려면 수정 버튼을 클릭합니다.
라우팅 섹션으로 이동하려면 다음 을 클릭합니다.
호스트 규칙을 수정하려면 화살표를 클릭하여 펼칩니다.
경로 규칙을 수정하려면 해당 행에서 수정 을 클릭합니다.
경로 규칙 수정 창에서 고급 구성 을 클릭합니다.
선택사항: 라우팅 작업에서 CDN 정책 항목을 추가합니다.
CDN 정책을 사용하면 Media CDN이 콘텐츠를 한 번 압축하고 여러 번 제공할 수 있으므로 대역폭을 절약하고 전송 속도를 높일 수 있습니다.
동적 압축 섹션에서 압축 사용 설정 을 선택합니다.
경로 규칙을 저장하려면 저장 을 클릭합니다.
서비스에 변경사항을 저장하려면 서비스 업데이트 를 클릭합니다.
gcloud 및 YAML
Media CDN 구성 을 YAML 파일로 내보냅니다.
gcloud edge-cache services export명령어를 사용합니다.gcloud edge-cache services export SERVICE_NAME \ --destination=FILENAME.yaml다음을 바꿉니다.
SERVICE_NAME: 서비스 이름FILENAME: YAML 파일의 이름
YAML 파일의 경로 정의에서
routeAction아래에 있는compressionMode를 다음 샘플과 같이AUTOMATIC으로 설정합니다.routing: hostRules: - hosts: - media.example.com pathMatcher: routes pathMatchers: - name: routes routeRules: - priority: 2 origin: origin1 matchRules: - pathTemplateMatch: "/**.m3u8" # HLS playlists - pathTemplateMatch: "/**.mpd" # DASH manifests routeAction: cdnPolicy: defaultTtl: 5s compressionMode: AUTOMATIC서비스를 업데이트하려면 YAML 파일에서 Media CDN 구성을 가져옵니다.
gcloud edge-cache services import명령어를 사용합니다.gcloud edge-cache services import SERVICE_NAME \ --source=FILENAME.yaml
Terraform
다음 Terraform 스니펫은 동적 압축이 사용 설정된 경로 규칙을 보여줍니다.
구성이 곧 모든 에지 위치에 전파됩니다.
경로에 동적 압축이 사용 설정되고 새 구성이 프로덕션 머신에 적용되면 Media CDN은 압축되지 않은 캐시된 버전이 있더라도 적격 응답을 압축하기 시작합니다. Media CDN이 새 콘텐츠를 가져오고 압축하는 동안 원본으로의 트래픽이 일시적으로 급증할 수 있습니다.
경로 규칙에 동적 압축 사용 중지
동적 압축을 사용 중지하려면 다음 단계를 수행합니다.
콘솔
콘솔에서 Media CDN 페이지로 이동합니다. Google Cloud
경로 규칙을 구성할 서비스의 세부정보 페이지를 열려면 서비스 이름을 클릭합니다.
수정 모드로 전환하려면 수정 버튼을 클릭합니다.
라우팅 섹션으로 이동하려면 다음 을 클릭합니다.
호스트 규칙을 수정하려면 화살표를 클릭하여 펼칩니다.
경로 규칙을 수정하려면 해당 행에서 수정 을 클릭합니다.
경로 규칙 수정 창에서 고급 구성 을 클릭합니다.
동적 압축 섹션에서 압축 사용 설정 을 선택 해제합니다.
경로 규칙을 저장하려면 저장 을 클릭합니다.
서비스에 변경사항을 저장하려면 서비스 업데이트 를 클릭합니다.
gcloud 및 YAML
Media CDN 구성 을 YAML 파일로 내보냅니다.
gcloud edge-cache services export명령어를 사용합니다.gcloud edge-cache services export SERVICE_NAME \ --destination=FILENAME.yaml다음을 바꿉니다.
SERVICE_NAME: 서비스 이름FILENAME: YAML 파일의 이름
YAML 파일의 경로 정의에서
compressionMode를DISABLED로 설정합니다.서비스를 업데이트하려면 YAML 파일에서 Media CDN 구성을 가져옵니다.
gcloud edge-cache services import명령어를 사용합니다.gcloud edge-cache services import SERVICE_NAME \ --source=FILENAME.yaml
특정 클라이언트 (예: 스마트 TV 또는 스트리밍 기기)와의 호환성 문제와 같이 특정 경로의 동적 압축에 문제가 발생하는 경우 Media CDN이 해당 경로에서 압축된 콘텐츠를 제공하지 못하도록 동적 압축을 사용 중지합니다.
경로에 동적 압축을 사용 중지하면 Media CDN이 캐시에서 압축된 콘텐츠 제공을 중지합니다. 이전에 캐시된 모든 압축된 응답이 무효화되고 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 유형 | |
|---|---|
| 일치검색 |
application/csv application/javascript application/json application/json+protobuf application/signed-exchange application/wasm application/x-javascript application/x-nacl application/x-plist application/x-pnacl application/x-protobuf application/x-protobuffer application/x-sdch-dictionary application/xml audio/mpegURL font/eot font/otf font/ttf image/pwg-raster image/svg+xml image/vnd.microsoft.icon image/x-icon video/vnd.mpeg.dash.mpd |
| 패턴 일치 | application/*+json application/*+xml application/*mpegURL text/* |
이미지 및 동영상 형식 (예: image/jpeg, image/png, video/mpeg4)은 거의 항상 압축되어 있습니다. 따라서 Media CDN은 이를 압축하지 않습니다. 이미 압축된 응답을 다시 압축하면 파일 크기가 거의 줄어들지 않으며 클라이언트가 이러한 종류의 응답을 받을 때 예기치 않은 동작이 발생할 수 있습니다.
압축 불가능한 응답
Media CDN은 다음 특성 중 하나 이상을 가진 응답을 압축하지 않습니다.
- 응답에 압축 가능한 콘텐츠 유형과 일치하는
Content-Type헤더가 없습니다. - 응답에
Content-Length헤더가 없습니다. - 응답에
Content-Encoding헤더가 있습니다. 이는 원본에서 이미 응답을 압축했음을 의미합니다. 따라서 Media CDN은 추가 동적 압축을 수행해서는 안 됩니다. 응답이 1KiB보다 작습니다.
압축 및 압축 해제에 소비된 시간은 종종 이점을 상쇄합니다. 압축할 콘텐츠도 적기 때문에 압축 효율이 떨어져 압축률이 낮을 수 있습니다.
응답이 1MiB보다 큽니다.
Media CDN은 바이트 범위 캐싱 없이 캐싱 객체에 허용되는 크기까지 응답을 압축합니다.
응답에
Cache-Control: no-transform헤더가 있습니다.
로깅 및 모니터링
압축이 사용 설정되면 edgecache.googleapis.com/EdgeCacheRouteRule 아래의 기존 https/response_bytes_count 측정항목이 압축된 응답 크기를 보고합니다. 압축 가능한 콘텐츠의 총 응답 바이트와 아웃바운드 데이터 전송 처리량이 감소할 것으로 예상됩니다.
Media CDN 로그는 부하 분산기에서 응답을 압축했는지 여부와 압축 유형을 나타내는 compressionAlgorithmApplied 필드를 jsonPayload에 포함합니다.
{
insertId: "1c02hw9g3gjay67"
jsonPayload: {
@type: "type.googleapis.com/google.cloud.edgecache.v1.EdgeCacheLogEntry",
cacheId: "IAD-862d661f",
cacheStatus": "hit,stale",
compressionAlgorithmApplied: "br"
},
}
결제
Media CDN에서 응답을 압축하면 관련 아웃바운드 캐시 또는 인터넷 데이터 전송 요금이 클라이언트에 전송된 최종 압축 바이트를 기준으로 부과됩니다.
압축 가능한 대량의 응답을 제공하는 경우 월별 아웃바운드 데이터 전송 비용이 줄어들고 최종 사용자의 성능이 향상될 수 있습니다.