Skip to content

dosilv/ci-cd-sandbox

Repository files navigation

πŸš€ λͺ¨λ…Έλ ˆν¬ ν”„λ‘œμ νŠΈ 배포 CI/CD νŒŒμ΄ν”„λΌμΈ ꡬ좕

μ›Œν¬ν”Œλ‘œμš° κ°œμš”

image

1. μ˜μ‘΄μ„± μ„€μΉ˜ 🌱

ν”„λ‘œμ νŠΈμ˜ μ˜μ‘΄μ„±μ„ μ„€μΉ˜ν•˜κ³ , μΊμ‹±ν•˜μ—¬ 각 ν”„λ‘œμ νŠΈ λΉŒλ“œ μ‹œ μž¬μ‚¬μš© κ°€λŠ₯ν•˜λ„λ‘ μ€€λΉ„ν•©λ‹ˆλ‹€.

2. λΉŒλ“œ πŸ“¦

matrixλ₯Ό μ‚¬μš©ν•˜μ—¬ κ°œλ³„ ν”„λ‘œμ νŠΈλ₯Ό λ³‘λ ¬λ‘œ λΉŒλ“œν•©λ‹ˆλ‹€. μ‹€νŒ¨ μ‹œ μ˜μ‘΄μ„±μ„ μ„€μΉ˜ ν›„ μž¬μ‹œλ„ν•©λ‹ˆλ‹€.

3. 배포 πŸš€

λΉŒλ“œλœ ν”„λ‘œμ νŠΈλ₯Ό 각 S3 버킷에 λ°°ν¬ν•˜κ³ , CloudFront μΊμ‹œλ₯Ό λ¬΄νš¨ν™”ν•΄ 변경사항을 μ¦‰μ‹œ λ°˜μ˜ν•©λ‹ˆλ‹€.

image

μ£Όμš” κ°œλ…

🐱 Github Actions

Githubμ—μ„œ μ œκ³΅ν•˜λŠ” μžλ™ν™” CI/CD μžλ™ν™” ν”Œλž«νΌμœΌλ‘œ, νŠΉμ • 이벀트(push, pull request λ“±)λ‚˜ μ •ν•΄μ§„ 일정에 따라 μžλ™μœΌλ‘œ μž‘μ—…μ„ μ‹€ν–‰

  • μ›Œν¬ν”Œλ‘œμš°(Workflow): YAML 파일둜 μ •μ˜λ˜λ©°, ν•˜λ‚˜ μ΄μƒμ˜ μž‘μ—…(Job)을 포함
  • 이벀트(Event): μ›Œν¬ν”Œλ‘œμš°λ₯Ό νŠΈλ¦¬κ±°ν•˜λŠ” νŠΉμ • ν™œλ™ λ˜λŠ” κ·œμΉ™
  • μž‘μ—…(Job): λ…λ¦½λœ 가상 λ¨Έμ‹ μ΄λ‚˜ μ»¨ν…Œμ΄λ„ˆμ—μ„œ μ‹€ν–‰λ˜λŠ” 일련의 λ‹¨κ³„λ‘œμ„œ, 기본적으둜 λ³‘λ ¬λ‘œ 싀행됨
  • 단계(Step): μž‘μ—…(Job) λ‚΄μ—μ„œ μ‹€ν–‰λ˜λŠ” κ°œλ³„ μž‘μ—…μœΌλ‘œμ„œ, 순차적으둜 싀행됨
  • μ•‘μ…˜(Action): 자주 λ°˜λ³΅λ˜λŠ” μž‘μ—…μ„ μž¬μ‚¬μš© κ°€λŠ₯ν•œ λ‹¨μœ„λ‘œ λ§Œλ“  것
  • λŸ¬λ„ˆ(Runner): μ›Œν¬ν”Œλ‘œμš°κ°€ μ‹€ν–‰λ˜λŠ” μ„œλ²„

πŸ“‚ S3 (Simple Storage Service)

μ›Ήμ‚¬μ΄νŠΈμ˜ 정적 파일(html, css, js, 이미지 λ“±)을 μ €μž₯ν•˜λŠ” 곡간

  • μ—­ν• 
    • μ½”λ“œλ₯Ό Github에 pushν•˜λ©΄, github actions에 μ˜ν•΄ λΉŒλ“œλœ 결과물을 S3에 μ—…λ‘œλ“œ
  • S3 버킷 ν•„μˆ˜ μ„€μ •
    • PublicReadGetObject μ •μ±… μ„€μ •: νŒŒμΌμ„ μ™ΈλΆ€μ—μ„œ 읽을 수 μžˆλ„λ‘ ν—ˆμš©
    • 정적 μ›Ή ν˜ΈμŠ€νŒ… ν™œμ„±ν™”: S3μ—μ„œ 직접 μ›Ήμ‚¬μ΄νŠΈ 제곡 κ°€λŠ₯

πŸš€ CloudFront

S3의 νŒŒμΌμ„ μ „ 세계 μ–΄λ””μ„œλ“  λΉ λ₯΄κ²Œ μ œκ³΅ν•˜λŠ” CDN (Content Delivery Network)

  • μ—­ν• 
    • S3에 배포된 정적 μ›Ήμ‚¬μ΄νŠΈλ₯Ό μΊμ‹±ν•΄λ‘μ—ˆλ‹€κ°€, μ‚¬μš©μžκ°€ μ›Ήμ‚¬μ΄νŠΈμ— μ ‘μ†ν•˜λ©΄ μΊμ‹œλœ μ½˜ν…μΈ λ₯Ό 제곡
    • μ΅œμ‹  λ³€κ²½ 사항이 반영될 수 μžˆλ„λ‘ CloudFront μΊμ‹œ λ¬΄νš¨ν™”(Invalidation) 처리 ν•„μš”
  • CloudFront ν•„μˆ˜ μ„€μ •
    • S3λ₯Ό μ˜€λ¦¬μ§„(Origin)으둜 μ„€μ •

πŸ” IAM

AWS μ„œλΉ„μŠ€λ“€μ΄ μ•ˆμ „ν•˜κ²Œ 톡신할 수 μžˆλ„λ‘ λ¦¬μ†ŒμŠ€μ— λŒ€ν•œ κΆŒν•œμ„ 관리

  • μ—­ν• 
    • CodeBuildκ°€ S3에 νŒŒμΌμ„ μ—…λ‘œλ“œν•˜κ³ , CloudFrontκ°€ S3μ—μ„œ νŒŒμΌμ„ κ°€μ Έμ˜€κ±°λ‚˜ μΊμ‹œ λ¬΄νš¨ν™”λ₯Ό ν•  수 μžˆλ„λ‘ κΆŒν•œ λΆ€μ—¬

μΆ”ν›„ κ°œμ„  사항 πŸ’¬

  • 배포 μ „ ν…ŒμŠ€νŠΈ μžλ™ν™” 단계 μΆ”κ°€
  • paths-filterλ₯Ό μ΄μš©ν•΄ 변경사항이 μžˆλŠ” ν”„λ‘œμ νŠΈλ§Œ λΉŒλ“œ 및 배포
  • 쀑볡 μ½”λ“œ(checkout repository, setup node.js λ“±) λ³„λ„μ˜ μ•‘μ…˜μœΌλ‘œ 뢄리
  • 기타 μ‹€ν–‰ μ‹œκ°„μ„ 단좕할 수 μžˆλŠ” λ°©μ•ˆ λͺ¨μƒ‰

CDN의 μ„±λŠ₯ κ°œμ„  효과 뢄석

🌐 network νƒ­ 비ꡐ

image image
CDN 적용 μ „ CDN 적용 ν›„
ν•­λͺ© CDN 적용 μ „ CDN 적용 ν›„ κ°œμ„ μœ¨
총 μš”μ²­ 수 16 16 -
총 전솑 크기 503KB 203KB 59.6%
κ°€μž₯ 큰 슀크립트 λ‘œλ“œ μ‹œκ°„ 319ms 173ms 46%
νŽ˜μ΄μ§€ λ‘œλ“œ μ™„λ£Œ μ‹œκ°„ 568ms 379ms 33.3%

μ „λ°˜μ μΈ μ½˜ν…μΈ  전솑 크기 κ°μ†Œλ‘œ 슀크립트 및 νŽ˜μ΄μ§€ λ‘œλ“œ μ‹œκ°„μ΄ κ°μ†Œ

🀹 performance νƒ­ 비ꡐ

image image
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μ—μ„œ 차이가 λ°œμƒν•˜λŠ” μ΄μœ λŠ” λ‹€μŒκ³Ό 같이 뢄석

  • 폰트 λ‘œλ”© 속도가 빨라져 μ‹œμŠ€ν…œ ν°νŠΈκ°€ ν‘œμ‹œλ˜λŠ” μ‹œκ°„μ΄ 쀄어 λ ˆμ΄μ•„μ›ƒ λ³€κ²½ μ΅œμ†Œν™”
  • 이미지 λ‘œλ”© 속도 λ˜ν•œ κ°œμ„ λ˜μ–΄ 이미지 크기 λͺ…μ‹œ λΆ€μ‘±μœΌλ‘œ μΈν•œ λ ˆμ΄μ•„μ›ƒ λ³€κ²½ κ°€λŠ₯μ„± κ°μ†Œ

⚑️ lighthouse νƒ­ 비ꡐ

image image
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 적용으둜 인해 μ½˜ν…μΈ  전솑, λ Œλ”λ§ μ„±λŠ₯, λ³΄μ•ˆ λ“± μ—¬λŸ¬ λ°©λ©΄μ—μ„œ κ°œμ„ μ΄ μžˆμ—ˆκ³ , μ΄λŸ¬ν•œ νš¨κ³ΌλŠ” ν˜„μž¬ λ‹¨κ³„μ—μ„œλŠ” λ―Έλ―Έν•  수 μžˆμœΌλ‚˜ μ•±μ˜ μ‚¬μ΄μ¦ˆκ°€ 컀질수둝 λšœλ ·ν•΄μ§ˆ κ²ƒμœΌλ‘œ μ˜ˆμƒλ¨!

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors