์ปค์Šคํ…€ ํ—ค๋” ์ •์˜

Media CDN์„ ์‚ฌ์šฉํ•˜๋ฉด ์ปค์Šคํ…€ ์š”์ฒญ ๋ฐ ์‘๋‹ต ํ—ค๋”๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ปค์Šคํ…€ ํ—ค๋”๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๊ตญ๊ฐ€, ๋ฆฌ์ „, ๋„์‹œ์™€ ๊ฐ™์ด ์ง€์—ญํ™”๋œ ์ฝ˜ํ…์ธ ๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํด๋ผ์ด์–ธํŠธ์— ๋Œ€ํ•œ ์ง€๋ฆฌ์  ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ์บ์‹œ์—์„œ ์‘๋‹ต์ด ์ œ๊ณต๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€(์ „์ฒด ๋˜๋Š” ์ผ๋ถ€) ๊ทธ๋ฆฌ๊ณ  ์ œ๊ณต๋œ ์บ์‹œ ์œ„์น˜๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ์š”์ฒญ ๋ฐ ์‘๋‹ต ํ—ค๋” ๋ชจ๋‘๋ฅผ ์‚ญ์ œ, ๋Œ€์ฒด, ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ํ—ค๋”๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์š”์ฒญ์„ ๋‹ค๋ฅธ ์›๋ณธ์œผ๋กœ ๋ผ์šฐํŒ…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ต์ฐจ ์ถœ์ฒ˜ ๋ฆฌ์†Œ์Šค ๊ณต์œ (CORS) ํ—ค๋”๋ฅผ ๊ตฌ์„ฑํ•ด์•ผ ํ•˜๋ฉด ๊ฐ ๊ฒฝ๋กœ์— ๋Œ€ํ•ด CORS ์ •์ฑ…์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ปค์Šคํ…€ ํ—ค๋” ์„ค์ •

ํ—ค๋”๊ฐ€ ๊ฐ ๊ฒฝ๋กœ์— ์„ค์ •๋˜์–ด ๋งค๋‹ˆํŽ˜์ŠคํŠธ ๋˜๋Š” ๋™์˜์ƒ ์„ธ๊ทธ๋จผํŠธ์™€ ๊ฐ™์€ ์—ฌ๋Ÿฌ ์ฝ˜ํ…์ธ ์— ๋Œ€ํ•ด ํ—ค๋”๋ฅผ ์ถ”๊ฐ€ ๋ฐ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์บ์‹ฑ ๊ฒฐ์ • ์ „์— CDN ์ฒ˜๋ฆฌ ๊ฒฝ๋กœ ์ดˆ๊ธฐ์— ๊ฒฝ๋กœ๋ณ„ ์ปค์Šคํ…€ ์š”์ฒญ ํ—ค๋”๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด cache-control ํ—ค๋”๋ฅผ ๊ฒฝ๋กœ๋ณ„ ๋งž์ถค ํ—ค๋”๋กœ ์„ค์ •ํ•˜๋ฉด CDN์˜ ์บ์‹ฑ ๋™์ž‘์— ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ์ถ”๊ฐ€ํ•œ ํ—ค๋” ๊ฐ’์€ ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„๋˜๊ณ  ๋™์ผํ•œ ํ•„๋“œ ์ด๋ฆ„์˜ ์‘๋‹ต ๋˜๋Š” ์š”์ฒญ ํ—ค๋”์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.

๊ธฐ์กด ๊ฐ’์„ ๋ฎ์–ด์“ฐ๋ ค๋ฉด replace๋ฅผ true๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ .routing.pathMatchers[].routeRules[].headerAction ์˜ˆ์‹œ๋Š” EdgeCacheService ๋ฆฌ์†Œ์Šค์—์„œ ์ถ”๊ฐ€ ๋ฐ ์‚ญ์ œ๋œ ํ—ค๋”๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

gcloud edge-cache services describe prod-media-service
routeRules:
  - priority: 1
    description: "video routes"
    matchRules:
      - prefixMatch: "/video/"
    headerAction:
      responseHeadersToAdd:
        # Return the country (or region) associated with the client's IP address.
        - headerName: "client-geo"
          headerValue: "{client_region}"
          replace: true
      requestHeadersToAdd:
        # Inform the upstream origin server the request is from Media CDN
        - headerName: "x-downstream-cdn"
          headerValue: "Media CDN"
      responseHeadersToRemove:
        - headerName: "X-User-ID"
        - headerName: "X-Other-Internal-Header"

์ด ์˜ˆ์‹œ์—์„œ๋Š” ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  • ํด๋ผ์ด์–ธํŠธ์˜ IP ์ฃผ์†Œ์™€ ์—ฐ๊ฒฐ๋œ ๊ตญ๊ฐ€(๋˜๋Š” ๋ฆฌ์ „)๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” {client_region} ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‘๋‹ต์— ์ปค์Šคํ…€ client-geo ํ—ค๋”๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  • ์ •์  ๋ฌธ์ž์—ด์„ ์‚ฌ์šฉํ•ด์„œ ์š”์ฒญ์— ์ปค์Šคํ…€ x-downstream-cdn ํ—ค๋”๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  • 2๊ฐœ์˜ ๋‚ด๋ถ€ ํ—ค๋”๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

์›๋ณธ๋ณ„ ์ปค์Šคํ…€ ํ—ค๋”๋ฅผ ๊ตฌ์„ฑํ•˜๋ ค๋ฉด ์›๋ณธ๋ณ„ ํ˜ธ์ŠคํŠธ ์žฌ์ž‘์„ฑ ๋˜๋Š” ํ—ค๋” ์ˆ˜์ • ๊ตฌ์„ฑ์„ ์ฐธ๊ณ ํ•˜์„ธ์š”.

๋™์  ํ—ค๋” ๋ณ€์ˆ˜

์ปค์Šคํ…€ ํ—ค๋”๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ๋™์  ๋ณ€์ˆ˜๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์บ์‹œ ํ‚ค ์ •์ฑ…(cacheKeyPolicy.includedHeaderNames)์˜ ์ผ๋ถ€์ธ ์š”์ฒญ ํ—ค๋”๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ์ปค์Šคํ…€ ๋ณ€์ˆ˜๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋™์  ๋ณ€์ˆ˜๋ฅผ ํฌํ•จํ•˜๋Š” ์š”์ฒญ ํ—ค๋”๋Š” ์บ์‹œ ํ‚ค์˜ ์ผ๋ถ€์ผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋ณ€์ˆ˜ ์„ค๋ช… ์š”์ฒญ ํ—ค๋”์— ์ง€์›๋จ ์บ์‹œ ํ‚ค์˜ ์š”์ฒญ ํ—ค๋”์— ์ง€์›๋จ ์‘๋‹ต ํ—ค๋”์— ์ง€์›๋จ
cdn_cache_status ์š”์ฒญ/์‘๋‹ต ๊ฒฝ๋กœ์—์„œ ๊ฐ ์บ์‹œ ๋…ธ๋“œ์˜ ์œ„์น˜(๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ณตํ•ญ์˜ IATA ์ฝ”๋“œ) ๋ฐ ์ƒํƒœ๊ฐ€ ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„๋œ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ๊ฐ’์€ ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์บ์‹œ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. โœ”
client_city ์š”์ฒญ์ด ์‹œ์ž‘๋œ ๋„์‹œ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค(์˜ˆ: ์บ˜๋ฆฌํฌ๋‹ˆ์•„์ฃผ ๋งˆ์šดํ‹ด๋ทฐ์˜ ๊ฒฝ์šฐ Mountain View). ์ด ๋ณ€์ˆ˜์— ์œ ํšจํ•œ ๊ฐ’์˜ ํ‘œ์ค€ ๋ชฉ๋ก์€ ์—†์Šต๋‹ˆ๋‹ค. ๋„์‹œ ์ด๋ฆ„์—๋Š” US-ASCII ๋ฌธ์ž, ์ˆซ์ž, ๊ณต๋ฐฑ, !#$%&'*+-.^_`|~ ๋ฌธ์ž๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. โœ” โœ”
client_city_lat_long ์š”์ฒญ์ด ์‹œ์ž‘๋œ ๋„์‹œ์˜ ์œ„๋„์™€ ๊ฒฝ๋„์ž…๋‹ˆ๋‹ค(์˜ˆ: ๋งˆ์šดํ‹ด๋ทฐ์—์„œ ์š”์ฒญํ•œ ๊ฒฝ์šฐ 37.386051,-122.083851). โœ” โœ”
client_region ํด๋ผ์ด์–ธํŠธ์˜ IP ์ฃผ์†Œ์™€ ์—ฐ๊ด€๋œ ๊ตญ๊ฐ€(๋˜๋Š” ๋ฆฌ์ „)์ž…๋‹ˆ๋‹ค. US ๋˜๋Š” FR๊ณผ ๊ฐ™์€ ์œ ๋‹ˆ์ฝ”๋“œ CLDR ๋ฆฌ์ „ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๊ตญ๊ฐ€์—์„œ ์ด ์ฝ”๋“œ๋Š” ISO-3166-2 ์ฝ”๋“œ์™€ ๋ฐ”๋กœ ๋Œ€์‘ํ•ฉ๋‹ˆ๋‹ค. โœ” โœ” โœ”
client_region_subdivision ํด๋ผ์ด์–ธํŠธ์˜ IP ์ฃผ์†Œ์™€ ๊ด€๋ จ๋œ ๊ตญ๊ฐ€์˜ ๊ตฌํš์ž…๋‹ˆ๋‹ค(์˜ˆ: ์ฃผ ๋˜๋Š” ์‹œ/๋„). ์œ ๋‹ˆ์ฝ”๋“œ CLDR ํ•˜์œ„ ์˜์—ญ ID์ž…๋‹ˆ๋‹ค(์˜ˆ: USCA ๋˜๋Š” CAON). ์ด๋Ÿฌํ•œ ์œ ๋‹ˆ์ฝ”๋“œ ์ฝ”๋“œ๋Š” ISO-3166-2 ํ‘œ์ค€์— ์ •์˜๋œ ๊ตฌํš์—์„œ ํŒŒ์ƒ๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. โœ” โœ” โœ”
client_rtt_msec CDN๊ณผ HTTP(S) ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด์˜ ์˜ˆ์ƒ ์™•๋ณต ์ „์†ก ์‹œ๊ฐ„(๋ฐ€๋ฆฌ์ดˆ)์ž…๋‹ˆ๋‹ค. ์ด๋Š” RFC 2988์— ๋”ฐ๋ผ CDN์˜ TCP ์Šคํƒ์œผ๋กœ ์ธก์ •๋œ ํ‰ํ™œ ์™•๋ณต ์‹œ๊ฐ„(Smoothed Round Trip Time, SRTT) ๋งค๊ฐœ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค. โœ” โœ”
device_request_type ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‚ฌ์šฉ ์ค‘์ธ ๊ธฐ๊ธฐ ์œ ํ˜•์ž…๋‹ˆ๋‹ค. ์œ ํšจํ•œ ๊ฐ’์€ DESKTOP, MOBILE, TABLET, SMART_TV, GAME_CONSOLE, WEARABLE, UNDETERMINED์ž…๋‹ˆ๋‹ค. โœ” โœ”
original_request_id ์›๋ž˜ ์ด ์‘๋‹ต์„ ์ƒ์„ฑํ•œ ์š”์ฒญ์— ํ• ๋‹น๋œ ๊ณ ์œ  ์‹๋ณ„์ž์ž…๋‹ˆ๋‹ค. ์บ์‹œ๋œ ์‘๋‹ต์˜ ๊ฒฝ์šฐ request_id์™€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ์—๋งŒ ์ฑ„์›Œ์ง‘๋‹ˆ๋‹ค. โœ”
origin_name ์‘๋‹ต์ด ํ”„๋ก์‹œ๋œ EdgeCacheOrigin ๋ฆฌ์†Œ์Šค์ž…๋‹ˆ๋‹ค. โœ”
origin_request_header ๊ต์ฐจ ์ถœ์ฒ˜ ๋ฆฌ์†Œ์Šค ๊ณต์œ (CORS) ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋Œ€ํ•ด ์š”์ฒญ์˜ ์›๋ณธ ํ—ค๋” ๊ฐ’์„ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค. โœ”
proxy_status ์‘๋‹ต ๊ฒฝ๋กœ์— ์žˆ๋Š” ์ค‘๊ฐ„ HTTP ํ”„๋ก์‹œ์˜ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค. ์ด ๊ฐ’์€ RFC 9209๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค. EdgeCacheService ๋ฆฌ์†Œ์Šค๋Š” Google-Edge-Cache๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์›๋ณธ์—์„œ ์‘๋‹ต์„ ๊ฐ€์ ธ์˜จ ๊ฒฝ์šฐ EdgeCacheOrigin ๋ฆฌ์†Œ์Šค๊ฐ€ Google-Edge-Cache-Origin์„ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. โœ”
tls_sni_hostname TLS ๋˜๋Š” QUIC ํ•ธ๋“œ์…ฐ์ดํฌ ์ค‘์— ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ œ๊ณตํ•œ ๊ฒฝ์šฐ ์„œ๋ฒ„ ์ด๋ฆ„ ํ‘œ์‹œ(RFC 6066์— ์ •์˜๋œ ๋Œ€๋กœ)์ž…๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์ด ์†Œ๋ฌธ์ž๋กœ ๋ณ€ํ™˜๋˜๊ณ  ๋ชจ๋“  ํ›„ํ–‰ ์ ์ด ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค. โœ” โœ”
tls_version SSL ํ•ธ๋“œ์…ฐ์ดํฌ ์ค‘ ํด๋ผ์ด์–ธํŠธ์™€ ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ ์‚ฌ์ด์— ํ˜‘์ƒ๋œ TLS ๋ฒ„์ „์ž…๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•œ ๊ฐ’์—๋Š” TLSv1, TLSv1.1, TLSv1.2, TLSv1.3์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ TLS ๋Œ€์‹  QUIC๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๊ฐ’์ด QUIC์ž…๋‹ˆ๋‹ค. โœ” โœ”
tls_cipher_suite TLS ํ•ธ๋“œ์…ฐ์ดํฌ ์ค‘์— ํ˜‘์ƒ๋œ ์•”ํ˜ธ ๋ชจ์Œ์ž…๋‹ˆ๋‹ค. ๊ฐ’์€ IANA TLS ์•”ํ˜ธํ™” ์Šค์œ„ํŠธ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ์ •์˜๋ฉ๋‹ˆ๋‹ค(์˜ˆ: TLS_RSA_WITH_AES_128_GCM_SHA256). QUIC ๋ฐ ์•”ํ˜ธํ™”๋˜์ง€ ์•Š์€ ํด๋ผ์ด์–ธํŠธ ์—ฐ๊ฒฐ์˜ ๊ฒฝ์šฐ ์ด ๊ฐ’์€ ๋น„์–ด ์žˆ์Šต๋‹ˆ๋‹ค. โœ” โœ”
user_agent_family ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‚ฌ์šฉ ์ค‘์ธ ๋ธŒ๋ผ์šฐ์ € ์ œํ’ˆ๊ตฐ์ž…๋‹ˆ๋‹ค. ์œ ํšจํ•œ ๊ฐ’์€ APPLE, APPLEWEBKIT, BLACKBERRY, DOCOMO, GECKO, GOOGLE, KHTML, KOREAN, MICROSOFT, MSIE, NOKIA, NETFRONT, OBIGO, OPENWAVE, OPERA, OTHER, POLARIS, TELECA, SEMC, SMIT, USER_DEFINED์ž…๋‹ˆ๋‹ค. โœ” โœ”

์ปค์Šคํ…€ ๋ณ€์ˆ˜์—๋Š” ๋‹ค์Œ ๊ณ ๋ ค์‚ฌํ•ญ์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

  • ์‚ญ์ œ๋˜๋Š” ๋‹ค์Œ ํ•ญ๋ชฉ์„ ์ œ์™ธํ•˜๊ณ  ๊ธฐ์กด ์š”์ฒญ ๋ฐ ์‘๋‹ต ํ—ค๋”๋Š” ๋ณด์กด๋ฉ๋‹ˆ๋‹ค.

    • X-User-IP
    • X-Google ๋˜๋Š” X-GFE๊ฐ€ ์žˆ๋Š” ๋ชจ๋“  ํ—ค๋”
  • ์˜ค๋ž˜๋œ ์–‘์‹์€ ํ—ˆ์šฉ๋˜์ง€ ์•Š์œผ๋ฉฐ ํ—ค๋” ํ‚ค์™€ ๊ฐ’์€ RFC 7230๊ณผ ํ˜ธํ™˜๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ๋ชจ๋“  ํ—ค๋” ํ‚ค๋Š” ์†Œ๋ฌธ์ž๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค(HTTP/2 ๊ธฐ์ค€).

  • ์ผ๋ถ€ ํ—ค๋”๋Š” ๋ณ‘ํ•ฉ๋ฉ๋‹ˆ๋‹ค. ๋™์ผํ•œ ํ—ค๋” ํ‚ค์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์ธ ๊ฒฝ์šฐ(์˜ˆ: Via) ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ๋Š” ๋‹จ์ผ ํ—ค๋” ํ‚ค์˜ ๋‹จ์ผ ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„๋œ ๋ชฉ๋ก์— ํ•ด๋‹น ๊ฐ’์„ ๊ฒฐํ•ฉํ•ฉ๋‹ˆ๋‹ค. ๊ฐ’์ด ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„๋œ ๋ชฉ๋ก์œผ๋กœ ํ‘œ์‹œ๋  ์ˆ˜ ์žˆ๋Š” ํ—ค๋”๋งŒ ๋ณ‘ํ•ฉ๋ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ—ค๋”(์˜ˆ: Set-Cookie)๋Š” ๋ณ‘ํ•ฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ์ผ๋ถ€ ํ—ค๋”๊ฐ€ ์ถ”๊ฐ€๋˜๊ฑฐ๋‚˜ ํ—ค๋”์— ๊ฐ’์ด ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. Media CDN์€ ํ•ญ์ƒ Via ๋ฐ X-Forwarded-For์™€ ๊ฐ™์€ ํŠน์ • ํ—ค๋”๋ฅผ ์ถ”๊ฐ€ ๋˜๋Š” ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

  • Media CDN์€ ํด๋ผ์ด์–ธํŠธ ๋˜๋Š” ์›๋ณธ์—์„œ ์„ค์ •๋˜์—ˆ๋”๋ผ๋„ ์ง€์›๋˜๋Š” ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ชจ๋“  ์‘๋‹ต ํ—ค๋”๋ฅผ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ปค์Šคํ…€ ํ—ค๋” ๊ตฌ์„ฑ ์™ธ์—๋„ ํด๋ผ์ด์–ธํŠธ(์˜ˆ: ๋™์˜์ƒ ํ”Œ๋ ˆ์ด์–ด) ๋˜๋Š” ์›๋ณธ ์ธํ”„๋ผ์—์„œ ๋™์  ํ—ค๋”๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Media CDN์€ ์š”์ฒญ ๊ฒฝ๋กœ์˜ ๋ณ€์ˆ˜๋ฅผ ํ™•์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ์˜ˆ๋ฅผ ๋“ค์–ด ์•ž์—์„œ ์„ค๋ช…ํ•œ ๊ทœ์น™์— ๋”ฐ๋ผ X-Goog- ๋ฐ X-Amz- ํ—ค๋”๊ฐ€ ๋ณด์กด๋˜๊ณ  ์†Œ๋ฌธ์ž๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.

์บ์‹œ ์ƒํƒœ ๊ฐ’

{cdn_cache_status} ํ—ค๋” ๋ณ€์ˆ˜๋Š” ์‘๋‹ต์„ ์ œ๊ณตํ•œ ์บ์‹œ ๊ณ„์ธต์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. {cdn_cache_status} ํ—ค๋” ๋ณ€์ˆ˜๋ฅผ ํ•ด์„ํ•˜๊ธฐ ์œ„ํ•œ ๋‹ค์Œ ๊ฐ€์ด๋“œ๋ผ์ธ์„ ๊ณ ๋ คํ•˜์„ธ์š”.

  • ํ—ค๋”์— hit๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ์šฐ ์š”์ฒญ๋œ ์ฝ˜ํ…์ธ ๊ฐ€ ์บ์‹œ์—์„œ ๊ฒ€์ƒ‰๋ฉ๋‹ˆ๋‹ค.
  • ํ—ค๋”์— miss๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ์šฐ ์š”์ฒญ๋œ ์ฝ˜ํ…์ธ ๋ฅผ ์บ์‹œ ๋…ธ๋“œ์—์„œ ์ฐพ์„ ์ˆ˜ ์—†๊ณ  ์—…์ŠคํŠธ๋ฆผ ๋…ธ๋“œ์—์„œ ๊ฒ€์ƒ‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ํ—ค๋”์— fetch๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ์šฐ ์š”์ฒญ๋œ ์ฝ˜ํ…์ธ ๊ฐ€ ์›๋ณธ์—์„œ ๊ฒ€์ƒ‰๋ฉ๋‹ˆ๋‹ค.
  • ํ—ค๋”์— uncacheable์ด ํฌํ•จ๋˜์—ˆ์œผ๋ฉด ์š”์ฒญ๋œ ์ฝ˜ํ…์ธ ๊ฐ€ ์บ์‹ฑ ์ธํ”„๋ผ์˜ ์ผ๋ถ€ ๋˜๋Š” ๋ชจ๋“  ๊ตฌ์„ฑ์š”์†Œ์—์„œ ์บ์‹œ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒƒ์œผ๋กœ ๊ณ ๋ ค๋ฉ๋‹ˆ๋‹ค.

    • ๋˜ํ•œ ํ—ค๋”์— hit ๋˜๋Š” miss๊ฐ€ ํฌํ•จ๋˜์—ˆ์œผ๋ฉด ์š”์ฒญ๋œ ์ฝ˜ํ…์ธ ๊ฐ€ ์ผ๋ถ€ ์บ์‹ฑ ๊ตฌ์„ฑ์š”์†Œ์—์„œ ์บ์‹œ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ  ๋‹ค๋ฅธ ๊ตฌ์„ฑ์š”์†Œ์—์„œ๋Š” ์บ์‹œ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์œผ๋กœ ๊ณ ๋ ค๋ฉ๋‹ˆ๋‹ค.
    • ๋˜ํ•œ ํ—ค๋”์— hit ๋˜๋Š” miss๊ฐ€ ํฌํ•จ๋˜์ง€ ์•Š์•˜์œผ๋ฉด ์š”์ฒญ๋œ ์ฝ˜ํ…์ธ ๊ฐ€ ๋ชจ๋“  ์บ์‹ฑ ๊ตฌ์„ฑ์š”์†Œ์—์„œ ์บ์‹œ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒƒ์œผ๋กœ ๊ณ ๋ ค๋˜๊ณ  ์ด ์ฝ˜ํ…์ธ ์˜ ๋ชจ๋“  ์š”์ฒญ์„ ์›๋ณธ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ์ฝ˜ํ…์ธ ๊ฐ€ ์ ์ ˆํ•˜๊ฒŒ ์บ์‹œ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด Media CDN ์›๋ณธ ์š”๊ตฌ์‚ฌํ•ญ์„ ๊ฒ€ํ† ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ํ—ค๋”

Media CDN์€ ๋‹ค์Œ ์š”์ฒญ ๋ฐ ์‘๋‹ต ํ—ค๋”๋ฅผ ๊ฐ๊ฐ ์›๋ณธ ์š”์ฒญ๊ณผ ํด๋ผ์ด์–ธํŠธ ์‘๋‹ต์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

ํ—ค๋” ์„ค๋ช… ์š”์ฒญ ์‘๋‹ต
x-request-id ์ง€์ •๋œ ์š”์ฒญ์˜ ๊ณ ์œ  ์‹๋ณ„์ž์ž…๋‹ˆ๋‹ค. ์ด ๊ฐ’์€ ๋˜ํ•œ ์š”์ฒญ ๋กœ๊ทธ์— jsonPayload.requestId๋กœ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋กœ๊ทธ ํ•ญ๋ชฉ์— ๋Œ€ํ•ด ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ/์‘๋‹ต์„ ์ผ์น˜์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. โœ”
age

์บ์‹œ๋œ ๊ฐ์ฒด์˜ ๊ธฐ๊ฐ„(์บ์‹œ์— ๋จธ๋ฌด๋ฅธ ์ดˆ ๋‹จ์œ„ ์‹œ๊ฐ„)์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๊ธฐ๊ฐ„์€ ๋กฑํ…Œ์ผ(๋ณดํ˜ธ) ์บ์‹œ ์œ„์น˜์—์„œ ๊ฐ์ฒด๊ฐ€ ์ฒ˜์Œ ์บ์‹œ๋˜์—ˆ์„ ๋•Œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค.

age ํ—ค๋”๊ฐ€ ์—†๋Š” ์‘๋‹ต์€ ์บ์‹œ์—์„œ ์ œ๊ณต๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

โœ”
via

Google์„ ์ค‘๊ฐ„ ํ”„๋ก์‹œ๋กœ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค.

1.1 google๋กœ ์„ค์ •๋˜๋ฉฐ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

โœ” โœ”
server Google-Edge-Cache๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. โœ”
cdn-loop

๋ฃจํ”„๋ฅผ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์›๋ณธ ํ˜ธ์ŠคํŠธ๊ฐ€ ์‚ฌ์šฉ์ž ๋Œ€์ƒ(์—์ง€) ํ˜ธ์ŠคํŠธ์™€ ๋™์ผํ•œ ์œ„์น˜์ž…๋‹ˆ๋‹ค.

google ํ† ํฐ์€ RFC 8586์— ๋”ฐ๋ผ ํ—ค๋”์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ํ† ํฐ์€ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

โœ”
forwarded

x-forwarded-for ํ—ค๋”์˜ ๊ตฌ์กฐํ™”๋œ ๋ฒ„์ „์ž…๋‹ˆ๋‹ค. forwarded ํ—ค๋”๋Š” RFC 7239์— ์ •์˜๋ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ํ—ค๋”๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ”„๋ก์‹œ๊ฐ€ ๊ฒฝ๋กœ์— ์žˆ์„ ๋•Œ ์—ฐ๊ฒฐ ์ค‘์ธ ํด๋ผ์ด์–ธํŠธ์˜ IP ์ฃผ์†Œ๋ฅผ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด IP ์ฃผ์†Œ๊ฐ€ 192.0.2.60์ธ ํด๋ผ์ด์–ธํŠธ๊ฐ€ HTTPS๋ฅผ ํ†ตํ•ด Media CDN์— ์—ฐ๊ฒฐํ•  ๊ฒฝ์šฐ forwarded ํ—ค๋”๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฑ„์›Œ์ง‘๋‹ˆ๋‹ค.

forwarded: [for=192.0.2.60;proto=https]

ํด๋ผ์ด์–ธํŠธ ์ธก ํ”„๋ก์‹œ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ์œผ๋ฉด Media CDN์— ์—ฐ๊ฒฐ๋œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ—ค๋” ๊ฐ’์— ์ถ”๊ฐ€๋œ ๋งˆ์ง€๋ง‰ ์ฃผ์†Œ์ž…๋‹ˆ๋‹ค.

โœ”
x-forwarded-for

forwarded ํ—ค๋”์˜ ๊ตฌ์กฐํ™”๋˜์ง€ ์•Š์€ ์‚ฌ์‹ค์ƒ์˜ ํ‘œ์ค€ ๋ฒ„์ „์ž…๋‹ˆ๋‹ค. ๊ฐ’์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„๋ฉ๋‹ˆ๋‹ค.

๋‘ ํ—ค๋” ๋ชจ๋‘ forwarded ํ—ค๋”๋ฅผ ์ธ์‹ํ•˜์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ์กด ์›์ ์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ์š”์ฒญ์—์„œ ์ „์†ก๋ฉ๋‹ˆ๋‹ค.

โœ”

ํ—ค๋” ํ‚ค๋Š” ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์š”์ฒญ ๋ฐ ์‘๋‹ต ํ—ค๋” ๋ชจ๋‘ ์†Œ๋ฌธ์ž๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.

์—์ง€ ์ ‘์† ์ง€์ (PoP) ์œ„์น˜์™€ ์บ์‹œ ์ƒํƒœ(์˜ˆ: hit ๋ฐ miss)๋ฅผ ํฌํ•จํ•˜์—ฌ ๋‹ค๋ฅธ ํ—ค๋”๋Š” ๋™์  ํ—ค๋” ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.