νλ‘μ νΈμ μμ‘΄μ±μ μ€μΉνκ³ , μΊμ±νμ¬ κ° νλ‘μ νΈ λΉλ μ μ¬μ¬μ© κ°λ₯νλλ‘ μ€λΉν©λλ€.
matrixλ₯Ό μ¬μ©νμ¬ κ°λ³ νλ‘μ νΈλ₯Ό λ³λ ¬λ‘ λΉλν©λλ€. μ€ν¨ μ μμ‘΄μ±μ μ€μΉ ν μ¬μλν©λλ€.
λΉλλ νλ‘μ νΈλ₯Ό κ° S3 λ²ν·μ λ°°ν¬νκ³ , CloudFront μΊμλ₯Ό 무ν¨νν΄ λ³κ²½μ¬νμ μ¦μ λ°μν©λλ€.
Githubμμ μ 곡νλ μλν CI/CD μλν νλ«νΌμΌλ‘, νΉμ μ΄λ²€νΈ(push, pull request λ±)λ μ ν΄μ§ μΌμ μ λ°λΌ μλμΌλ‘ μμ μ μ€ν
- μν¬νλ‘μ°(Workflow): YAML νμΌλ‘ μ μλλ©°, νλ μ΄μμ μμ (Job)μ ν¬ν¨
- μ΄λ²€νΈ(Event): μν¬νλ‘μ°λ₯Ό νΈλ¦¬κ±°νλ νΉμ νλ λλ κ·μΉ
- μμ (Job): λ 립λ κ°μ λ¨Έμ μ΄λ 컨ν μ΄λμμ μ€νλλ μΌλ ¨μ λ¨κ³λ‘μ, κΈ°λ³Έμ μΌλ‘ λ³λ ¬λ‘ μ€νλ¨
- λ¨κ³(Step): μμ (Job) λ΄μμ μ€νλλ κ°λ³ μμ μΌλ‘μ, μμ°¨μ μΌλ‘ μ€νλ¨
- μ‘μ (Action): μμ£Ό λ°λ³΅λλ μμ μ μ¬μ¬μ© κ°λ₯ν λ¨μλ‘ λ§λ κ²
- λ¬λ(Runner): μν¬νλ‘μ°κ° μ€νλλ μλ²
μΉμ¬μ΄νΈμ μ μ νμΌ(html, css, js, μ΄λ―Έμ§ λ±)μ μ μ₯νλ 곡κ°
- μν
- μ½λλ₯Ό Githubμ pushνλ©΄, github actionsμ μν΄ λΉλλ κ²°κ³Όλ¬Όμ S3μ μ λ‘λ
- S3 λ²ν· νμ μ€μ
- PublicReadGetObject μ μ± μ€μ : νμΌμ μΈλΆμμ μ½μ μ μλλ‘ νμ©
- μ μ μΉ νΈμ€ν νμ±ν: S3μμ μ§μ μΉμ¬μ΄νΈ μ 곡 κ°λ₯
S3μ νμΌμ μ μΈκ³ μ΄λμλ λΉ λ₯΄κ² μ 곡νλ CDN (Content Delivery Network)
- μν
- S3μ λ°°ν¬λ μ μ μΉμ¬μ΄νΈλ₯Ό μΊμ±ν΄λμλ€κ°, μ¬μ©μκ° μΉμ¬μ΄νΈμ μ μνλ©΄ μΊμλ μ½ν μΈ λ₯Ό μ 곡
- μ΅μ λ³κ²½ μ¬νμ΄ λ°μλ μ μλλ‘ CloudFront μΊμ 무ν¨ν(Invalidation) μ²λ¦¬ νμ
- CloudFront νμ μ€μ
- S3λ₯Ό μ€λ¦¬μ§(Origin)μΌλ‘ μ€μ
AWS μλΉμ€λ€μ΄ μμ νκ² ν΅μ ν μ μλλ‘ λ¦¬μμ€μ λν κΆνμ κ΄λ¦¬
- μν
- CodeBuildκ° S3μ νμΌμ μ λ‘λνκ³ , CloudFrontκ° S3μμ νμΌμ κ°μ Έμ€κ±°λ μΊμ 무ν¨νλ₯Ό ν μ μλλ‘ κΆν λΆμ¬
- λ°°ν¬ μ ν μ€νΈ μλν λ¨κ³ μΆκ°
- paths-filterλ₯Ό μ΄μ©ν΄ λ³κ²½μ¬νμ΄ μλ νλ‘μ νΈλ§ λΉλ λ° λ°°ν¬
- μ€λ³΅ μ½λ(checkout repository, setup node.js λ±) λ³λμ μ‘μ μΌλ‘ λΆλ¦¬
- κΈ°ν μ€ν μκ°μ λ¨μΆν μ μλ λ°©μ λͺ¨μ
![]() |
![]() |
|---|---|
| CDN μ μ© μ | CDN μ μ© ν |
| νλͺ© | CDN μ μ© μ | CDN μ μ© ν | κ°μ μ¨ |
|---|---|---|---|
| μ΄ μμ² μ | 16 | 16 | - |
| μ΄ μ μ‘ ν¬κΈ° | 503KB | 203KB | 59.6% |
| κ°μ₯ ν° μ€ν¬λ¦½νΈ λ‘λ μκ° | 319ms | 173ms | 46% |
| νμ΄μ§ λ‘λ μλ£ μκ° | 568ms | 379ms | 33.3% |
μ λ°μ μΈ μ½ν μΈ μ μ‘ ν¬κΈ° κ°μλ‘ μ€ν¬λ¦½νΈ λ° νμ΄μ§ λ‘λ μκ°μ΄ κ°μ
![]() |
![]() |
|---|---|
| CDN μ μ© μ | CDN μ μ© ν |
| νλͺ© | CDN μ μ© μ | CDN μ μ© ν | κ°μ μ¨ |
|---|---|---|---|
| Largest Contentful Paint (LCP) | 0.45s | 0.2s | 55.6% |
| Cumulative Layout Shift (CLS) | 0.63 (poor) | 0 (good) | 100% |
- Largest Contentful Paint (LCP): νμ΄μ§μμ κ°μ₯ ν° μ½ν μΈ μμκ° λ λλ§λλ λ° κ±Έλ¦¬λ μκ°
- Cumulative Layout Shift (CLS): νμ΄μ§ λ‘λ μ€μ λ°μνλ μκΈ°μΉ μμ λ μ΄μμ λ³κ²½μ μ λ LCPκ° κ°μν¨μΌλ‘μ¨ μ¬μ©μκ° νμ΄μ§μ μ£Όμ μ½ν μΈ λ₯Ό ν¨μ¬ λΉ λ₯΄κ² λ³Ό μ μκ² λμκ³ , CLSκ° κ°μν΄ νμ΄μ§ λ‘λ μ€μ λ μ΄μμ λ³κ²½μ΄ λ°μνμ§ μμ μ¬μ©μ κ²½νμ΄ ν₯μλ¨
π‘ CLSμμ μ°¨μ΄κ° λ°μνλ μ΄μ λ λ€μκ³Ό κ°μ΄ λΆμ
- ν°νΈ λ‘λ© μλκ° λΉ¨λΌμ Έ μμ€ν ν°νΈκ° νμλλ μκ°μ΄ μ€μ΄ λ μ΄μμ λ³κ²½ μ΅μν
- μ΄λ―Έμ§ λ‘λ© μλ λν κ°μ λμ΄ μ΄λ―Έμ§ ν¬κΈ° λͺ μ λΆμ‘±μΌλ‘ μΈν λ μ΄μμ λ³κ²½ κ°λ₯μ± κ°μ
![]() |
![]() |
|---|---|
| CDN μ μ© μ | CDN μ μ© ν |
| νλͺ© | CDN μ μ© μ | CDN μ μ© ν | κ°μ μ¨ |
|---|---|---|---|
| Performance | 90 | 100 | 11.1% |
| Accessibility | 100 | 100 | 0% |
| Best Practices | 79 | 100 | 26.6% |
| SEO | 100 | 100 | 0% |
- Performance: μΉ νμ΄μ§μ λ‘λ© μλ λ° μ¬μ©μ μΈν°λμ λ°μ μλλ₯Ό μΈ‘μ νλ©°, LCP λ° CLS κ°μ κ³Ό 리μμ€ μμΆμ΄ μν₯μ λ―Έμ³€μ κ²μΌλ‘ λΆμ
- Accessibility: μΉ νμ΄μ§κ° μ₯μ λ₯Ό κ°μ§ μ¬μ©μλ₯Ό ν¬ν¨ν λͺ¨λ μ¬μ©μκ° μ½κ² μ΄μ©ν μ μλλ‘ μ€κ³λμλμ§ νκ°νλ νλͺ©μΌλ‘, CDN μ μ©μΌλ‘ μΈν λ³ν μμ
- Best Practices: μΉ νμ΄μ§κ° μ΅μ μΉ νμ€ λ° λͺ¨λ² μ¬λ‘λ₯Ό μ€μνλμ§ νκ°νλ©°, CloudFront λ°°ν¬ μμ± μ λ·°μ΄ νλ‘ν μ½ μ μ±
μ
Redirect HTTP to HTTPSλ‘ μ€μ ν¨μΌλ‘μ¨ λ³΄μμ κ°μ μ΄ μμμ - SEO: μΉ νμ΄μ§κ° κ²μ μμ§μ λ μ λ ΈμΆλ μ μλλ‘ μ΅μ νλμλμ§ νκ°νλ©°, νμ¬ νλ‘μ νΈμμ CDN μ μ©μΌλ‘ μΈν λ³ν μμ
CDN μ μ©μΌλ‘ μΈν΄ μ½ν μΈ μ μ‘, λ λλ§ μ±λ₯, 보μ λ± μ¬λ¬ λ°©λ©΄μμ κ°μ μ΄ μμκ³ , μ΄λ¬ν ν¨κ³Όλ νμ¬ λ¨κ³μμλ λ―Έλ―Έν μ μμΌλ μ±μ μ¬μ΄μ¦κ° 컀μ§μλ‘ λλ ·ν΄μ§ κ²μΌλ‘ μμλ¨!





