๐Ÿธminzzi
Minzzi์•ผ
๐Ÿธminzzi
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (132)
    • ์˜ค๋ฅ˜ํ•ด๊ฒฐ (14)
    • FE (36)
      • Next.js (17)
      • React (4)
      • React Native (0)
      • TypeScript (1)
      • JavaScript (14)
    • BE (0)
      • Nest.js (0)
    • ๋ฐ๋ธŒ์ฝ”์Šค (7)
    • ์›น ํ”„๋กœ์ ํŠธ (5)
    • CS (28)
      • Algorithm (5)
      • Python (4)
      • C++ (2)
      • Operating System (4)
      • Computer Networking (3)
      • Data Structure (1)
      • Machine Learning (3)
      • Tip (6)
    • Github (4)
    • Flutter (3)
      • ํ”„๋กœ์ ํŠธ (3)
    • Private (3)
      • ํšŒ๊ณ  (7)
      • ๋ฉด์ ‘ (17)
    • ๊ฐœ๋ฐœ๋„์„œ (7)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • reflow
  • ๋ฉด์ ‘
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ
  • ๋ชจ๋˜๋ฆฌ์•กํŠธ๋”ฅ๋‹ค์ด๋ธŒ
  • ํ˜ธ์ด์ŠคํŒ…
  • ์‹คํ–‰์ปจํ…์ŠคํŠธ
  • ๋ ‰์‹œ์ปฌ
  • ์ฝœ์Šคํƒ
  • ์‹คํ–‰์ปจํƒ์ŠคํŠธ
  • ์ด๋ฒคํŠธ๋ฃจํ”„
  • ์ด๋ฏธ์ง€ ์ตœ์ ํ™”
  • next.js
  • ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…
  • ์›์‹œํƒ€์ž…
  • ํ‹ฐ์Šคํ† ๋ฆฌ์ฑŒ๋ฆฐ์ง€
  • react
  • layout shift
  • ํž™์˜์—ญ
  • SSR
  • ์˜ค๋ธ”์™„

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
๐Ÿธminzzi

Minzzi์•ผ

AWS cloudfront ๋ฐฐํฌ ํ™”๋ฉด์ด S3 ๊ฒฐ๊ณผ์™€ ๋‹ค๋ฅธ ์ด์œ (feat. ๋ฌดํšจํ™”)
์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

AWS cloudfront ๋ฐฐํฌ ํ™”๋ฉด์ด S3 ๊ฒฐ๊ณผ์™€ ๋‹ค๋ฅธ ์ด์œ (feat. ๋ฌดํšจํ™”)

2024. 10. 13. 06:21

S3์˜ ์—…๋ฐ์ดํŠธ๋œ ์ •์  ๋ฆฌ์†Œ์Šค๋Š” ์ตœ์‹  ์ƒํƒœ์ธ๋ฐ, cloudfront์˜ ๋ฐฐํฌ ๊ฒฐ๊ณผ๋Š” ์ด์ „ ๋ฐฐํฌ ๊ฒฐ๊ณผ์ธ ๋ฌธ์ œ๋ฅผ ๊ฒช์–ด๋ณด์‹  ์  ์žˆ์œผ์‹ ๊ฐ€์š”? ์ €๋Š” ์ตœ๊ทผ์— ํ•ด๋‹น ์›์ธ์„ ๋ชฐ๋ผ ์ƒˆ๋ฒฝ ๋‚ด๋‚ด ํ•ด๋งธ๋˜ ๊ฒฝํ—˜์ด ์žˆ์–ด ์ œ๊ฐ€ ๊ฒช์—ˆ๋˜ ์–ด๋ ค์›€์„ ๋˜‘๊ฐ™์ด ๊ฒช๊ณ  ๊ณ„์‹  ๋ถ„๋“ค์„ ์œ„ํ•ด ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ธฐ๋กํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค!

 

๋ฌธ์ œ

S3์™€ cloudfront๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ์—ฐ๋™ํ•˜๊ณ  ๋„๋ฉ”์ธ์„ ์ด์šฉํ•˜๊ณ  ์žˆ๋‹ค๊ฐ€, ํ”„๋กœ์ ํŠธ์˜ ์—…๋ฐ์ดํŠธ๊ฐ€ ํ•„์š”ํ•ด์„œ ์ƒˆ๋กœ ๋ฐฐํฌ๋ฅผ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ S3 ์ •์  ๋ฆฌ์†Œ์Šค๋Š” ์—…๋ฐ์ดํŠธ๋œ ๋ฒ„์ „์ด ์ž˜ ๋‚˜์˜ค์ง€๋งŒ, ์‹ค์ œ ๋„๋ฉ”์ธ์ด ๋ณด์—ฌ์ฃผ๋Š” ๋ฆฌ์†Œ์Šค๋Š” ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ์ „์˜ ๋ฆฌ์†Œ์Šค์˜€๋Š”๋ฐ์š”, ์ด๋Š” cloudfront๋กœ ๋ฐฐํฌ๋œ S3 ์ •์  ๋ฆฌ์†Œ์Šค๋“ค์ด AWS ์—ฃ์ง€ ๋กœ์ผ€์ด์…˜์— ์ „์†ก๋˜์–ด ์•„์ง ์ƒˆ๋กœ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด ์—ฃ์ง€ ๋กœ์ผ€์ด์…˜์˜ ์บ์‹œ๋Š” 24์‹œ๊ฐ„์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ์–ด ํ•˜๋ฃจ๊ฐ€ ์ง€๋‚˜์•ผ ๋‹ค์‹œ S3์˜ ์ •์  ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฐ›์•„ ์บ์‹œ๋กœ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ๋ฐฉ๋ฒ•

์ €๋Š” ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ์—ฃ์ง€๋กœ์ผ€์ด์…˜์˜ ์บ์‹œ๋ฅผ ๋ฌดํšจํ™” ๊ฐฑ์‹  API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ดˆ๊ธฐํ™”์‹œ์ผœ์ฃผ๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

 

AWS CloudFront์˜ ์บ์‹œ ์ •์ฑ…์— ๋Œ€ํ•œ ๊ณต์‹๋ฌธ์„œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด CloudFront์˜ ์บ์‹œ ๋งŒ๋ฃŒ ์ฃผ๊ธฐ๋Š” ์ž๋™์ ์œผ๋กœ 24์‹œ๊ฐ„์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฌํ•œ TTL์„ ๋ฌด์‹œํ•˜๊ณ  ์ˆ˜์ •๋œ ๋‚ด์šฉ์„ ์บ์‹œ์— ๋ฐ˜์˜ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ๋ฌดํšจํ™” ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

1. ์‚ฌ์šฉ์ž์— CloudFront ๊ถŒํ•œ ์ถ”๊ฐ€

S3์— ์ ‘์†ํ•˜๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ CloudFront ๊ถŒํ•œ์„ ์ถ”๊ฐ€ํ•ด์ค๋‹ˆ๋‹ค.

IAM > ์‚ฌ์šฉ์ž > ์‚ฌ์šฉ์žID ํด๋ฆญ > ๊ถŒํ•œ ํ•ญ๋ชฉ > ๊ถŒํ•œ ์ถ”๊ฐ€ ๊นŒ์ง€ ๋”ฐ๋ผ์™€ ์ฃผ์„ธ์š”.

์ง์ ‘ ์ •์ฑ… ์—ฐ๊ฒฐ์„ ๋ˆ„๋ฅด๊ณ , CloudFrontFullAccess๋ฅผ ์ถ”๊ฐ€ํ•ด์ค๋‹ˆ๋‹ค.

2. CloudFront ๋ฌดํšจํ™” ์„ค์ •

CloudFront > ๋ฐฐํฌ๋œ cloudfront ์„ ํƒ > ๋ฌดํšจํ™” > ๋ฌดํšจํ™” ์ƒ์„ฑ

์œ„ ์‚ฌ์ง„์ฒ˜๋Ÿผ ๊ฐ์ฒด ๊ฒฝ๋กœ์— /*๋ฅผ ๋„ฃ์–ด์ฃผ๋ฉด ๋ฌดํšจํ™”๊ฐ€ ์ง„ํ–‰๋˜์–ด ์บ์‹œ๋œ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฌดํšจํ™”์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ด๋ ‡๊ฒŒ ์ˆ˜๋™์œผ๋กœ ๋ฌดํšจํ™”๋ฅผ ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ github actions์„ ํ†ตํ•ด ๋ฐฐํฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ์„ค์ •ํ•ด๋†“์€ ๋ถ„๋“ค์€ ๋ฌดํšจํ™”๋„ ์ถ”๊ฐ€๋กœ ์„ค์ •ํ•ด์ค„ ์ˆ˜ ์žˆ์œผ๋‹ˆ ์•„๋ž˜ ์ˆœ์„œ๊นŒ์ง€ ๋”ฐ๋ผ์™€์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

3. GithubActions ๋ฌดํšจํ™” ์„ค์ •

๋ฌดํšจํ™” ์„ค์ •์„ ์œ„ํ•œ ๋ช…๋ น์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

aws cloudfront create-invalidation \
--distribution-id ${{ secrets.AWS_CLOUDFRONT_ID}} --paths "/*"

์ด๋ฅผ ์œ„ํ•ด CLOUDFRONT_ID๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. cloudfront์—์„œ ๋ฐฐํฌ๋œ id๋ฅผ ๊ฐ€์ ธ์™€์ฃผ์‹œ๋ฉด๋ฉ๋‹ˆ๋‹ค.

ํ•ด๋‹น ํ‚ค๋Š” ํ”„๋กœ์ ํŠธ ๊นƒํ—ˆ๋ธŒ์—์„œ ์„ค์ •ํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

github ์ ‘์† > ํ”„๋กœ์ ํŠธ ๊นƒํ—ˆ๋ธŒ ๋ ˆํฌ์ง€ํ† ๋ฆฌ > Settings > Security > Secrets and variables > Actions

์ €์ฒ˜๋Ÿผ AWS_CLOUDFRONT_ID ์— ๋ณต์‚ฌํ•œ cloudfront id๋ฅผ ๋„ฃ์–ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ด์ œ yml ํŒŒ์ผ๋กœ ๊ฐ€๋ณผ๊นŒ์š”?

 

์ด๋ฏธ S3์— ๋นŒ๋“œ๋œ ๋ฆฌ์†Œ์Šค๋ฅผ ์˜ฌ๋ฆฌ๋Š” ๊ฒƒ๊นŒ์ง€๋Š” ํ•˜์…จ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ , ๋ฌดํšจํ™”๋ถ€๋ถ„๋งŒ ๊ฐ€์ ธ์˜ค๊ฒ ์Šต๋‹ˆ๋‹ค.

- name: CloudFront Invalidation
  run: |
  aws cloudfront create-invalidation \
  --distribution-id ${{ secrets.AWS_CLOUDFRONT_ID}} --paths "/*"

์ €์˜ ๊ฒฝ์šฐ ์•„๋ž˜์ฒ˜๋Ÿผ env๋กœ ๋”ฐ๋กœ CLOUDFRONT_ID๋ฅผ ์ €์žฅํ•ด์„œ ๋นŒ๋“œํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋”๋ผ๊ตฌ์š”! 

 

์•„๋ž˜ ์ฝ”๋“œ๋•Œ๋ฌธ์— ํ•œ์ฐธ์„ ํ•ด๋งธ์Šต๋‹ˆ๋‹ค... ใ…œ

- name: CloudFront Invalidation
  env:
       CLOUD_FRONT_ID: ${{ secrets.AWS_CLOUDFRONT_ID}}
  run: |
       aws cloudfront create-invalidation \
         --distribution-id $CLOUD_FRONT_ID --paths "/*"

 

์ด์ œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ pushํ•˜๋ฉด ๋ฌดํšจํ™”๊ฐ€ ์ž๋™์œผ๋กœ ๋ ๊ฒ๋‹ˆ๋‹ค! ๊ทธ๋Ÿฌ๋ฉด cloudfront ๋ฌดํšจํ™” ํŽ˜์ด์ง€์—์„œ ํ•ด๋‹น ๊ฒฐ๊ณผ๋ฅผ ๋ณด์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋”๋ณด๊ธฐ

์ฐธ๊ณ 

https://velog.io/@yevini118/AWS-Cloudfront-%EC%BA%90%EC%8B%9C-%EB%AC%B4%ED%9A%A8%ED%99%94

 

[AWS] Cloudfront ์บ์‹œ ๋ฌดํšจํ™”

Https๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด์„œ ๊ธฐ์กด์‚ฌ์šฉํ•˜๋˜ S3์™€ ํ•จ๊ป˜ Cloutfront๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. S3์˜ ๋ฆฌ์•กํŠธ ๋นŒ๋“œ ํŒŒ์ผ์„ ์—…๋ฐ์ดํŠธ ํ•˜์˜€์œผ๋‚˜ ์„œ๋ฒ„์— ์ ์šฉ์ด ์•ˆ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค Cloudfront๋Š” AWS์—์„œ ์ œ๊ณตํ•˜๋Š” CDN(C

velog.io

https://kukim.tistory.com/144

 

GitHub Actions๋ฅผ ํ™œ์šฉํ•ด React๋ฅผ S3, CloudFront๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐฐํฌํ•˜๊ธฐ

์ด ๊ธ€์€ AWS์˜ S3, CloudFront๋ฅผ ์‚ฌ์šฉํ•ด ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฐฐํฌํ•œ๋‹ค. ์ด ๊ณผ์ •์„ Github Actions๋ฅผ ํ™œ์šฉํ•ด ์ž๋™ ๋ฐฐํฌ๋ฅผ ์†Œ๊ฐœํ•˜๊ณ ์ž ํ•œ๋‹ค. ์ž˜๋ชป๋œ ๋‚ด์šฉ์ด ์žˆ๋‹ค๋ฉด ํŽธํ•˜๊ฒŒ ๋ง์”€ํ•ด์ฃผ์„ธ์š” ๐Ÿ™๐Ÿป ๋“ค์–ด๊ฐ€๊ธฐ์— ์•ž

kukim.tistory.com

์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)
    ๐Ÿธminzzi
    ๐Ÿธminzzi

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”