๐ŸŒ AWS CloudFront๋กœ ์ •์  ์›น์‚ฌ์ดํŠธ ๋ฐฐํฌํ•˜๊ธฐ

ddo-logยท2025๋…„ 8์›” 25์ผ

Cloud

๋ชฉ๋ก ๋ณด๊ธฐ
7/9

TL;DR

  • CloudFront๋Š” AWS์˜ ๊ธ€๋กœ๋ฒŒ CDN ์„œ๋น„์Šค
  • S3์— ์˜ฌ๋ฆฐ ์ •์  ํŒŒ์ผ(JS, CSS, HTML, ์ด๋ฏธ์ง€ ๋“ฑ)์„ ์ „ ์„ธ๊ณ„ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋น ๋ฅด๊ฒŒ ์ œ๊ณต
  • OAC(Origin Access Control) ๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์•ˆ ๊ฐ•ํ™” (S3๋ฅผ ํผ๋ธ”๋ฆญ์œผ๋กœ ์—ด์ง€ ์•Š์Œ)
  • Route 53์„ ํ†ตํ•ด ๋„๋ฉ”์ธ๊ณผ ์—ฐ๊ฒฐ ๊ฐ€๋Šฅ
  • ์ตœ์‹  ๋ฐฉ์‹์€ S3 + CloudFront + Route 53 ์กฐํ•ฉ์ด ์ •์„

1. CloudFront๋ž€?

  • CloudFront๋Š” AWS์—์„œ ์ œ๊ณตํ•˜๋Š” CDN(Content Delivery Network) ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž๊ฐ€ ์–ด๋””์„œ ์ ‘์†ํ•˜๋“ , ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์—ฃ์ง€ ๋กœ์ผ€์ด์…˜(์„œ๋ฒ„)์—์„œ ์ •์  ํŒŒ์ผ์„ ์ œ๊ณตํ•ด ์„ฑ๋Šฅ์„ ๋†’์—ฌ์ค๋‹ˆ๋‹ค.
  • ๋‹จ์ˆœ ์บ์‹ฑ๋ฟ ์•„๋‹ˆ๋ผ HTTPS(๋ณด์•ˆ), WAF(๋ณด์•ˆ ๋ฐฉํ™”๋ฒฝ), ๊ฒฝ๋กœ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ… ๊ธฐ๋Šฅ๋„ ํ•จ๊ป˜ ์ œ๊ณต.

2. S3 ๋ฒ„ํ‚ท ์ค€๋น„

  1. AWS ์ฝ˜์†” โ†’ S3 > ๋ฒ„ํ‚ท ์ƒ์„ฑ
  2. ๋ฒ„ํ‚ท ์ด๋ฆ„์€ ์œ ๋‹ˆํฌํ•˜๊ฒŒ ์„ค์ • (์˜ˆ: myapp-bucket)
  3. ํผ๋ธ”๋ฆญ ์•ก์„ธ์Šค ์ฐจ๋‹จ์€ ์ผœ๋‘  (์ง์ ‘ ํผ๋ธ”๋ฆญ ๊ณต๊ฐœ X)
  4. ๋นŒ๋“œ๋œ ์ •์  ํŒŒ์ผ(index.html, JS, CSS ๋“ฑ)์„ ์—…๋กœ๋“œ

3. CloudFront ๋ฐฐํฌ ์ƒ์„ฑ

  1. CloudFront > ๋ฐฐํฌ ์ƒ์„ฑ

  2. ์›๋ณธ(Origin) ์„ค์ •

    • Origin Type: S3
    • Origin Access: OAC(Origin Access Control) โ†’ CloudFront๋งŒ S3์— ์ ‘๊ทผ ๊ฐ€๋Šฅ
  3. ์บ์‹œ ๋™์ž‘(Behavior) ์„ค์ •

    • Viewer Protocol Policy: HTTP โ†’ HTTPS ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ
    • Allowed Methods: GET, HEAD (ํ•„์š”ํ•˜๋ฉด POST ๋“ฑ ์ถ”๊ฐ€)
    • Cache Policy: ๊ธฐ๋ณธ(CachingOptimized) ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  4. ๋ฐฐํฌ ์ƒ์„ฑ(Create distribution) ํด๋ฆญ


4. Route 53์œผ๋กœ ๋„๋ฉ”์ธ ์—ฐ๊ฒฐ

  1. Route 53 > ํ˜ธ์ŠคํŒ… ์˜์—ญ(Hosted Zone) ์ƒ์„ฑ (์ด๋ฏธ ๋„๋ฉ”์ธ์ด ์žˆ๋‹ค๋ฉด ํ•ด๋‹น ๋„๋ฉ”์ธ ์„ ํƒ)

  2. ๋ ˆ์ฝ”๋“œ ์ƒ์„ฑ

    • ๋ ˆ์ฝ”๋“œ ์ด๋ฆ„: www.myapp.com
    • ์œ ํ˜•: A (Alias)
    • Alias ๋Œ€์ƒ: CloudFront ๋ฐฐํฌ ๋„๋ฉ”์ธ ์„ ํƒ
  3. ์ƒ์„ฑ ์™„๋ฃŒ ํ›„, www.myapp.com ์œผ๋กœ ์ ‘์†ํ•˜๋ฉด CloudFront ๋ฐฐํฌ์™€ ์—ฐ๊ฒฐ๋จ


5. S3 ๋ฒ„ํ‚ท ์ •์ฑ… ์„ค์ •

CloudFront๊ฐ€ S3 ํŒŒ์ผ์„ ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก ๊ถŒํ•œ ๋ถ€์—ฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowCloudFrontAccess",
      "Effect": "Allow",
      "Principal": {
        "Service": "cloudfront.amazonaws.com"
      },
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::myapp-bucket/*",
      "Condition": {
        "StringEquals": {
          "AWS:SourceArn": "arn:aws:cloudfront::<account-id>:distribution/<distribution-id>"
        }
      }
    }
  ]
}

6. ์ •์  ์›น์‚ฌ์ดํŠธ ํ˜ธ์ŠคํŒ… ์˜ต์…˜ (์ฃผ์˜)

  • ๊ณผ๊ฑฐ์—๋Š” S3 ์ •์  ์›น์‚ฌ์ดํŠธ ํ˜ธ์ŠคํŒ… ๊ธฐ๋Šฅ์„ ์ง์ ‘ ์ผœ์„œ index.html์„ ๋…ธ์ถœํ–ˆ์Œ
  • ํ•˜์ง€๋งŒ ํ˜„์žฌ๋Š” CloudFront + OAC ์กฐํ•ฉ์ด ๋ณด์•ˆ๊ณผ ํ™•์žฅ์„ฑ ์ธก๋ฉด์—์„œ ๊ถŒ์žฅ๋จ
  • ์ฆ‰, S3๋Š” ๋‹จ์ˆœ ํŒŒ์ผ ์ €์žฅ์†Œ ์—ญํ• ๋งŒ ํ•˜๊ณ , ์‚ฌ์šฉ์ž ์ ‘๊ทผ์€ CloudFront๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์ฒ˜๋ฆฌ

7. ์ „์ฒด ํ๋ฆ„

  1. ์‚ฌ์šฉ์ž๊ฐ€ https://www.myapp.com ์ ‘์†
  2. Route 53 โ†’ CloudFront ๋ฐฐํฌ ์—ฐ๊ฒฐ
  3. CloudFront๊ฐ€ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์—ฃ์ง€ ์„œ๋ฒ„์—์„œ ์บ์‹œ๋œ ์ •์  ํŒŒ์ผ ์ œ๊ณต
  4. ์บ์‹œ๊ฐ€ ์—†์œผ๋ฉด ์›๋ณธ(S3)์—์„œ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ „๋‹ฌ
User โ†’ Route 53 โ†’ CloudFront (CDN) โ†’ S3 (์ •์  ํŒŒ์ผ)

๋งˆ๋ฌด๋ฆฌ

  • CloudFront๋Š” ๋‹จ์ˆœ CDN์„ ๋„˜์–ด, ๋ณด์•ˆ + ์„ฑ๋Šฅ + ํ™•์žฅ์„ฑ์„ ๋™์‹œ์— ์ œ๊ณตํ•˜๋Š” AWS์˜ ํ•ต์‹ฌ ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.
  • ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๋Š” ๋ฐฐํฌ๋œ ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฌผ์„ S3์— ์—…๋กœ๋“œํ•˜๊ณ ,
    CloudFront์™€ ์—ฐ๊ฒฐ๋งŒ ํ•ด์ฃผ๋ฉด ์ „ ์„ธ๊ณ„ ์–ด๋””์„œ๋“  ๋น ๋ฅธ ์†๋„๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
profile
Front-End Programmer

0๊ฐœ์˜ ๋Œ“๊ธ€