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
GitHub Actions๋ฅผ ํ์ฉํด React๋ฅผ S3, CloudFront๋ฅผ ์ฌ์ฉํด ๋ฐฐํฌํ๊ธฐ
์ด ๊ธ์ AWS์ S3, CloudFront๋ฅผ ์ฌ์ฉํด ๋ฆฌ์กํธ ํ๋ก์ ํธ๋ฅผ ๋ฐฐํฌํ๋ค. ์ด ๊ณผ์ ์ Github Actions๋ฅผ ํ์ฉํด ์๋ ๋ฐฐํฌ๋ฅผ ์๊ฐํ๊ณ ์ ํ๋ค. ์๋ชป๋ ๋ด์ฉ์ด ์๋ค๋ฉด ํธํ๊ฒ ๋ง์ํด์ฃผ์ธ์ ๐๐ป ๋ค์ด๊ฐ๊ธฐ์ ์
kukim.tistory.com