AWS CloudFront Cache Key ์™„๋ฒฝ ๊ฐ€์ด๋“œ

Cache Key ๊ฐœ๋… ์ดํ•ดํ•˜๊ธฐ

๊ธฐ๋ณธ ๊ฐœ๋…

Cache Key๋Š” ๋งˆ์น˜ ๋„์„œ๊ด€์˜ ์ฑ… ๋ถ„๋ฅ˜ ๋ฒˆํ˜ธ์™€ ๊ฐ™๋‹ค. ๋„์„œ๊ด€์—์„œ ์ฑ…์„ ์ฐพ์„ ๋•Œ ๋ถ„๋ฅ˜ ๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๋“ฏ์ด, CloudFront๋Š” Cache Key๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์บ์‹œ๋œ ์ฝ˜ํ…์ธ ๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ๊ฒ€์ƒ‰ํ•œ๋‹ค.

๊ธฐ๋ณธ ๊ตฌ์กฐ

graph LR
    A[์š”์ฒญ] --> B[Cache Key ์ƒ์„ฑ]
    B --> C{์บ์‹œ ํ™•์ธ}
    C -->|Hit| D[์บ์‹œ๋œ ์‘๋‹ต ๋ฐ˜ํ™˜]
    C -->|Miss| E[์˜ค๋ฆฌ์ง„์—์„œ ์ฝ˜ํ…์ธ  ๊ฐ€์ ธ์˜ค๊ธฐ]
    E --> F[์บ์‹œ ์ €์žฅ]
    F --> D

Cache Key ๊ตฌ์„ฑ ์š”์†Œ

1. ๊ธฐ๋ณธ ๊ตฌ์„ฑ ์š”์†Œ

  • URL ๊ฒฝ๋กœ
  • ํ˜ธ์ŠคํŠธ ์ด๋ฆ„
  • ํ”„๋กœํ† ์ฝœ(HTTP/HTTPS)

2. ์„ ํƒ์  ๊ตฌ์„ฑ ์š”์†Œ

  • ์ฟผ๋ฆฌ ๋ฌธ์ž์—ด
  • HTTP ํ—ค๋”
  • ์ฟ ํ‚ค
  • ์‚ฌ์šฉ์ž ์ •์˜ ๊ฐ’

Cache Key ์„ค์ • ์˜ˆ์‹œ

CloudFront ์„ค์ • ์˜ˆ์‹œ

๊ธฐ๋ณธ ์„ค์ • (๋ชจ๋“  ์ฟผ๋ฆฌ ๋ฌธ์ž์—ด ํฌํ•จ)

{
    "DistributionConfig": {
        "CacheBehaviors": {
            "DefaultCacheBehavior": {
                "CachePolicyId": "658327ea-f89d-4fab-a63d-7e88639e58f6"
            }
        }
    }
}

ํŠน์ • ์ฟผ๋ฆฌ ๋ฌธ์ž์—ด๋งŒ ํฌํ•จ

{
    "CachePolicy": {
        "Name": "CustomQueryString",
        "QueryStringsConfig": {
            "QueryStringBehavior": "WHITELIST",
            "QueryStrings": {
                "Items": [
                    "size",
                    "color",
                    "response-content-disposition"
                ]
            }
        }
    }
}

์‹ค์ œ ์‚ฌ์šฉ ์‚ฌ๋ก€

1. S3 ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ ์„ค์ •

์ž˜๋ชป๋œ ์˜ˆ์‹œ

// Cache Key ์„ค์ • ์—†์ด S3 ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ URL ์ƒ์„ฑ
const fileUrl = 'https://cdn.example.com/files/document.pdf?response-content-disposition=attachment';

์˜ฌ๋ฐ”๋ฅธ ์˜ˆ์‹œ

// Cache Key์— response-content-disposition ํฌํ•จ
const fileUrl = 'https://cdn.example.com/files/document.pdf';
const downloadUrl = `${fileUrl}?response-content-disposition=${encodeURIComponent('attachment; filename="custom-name.pdf"')}`;

2. ๋””๋ฐ”์ด์Šค๋ณ„ ์ตœ์ ํ™” ์„ค์ •

{
    "CachePolicy": {
        "Name": "DeviceOptimized",
        "HeadersConfig": {
            "HeaderBehavior": "WHITELIST",
            "Headers": {
                "Items": [
                    "CloudFront-Is-Mobile-Viewer",
                    "CloudFront-Is-Tablet-Viewer"
                ]
            }
        }
    }
}

์„ฑ๋Šฅ ์ตœ์ ํ™”

Cache Key ์ตœ์ ํ™” ์›์น™

graph TD
    A[Cache Key ๋ถ„์„] --> B{ํ•„์ˆ˜ ์š”์†Œ์ธ๊ฐ€?}
    B -->|Yes| C[ํฌํ•จ]
    B -->|No| D[์ œ์™ธ]
    C --> E[์บ์‹œ ์ ์ค‘๋ฅ  ๋ชจ๋‹ˆํ„ฐ๋ง]
    D --> E
    E --> F{์„ฑ๋Šฅ ๊ฐœ์„  ํ•„์š”?}
    F -->|Yes| A
    F -->|No| G[์™„๋ฃŒ]

์ตœ์ ํ™” ์ฒดํฌ๋ฆฌ์ŠคํŠธ

  1. ๋ถˆํ•„์š”ํ•œ ์ฟผ๋ฆฌ ๋ฌธ์ž์—ด ์ œ๊ฑฐ
  2. ํ•„์ˆ˜ ํ—ค๋”๋งŒ ํฌํ•จ
  3. ์ฟ ํ‚ค ์‚ฌ์šฉ ์ตœ์†Œํ™”
  4. ์บ์‹œ ์ ์ค‘๋ฅ (Hit Ratio) ๋ชจ๋‹ˆํ„ฐ๋ง

์ฃผ์˜์‚ฌํ•ญ

๋ณด์•ˆ ๊ด€๋ จ

  • ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ Cache Key์— ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค
  • Authorization ํ—ค๋” ์‚ฌ์šฉ ์‹œ ์ฃผ์˜
  • HTTPS ์š”์ฒญ ์ฒ˜๋ฆฌ ๋ฐฉ์‹ ํ™•์ธ

์„ฑ๋Šฅ ๊ด€๋ จ

  • Cache Key ๋ณต์žก๋„์™€ ์บ์‹œ ์ ์ค‘๋ฅ ์˜ ๊ท ํ˜•
  • ๊ณผ๋„ํ•œ Cache Key ๋ณ€ํ˜• ์ฃผ์˜
  • ์ •๊ธฐ์ ์ธ ์บ์‹œ ์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง

๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๋””๋ฒ„๊น…

CloudWatch ๋ฉ”ํŠธ๋ฆญ

{
    "Namespace": "AWS/CloudFront",
    "MetricName": "CacheHitRate",
    "Dimensions": [
        {
            "Name": "DistributionId",
            "Value": "EDFDVBD6EXAMPLE"
        }
    ]
}

๊ฒฐ๋ก 

ํšจ์œจ์ ์ธ Cache Key ์„ค์ •์€ CloudFront ์„ฑ๋Šฅ ์ตœ์ ํ™”์˜ ํ•ต์‹ฌ์ด๋‹ค. ์บ์‹œ ์ ์ค‘๋ฅ ์„ ๋†’์ด๋ฉด์„œ๋„ ํ•„์š”ํ•œ ์‚ฌ์šฉ์ž ๋งž์ถคํ˜• ์ฝ˜ํ…์ธ ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋„๋ก ์‹ ์ค‘ํ•˜๊ฒŒ ์„ค๊ณ„ํ•ด์•ผ ํ•œ๋‹ค. ํŠนํžˆ S3์™€ ๊ฐ™์€ ์˜ค๋ฆฌ์ง„ ์„œ๋ฒ„์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์ฟผ๋ฆฌ ๋ฌธ์ž์—ด ํŒŒ๋ผ๋ฏธํ„ฐ ์ฒ˜๋ฆฌ์— ์ฃผ์˜๋ฅผ ๊ธฐ์šธ์—ฌ์•ผ ํ•œ๋‹ค.