Infrastructure/Deployment κ°œλ…

  1. CI / CD (지속적 톡합 / 지속적 배포)
  • CI (Continuous Integration): μ½”λ“œλ₯Ό κΉƒν—ˆλΈŒμ— μ˜¬λ Έμ„ λ•Œ, 봇(GitHub Actions)이 μ•Œμ•„μ„œ μ½”λ“œλ₯Ό λ‹€μš΄λ°›κ³ , μ•„κΉŒ μš°λ¦¬κ°€ μ§  ν…ŒμŠ€νŠΈ μ½”λ“œλ“€μ„ μ „λΆ€ μ‹€ν–‰ν•΄ 보고 이상이 μ—†λŠ”μ§€ κ²€μ‚¬ν•˜λŠ” κ³Όμ •μž…λ‹ˆλ‹€. β€œν•©κ²©!” νŒμ •μ΄ λ‚˜λ©΄ μ½”λ“œλ₯Ό μ‹€ν–‰ κ°€λŠ₯ν•œ 파일(.jar)둜 쑰립(Build)ν•©λ‹ˆλ‹€. (μžλ™ν™”λœ κΉκΉν•œ QA μš”μ› μ—­ν• )
  • CD (Continuous Deployment): 쑰립이 μ™„λ£Œλœ νŒŒμΌμ„ μ‹€μ œ μ„œλΉ„μŠ€κ°€ λŒμ•„κ°€λŠ” μ„œλ²„(EC2 λ“±)둜 μ•ˆμ „ν•˜κ²Œ λ°°λ‹¬ν•˜κ³  μ‹€ν–‰μ‹œν‚€λŠ” κ³Όμ •μž…λ‹ˆλ‹€. (μžλ™ν™”λœ 택배 기사 μ—­ν• )
  1. Docker (도컀)
  • β€œλ‚΄ 컴퓨터에선 잘 λ˜λŠ”λ° μ„œλ²„μ—μ„  μ™œ μ•ˆ λ˜μ§€?” λΌλŠ” 개발자의 μ˜μ›ν•œ λ³€λͺ…을 μ—†μ• μ€€ κ΅¬μ„Έμ£Όμž…λ‹ˆλ‹€.
  • 우리의 Spring Boot μ•±, μžλ°”(JDK), μ„€μ • νŒŒμΌλ“€μ„ ν•˜λ‚˜μ˜ λ„€λͺ¨λ‚œ μ»¨ν…Œμ΄λ„ˆ λ°•μŠ€(이미지)에 포μž₯ν•©λ‹ˆλ‹€. 이 λ°•μŠ€λŠ” Mac이든, Windowsλ“ , AWS λ¦¬λˆ…μŠ€ μ„œλ²„λ“  λ„μ»€λ§Œ κΉ”λ € 있으면 무쑰건 λ˜‘κ°™μ΄ μ‹€ν–‰λ©λ‹ˆλ‹€.
  1. 무쀑단 배포 (Blue/Green)와 Nginx
  • κΈ°μ‘΄ 배포의 문제점: μƒˆ 버전을 λ„μš°λ €λ©΄ κΈ°μ‘΄ μ„œλ²„λ₯Ό 끄고 μΌœμ•Ό ν•©λ‹ˆλ‹€. μ΄λ•Œ μ‚¬μš©μžλŠ” μ•½ 10~30μ΄ˆκ°„ β€œμ„œλ²„ 접속 λΆˆκ°€(μ—λŸ¬)” 화면을 보게 λ©λ‹ˆλ‹€. (λ‹€μš΄νƒ€μž„)
  • Blue/Green ν•΄κ²°μ±…: μ„œλ²„ μ•ˆμ— λ˜‘κ°™μ€ 곡간을 2개 λ§Œλ“­λ‹ˆλ‹€. (νŒŒλž€ λ°©, 초둝 λ°©). ν˜„μž¬ μœ μ €λ“€μ€ β€˜νŒŒλž€ λ°©(Blue)β€˜μ—μ„œ μ„œλΉ„μŠ€λ₯Ό 이용 μ€‘μž…λ‹ˆλ‹€. μš°λ¦¬λŠ” λͺ°λž˜ β€˜μ΄ˆλ‘ λ°©(Green)β€˜μ— μƒˆ λ²„μ „μ˜ μ„œλ²„λ₯Ό λ„μ›Œλ‘‘λ‹ˆλ‹€.
  • Nginx(λ¦¬λ²„μŠ€ ν”„λ‘μ‹œ): μ–˜λŠ” λ¬Έμ§€κΈ°μž…λ‹ˆλ‹€. 초둝 λ°© μ„œλ²„κ°€ μ™„μ „νžˆ μΌœμ Έμ„œ μ€€λΉ„κ°€ λλ‚¬λ‹€λŠ” μ‹ ν˜Έλ₯Ό λ°›μœΌλ©΄, Nginxκ°€ μœ μ €λ“€μ΄ λ“€μ–΄μ˜€λŠ” 문을 νŒŒλž€ λ°©μ—μ„œ 초둝 방으둜 0.1초 λ§Œμ— 딸깍! ν•˜κ³  λ°”κΏ”λ²„λ¦½λ‹ˆλ‹€. μœ μ €λŠ” μ„œλ²„κ°€ μ—…λ°μ΄νŠΈλ˜μ—ˆλŠ”μ§€λ„ λͺ¨λ₯΄κ²Œ μžμ—°μŠ€λŸ½κ²Œ μƒˆ 버전을 μ“°κ²Œ λ©λ‹ˆλ‹€. 이게 무쀑단 λ°°ν¬μž…λ‹ˆλ‹€.