πŸš€ [μΆ”μ²œ] μΏ λ²„λ„€ν‹°μŠ€ 배포 μ „λž΅ 6κ°€μ§€ 총정리: λ©΄μ ‘λΆ€ν„° μ‹€λ¬΄κΉŒμ§€!

데브옡슀(DevOps)λ‚˜ SRE 면접을 μ€€λΉ„ μ€‘μ΄μ‹œκ±°λ‚˜ μ‹€λ¬΄μ—μ„œ 무쀑단 배포λ₯Ό κ³ λ―Ό 쀑이라면 ν•œλ²ˆ ν™•μΈν•΄λ³΄μ„Έμš”. λ‹¨μˆœνžˆ μ»¨ν…Œμ΄λ„ˆλ₯Ό κ΅μ²΄ν•˜λŠ” κ²ƒλ§Œμ΄ μ•„λ‹Œ, μ„œλΉ„μŠ€ 쀑단 없이 μ•ˆμ •μ μœΌλ‘œ μ—…λ°μ΄νŠΈλ₯Ό λ°°ν¬ν•˜λŠ” 핡심 μ „λž΅ 6κ°€μ§€λ₯Ό μ†Œκ°œκΈ€μ„ κ³΅μœ ν•©λ‹ˆλ‹€.

1. μΉ΄λ‚˜λ¦¬μ•„ 배포 (Canary Deployment): β€œλŒλ‹€λ¦¬λ„ 두듀겨 보고 κ±΄λ„ˆκΈ°β€


핡심 κ°œλ… μƒˆλ‘œμš΄ 버전(V2)을 전체 μ‚¬μš©μžμ—κ²Œ ν•œ λ²ˆμ— μ μš©ν•˜λŠ” λŒ€μ‹ , κ·Ήμ†Œμˆ˜μ˜ μ‚¬μš©μžμ—κ²Œλ§Œ λ¨Όμ € λ…ΈμΆœν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€. λŒ€λ‹€μˆ˜μ˜ μ‚¬μš©μžλŠ” μ—¬μ „νžˆ μ•ˆμ •μ μΈ κΈ°μ‘΄ 버전(V1)을 μ‚¬μš©ν•˜κ²Œ 되죠. μ†Œμˆ˜ κ·Έλ£Ήμ—μ„œ λ¬Έμ œκ°€ μ—†λ‹€λŠ” 것이 ν™•μΈλ˜λ©΄, 점차 μƒˆλ‘œμš΄ λ²„μ „μ˜ μ‚¬μš© 비쀑을 늘렀 λ‚˜κ°‘λ‹ˆλ‹€.

μ–Έμ œ μ‚¬μš©ν•˜λ‚˜μš”?

  • μ‹€ν—˜μ  κΈ°λŠ₯ λ„μž…: μƒˆλ‘œμš΄ κΈ°λŠ₯이 μ‚¬μš©μžλ“€μ—κ²Œ μ–΄λ–»κ²Œ λ°›μ•„λ“€μ—¬μ§ˆμ§€ 확신이 없을 λ•Œ.
  • 핡심 인프라 λ³€κ²½: μ‹œμŠ€ν…œμ˜ λΌˆλŒ€λ₯Ό κ±΄λ“œλ¦¬λŠ” μ€‘μš”ν•œ μž‘μ—…μ΄λΌ 리슀크λ₯Ό μ΅œμ†Œν™”ν•˜κ³  싢을 λ•Œ.
  • μ•ˆμ „ν•œ 검증: μ‹€μ œ 운영 ν™˜κ²½(Production)μ—μ„œ ν…ŒμŠ€νŠΈλŠ” ν•„μš”ν•˜μ§€λ§Œ, λŒ€κ·œλͺ¨ μž₯μ• λŠ” ν”Όν•˜κ³  싢을 λ•Œ μ ν•©ν•©λ‹ˆλ‹€.

μž₯점

  • 리슀크 ν†΅μ œ: 치λͺ…적인 버그가 μžˆμ–΄λ„ μ†Œμˆ˜μ˜ μ‚¬μš©μžλ§Œ κ²ͺ게 λ˜λ―€λ‘œ 전체 μ„œλΉ„μŠ€ λ§ˆλΉ„μ™€ 같은 λŒ€ν˜• 사고λ₯Ό 막을 수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ‹€μ „ ν…ŒμŠ€νŠΈ: μ‹€μ œ νŠΈλž˜ν”½μ„ 기반으둜 ν•œ A/B ν…ŒμŠ€νŠΈκ°€ κ°€λŠ₯ν•©λ‹ˆλ‹€.
  • 데이터 기반 μ˜μ‚¬κ²°μ •: 좔츑이 μ•„λ‹Œ μ‹€μ œ μ§€ν‘œ(Metrics)λ₯Ό 보고 배포 ν™•λŒ€λ₯Ό κ²°μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

단점

  • 높은 기술 μš”κ΅¬μ‚¬ν•­: νŠΈλž˜ν”½μ„ μ •κ΅ν•˜κ²Œ μ œμ–΄ν•˜κ³  μ‹œμŠ€ν…œ μƒνƒœλ₯Ό μ‹€μ‹œκ°„μœΌλ‘œ κ°μ‹œν•  수 μžˆλŠ” β€˜κ΄€μΈ‘ κ°€λŠ₯μ„±(Observability)’ 도ꡬ가 ν•„μˆ˜μ μž…λ‹ˆλ‹€.
  • 관리 λ³΅μž‘μ„±: 두 κ°€μ§€ 버전을 λ™μ‹œμ— μš΄μ˜ν•˜λ©° νŠΈλž˜ν”½μ„ μ‘°μ ˆν•΄μ•Ό ν•˜λ―€λ‘œ 관리 λ‚œμ΄λ„κ°€ 쑰금 더 λ†’μŠ΅λ‹ˆλ‹€.

:light_bulb: λ©΄μ ‘ μ‹€μ „ μ‹œλ‚˜λ¦¬μ˜€

Q: μƒν’ˆ μΆ”μ²œ λ‘œμ§μ— μƒˆλ‘œμš΄ λ¨Έμ‹ λŸ¬λ‹ λͺ¨λΈμ„ λ„μž…ν•˜λ €κ³  ν•©λ‹ˆλ‹€. 전체 μ‚¬μš©μžμ—κ²Œ 영ν–₯을 μ£Όμ§€ μ•ŠμœΌλ©΄μ„œ, μ‹€μ œ 운영 ν™˜κ²½μ—μ„œμ˜ μ„±λŠ₯을 κ²€μ¦ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€. μ–΄λ–€ 배포 μ „λž΅μ„ μ„ νƒν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ?

A: μ €λŠ” **β€˜μΉ΄λ‚˜λ¦¬μ•„ 배포 μ „λž΅β€™**을 μ„ νƒν•˜κ² μŠ΅λ‹ˆλ‹€. μ΄μœ λŠ” 리슀크 관리와 데이터 검증 λ•Œλ¬Έμž…λ‹ˆλ‹€. 전체 νŠΈλž˜ν”½μ˜ μ•„μ£Ό μΌλΆ€λ§Œ μƒˆλ‘œμš΄ λͺ¨λΈλ‘œ ν˜λ €λ³΄λ‚΄μ„œ 정확도, 응닡 속도(Latency), μ‚¬μš©μž λ°˜μ‘ 등을 λ¨Όμ € λͺ¨λ‹ˆν„°λ§ν•˜κ² μŠ΅λ‹ˆλ‹€. 이 μ§€ν‘œλ“€μ΄ 긍정적이라면 μ μ§„μ μœΌλ‘œ 배포λ₯Ό 늘리고, λ§Œμ•½ λ¬Έμ œκ°€ λ°œκ²¬λœλ‹€λ©΄ λŒ€λ‹€μˆ˜μ˜ μ‚¬μš©μžμ—κ²Œ 영ν–₯이 κ°€κΈ° 전에 μ¦‰μ‹œ λ‘€λ°±ν•˜μ—¬ μ•ˆμ •μ„±μ„ 확보할 수 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

2. 블루-κ·Έλ¦° 배포 (Blue-Green Deployment): β€œλ‹¨ ν•œ 번의 μ™„λ²½ν•œ μŠ€μœ„μΉ­β€

핡심 κ°œλ… ν˜„μž¬ 운영 쀑인 μ•ˆμ •μ μΈ 버전(Blue) μ˜†μ—, μƒˆλ‘œμš΄ 버전(Green)을 μœ„ν•œ 독립적인 ν™˜κ²½μ„ ν•˜λ‚˜ 더 κ΅¬μΆ•ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€. μƒˆλ‘œμš΄ Green ν™˜κ²½μ—μ„œ μΆ©λΆ„νžˆ ν…ŒμŠ€νŠΈλ₯Ό 마친 λ’€, μ€€λΉ„κ°€ μ™„λ£Œλ˜λ©΄ **νŠΈλž˜ν”½μ„ ν•œ λ²ˆμ— μ‹ λ²„μ „μœΌλ‘œ μ „ν™˜(Switching)**ν•΄ λ²„λ¦½λ‹ˆλ‹€.

μ–Έμ œ μ‚¬μš©ν•˜λ‚˜μš”?

  • 무쀑단 배포 ν•„μˆ˜: μ„œλΉ„μŠ€ 쀑단 μ‹œκ°„μ΄ 단 1μ΄ˆλ„ ν—ˆμš©λ˜μ§€ μ•ŠλŠ” μ€‘μš”ν•œ μ—…λ°μ΄νŠΈμΌ λ•Œ.
  • ν™•μ‹€ν•œ μ•ˆμ „μž₯치: 배포 직후 λ¬Έμ œκ°€ 생겼을 λ•Œ, κ³ λ―Όν•  μ‹œκ°„ 없이 μ¦‰μ‹œ 이전 μƒνƒœλ‘œ λ˜λŒλ €μ•Ό ν•  λ•Œ.

μž₯점

  • λ‹€μš΄νƒ€μž„ 제둜 (Zero Downtime): νŠΈλž˜ν”½ λ°©ν–₯만 λ°”κΎΈκΈ° λ•Œλ¬Έμ— μ‚¬μš©μžλŠ” μ„œλΉ„μŠ€ 쀑단을 μ „ν˜€ λŠλΌμ§€ λͺ»ν•©λ‹ˆλ‹€.
  • μ΄ˆκ³ μ† λ‘€λ°±: 신버전(Green)에 λ¬Έμ œκ°€ 생기면, νŠΈλž˜ν”½μ„ λ‹€μ‹œ ꡬ버전(Blue)으둜 돌리기만 ν•˜λ©΄ λ©λ‹ˆλ‹€. κ°€μž₯ λΉ λ₯΄κ³  κΉ”λ”ν•œ 볡ꡬ λ°©λ²•μž…λ‹ˆλ‹€.
  • ν™˜κ²½ 격리: 두 버전이 μ™„μ „νžˆ λΆ„λ¦¬λ˜μ–΄ μžˆμ–΄, 배포 과정이 κΈ°μ‘΄ μ„œλΉ„μŠ€μ— 영ν–₯을 μ£Όμ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

단점

  • λΉ„μš© λΆ€λ‹΄: 두 개의 ν™˜κ²½(Blue & Green)을 λ™μ‹œμ— λ„μ›Œμ•Ό ν•˜λ―€λ‘œ, 배포 μˆœκ°„μ—λŠ” 인프라 λ¦¬μ†ŒμŠ€μ™€ λΉ„μš©μ΄ μΌμ‹œμ μœΌλ‘œ 2λ°°κ°€ λ“­λ‹ˆλ‹€.
  • λ¦¬μ†ŒμŠ€ 확보 ν•„μš”: μ—¬μœ  μžμ›μ΄ μΆ©λΆ„ν•˜μ§€ μ•Šμ€ ν™˜κ²½μ—μ„œλŠ” μ‚¬μš©ν•˜κΈ° μ–΄λ ΅μŠ΅λ‹ˆλ‹€.

:light_bulb: λ©΄μ ‘ μ‹€μ „ μ‹œλ‚˜λ¦¬μ˜€

Q: 우리 νšŒμ‚¬κ°€ νŠΉμ • μ‹œκ°„μ— 맞좰 λŒ€κ·œλͺ¨ κΈ°λŠ₯ μ—…λ°μ΄νŠΈλ₯Ό λŸ°μΉ­ν•˜λ €κ³  ν•©λ‹ˆλ‹€. μ΄λ•Œ μ„œλΉ„μŠ€ 쀑단(Downtime)은 μ ˆλŒ€ ν—ˆμš©λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ–΄λ–»κ²Œ 배포λ₯Ό μ§„ν–‰ν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ?

A: μ €λŠ” **β€˜λΈ”λ£¨-κ·Έλ¦° 배포 μ „λž΅β€™**을 ν™œμš©ν•˜κ² μŠ΅λ‹ˆλ‹€. λ¨Όμ € ν˜„μž¬ μ„œλΉ„μŠ€ 쀑인 ν™˜κ²½κ³Ό λ³‘λ ¬λ‘œ μƒˆλ‘œμš΄ 버전을 λ°°ν¬ν•˜κ³ , 사전에 μΆ©λΆ„ν•œ ν…ŒμŠ€νŠΈλ₯Ό μ§„ν–‰ν•©λ‹ˆλ‹€. 그리고 μ•½μ†λœ 런칭 μ‹œκ°„μ΄ 되면 λ‘œλ“œλ°ΈλŸ°μ„œμ˜ νŠΈλž˜ν”½μ„ μ‹ κ·œ ν™˜κ²½μœΌλ‘œ ν•œ λ²ˆμ— μ „ν™˜ν•˜κ² μŠ΅λ‹ˆλ‹€. 이 방식은 μ„œλΉ„μŠ€ 쀑단을 없앨 뿐만 μ•„λ‹ˆλΌ, λ§Œμ•½ μ˜ˆμƒμΉ˜ λͺ»ν•œ μ΄μŠˆκ°€ λ°œμƒν•˜λ”λΌλ„ μ¦‰μ‹œ κΈ°μ‘΄ ν™˜κ²½μœΌλ‘œ νŠΈλž˜ν”½μ„ μ›λ³΅ν•˜μ—¬ μž₯μ• λ₯Ό μ΅œμ†Œν™”ν•  수 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

3. A/B ν…ŒμŠ€νŠΈ (A/B Testing): β€œλ°μ΄ν„°κ°€ λ§ν•΄μ£ΌλŠ” 정닡”


핡심 κ°œλ… μ‚¬μš©μžμ˜ νŠΉμ • 속성(User ID, 접속 μ§€μ—­, κΈ°κΈ° μ’…λ₯˜ λ“±)에 따라 νŠΈλž˜ν”½μ„ μ •κ΅ν•˜κ²Œ λ‚˜λˆ„μ–΄ μ„œλ‘œ λ‹€λ₯Έ 버전(V1 vs V2)으둜 μ—°κ²°ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€. λ‹¨μˆœνžˆ μƒˆ 버전을 λ°°ν¬ν•˜λŠ” 것을 λ„˜μ–΄, μ–΄λ–€ 버전이 더 λ‚˜μ€ μ„±κ³Όλ₯Ό λ‚΄λŠ”μ§€ 비ꡐ 뢄석 ν•˜λŠ” 데 주된 λͺ©μ μ΄ μžˆμŠ΅λ‹ˆλ‹€.

μ–Έμ œ μ‚¬μš©ν•˜λ‚˜μš”?

  • μ‚¬μš©μž λ°˜μ‘ 검증: μƒˆλ‘œμš΄ κΈ°λŠ₯μ΄λ‚˜ UI λ³€κ²½ 사항을 μ‹€μ œ μ‚¬μš©μžμ—κ²Œ λ…ΈμΆœμ‹œμΌœ λ°˜μ‘μ„ 보고 싢을 λ•Œ.
  • 데이터 비ꡐ: "이게 더 쒋을 것 같은데?"λΌλŠ” μΆ”μΈ‘ λŒ€μ‹ , μ‹€μ œ μ‚¬μš© 데이터λ₯Ό μˆ˜μ§‘ν•˜μ—¬ κ°κ΄€μ μœΌλ‘œ λΉ„κ΅ν•˜κ³  싢을 λ•Œ.

μž₯점

  • ν™•μ‹€ν•œ μ œν’ˆ 검증: μ‹€μ œ 운영 데이터λ₯Ό 기반으둜 μ˜μ‚¬κ²°μ •μ„ 내릴 수 μžˆμ–΄ μ‹€νŒ¨ ν™•λ₯ μ„ μ€„μž…λ‹ˆλ‹€.
  • UI/UX μ΅œμ ν™”: λ””μžμΈ λ³€κ²½μ΄λ‚˜ κΈ°λŠ₯의 νš¨μœ¨μ„±μ„ ν…ŒμŠ€νŠΈν•˜λŠ” 데 κ°€μž₯ νƒμ›”ν•œ μ „λž΅μž…λ‹ˆλ‹€.

단점

  • λ³΅μž‘ν•œ μ„€μ •: νŠΈλž˜ν”½μ„ μ†μ„±λ³„λ‘œ λ‚˜λˆ„λŠ” λΌμš°νŒ… 섀정이 κΉŒλ‹€λ‘­μŠ΅λ‹ˆλ‹€.
  • 뢄석 ν™˜κ²½ ν•„μš”: μˆ˜μ§‘λœ 데이터λ₯Ό λΆ„μ„ν•˜κ³  μ‹œκ°ν™”ν•  λ³„λ„μ˜ 인프라가 ν•„μš”ν•©λ‹ˆλ‹€.
  • λ°±μ—”λ“œ ν•œκ³„: μ‚¬μš©μž λˆˆμ— 보이지 μ•ŠλŠ” λ°±μ—”λ“œ 둜직 λ³€κ²½μ—λŠ” 큰 효과λ₯Ό 보기 μ–΄λ ΅μŠ΅λ‹ˆλ‹€.

:light_bulb: λ©΄μ ‘ μ‹€μ „ μ‹œλ‚˜λ¦¬μ˜€

Q: λ””μžμΈ νŒ€μ—μ„œ 두 κ°€μ§€ λ²„μ „μ˜ μ‹ κ·œ κ°€μž…(Onboarding) 화면을 μ œμ•ˆν–ˆμŠ΅λ‹ˆλ‹€. 이 쀑 μ–΄λ–€ λ ˆμ΄μ•„μ›ƒμ΄ μ‚¬μš©μž λ¦¬ν…μ…˜(재방문율)을 더 λ†’μ—¬μ£ΌλŠ”μ§€ ν™•μΈν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€. μ–΄λ–€ 배포 μ „λž΅μ„ μ‚¬μš©ν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ?

A: 이 κ²½μš°μ—λŠ” **β€˜A/B ν…ŒμŠ€νŠΈβ€™**κ°€ κ°€μž₯ μ ν•©ν•©λ‹ˆλ‹€. νŠΈλž˜ν”½μ„ 두 κ°€μ§€ λ ˆμ΄μ•„μ›ƒμœΌλ‘œ λΆ„μ‚°μ‹œμΌœ μ‚¬μš©μž λ¦¬ν…μ…˜μ΄λ‚˜ κ°€μž… μ™„λ£Œμœ¨ 같은 핡심 μ§€ν‘œλ₯Ό 직접 비ꡐ λͺ¨λ‹ˆν„°λ§ν•  수 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€. 데이터 뢄석 κ²°κ³Όλ₯Ό ν† λŒ€λ‘œ, 더 높은 μ„±κ³Όλ₯Ό κΈ°λ‘ν•œ 버전을 μ΅œμ’… 승자둜 μ„ νƒν•˜μ—¬ 전체 ν”„λ‘œλ•μ…˜μ— μ μš©ν•˜κ² μŠ΅λ‹ˆλ‹€.

4. 둀링 μ—…λ°μ΄νŠΈ (Rolling Update): β€œλ¬Ό 흐λ₯΄λ“― μžμ—°μŠ€λŸ¬μš΄ μ„ΈλŒ€κ΅μ²΄β€

핡심 κ°œλ… μΏ λ²„λ„€ν‹°μŠ€(Kubernetes)κ°€ μ±„νƒν•˜κ³  μžˆλŠ” κ°€μž₯ ν‘œμ€€μ μΈ 배포 λ°©μ‹μž…λ‹ˆλ‹€. κΈ°μ‘΄ λ²„μ „μ˜ νŒŒλ“œ(Pod)λ₯Ό ν•œ λ²ˆμ— λͺ¨λ‘ μ‚­μ œν•˜λŠ” 것이 μ•„λ‹ˆλΌ, μ •ν•΄μ§„ λΉ„μœ¨λ§ŒνΌ ν•˜λ‚˜μ”©(ν˜Ήμ€ 그룹으둜) 순차적으둜 κ΅μ²΄ν•˜λŠ” μ „λž΅μž…λ‹ˆλ‹€. 이 κ³Όμ •μ—μ„œ ꡬ버전과 신버전이 μž μ‹œ κ³΅μ‘΄ν•˜λ©° μ„œλΉ„μŠ€μ˜ 연속성을 μœ μ§€ν•©λ‹ˆλ‹€.

μ–Έμ œ μ‚¬μš©ν•˜λ‚˜μš”?

  • 일반적인 운영 ν™˜κ²½: λ³΅μž‘ν•œ νŠΈλž˜ν”½ μ œμ–΄κΉŒμ§€λŠ” ν•„μš” μ—†μ§€λ§Œ, μ„œλΉ„μŠ€ 쀑단(Downtime) 없이 μ•ˆμ „ν•˜κ²Œ μ—…λ°μ΄νŠΈν•΄μ•Ό ν•˜λŠ” λŒ€λΆ€λΆ„μ˜ 상황에 μ ν•©ν•©λ‹ˆλ‹€.

μž₯점

  • 무쀑단 μ„œλΉ„μŠ€: νŒŒλ“œκ°€ ν•˜λ‚˜μ”© κ΅μ²΄λ˜λ―€λ‘œ μ‚¬μš©μžλŠ” μ„œλΉ„μŠ€ λŠκΉ€μ„ μ „ν˜€ λŠλΌμ§€ λͺ»ν•©λ‹ˆλ‹€.
  • λ¦¬μ†ŒμŠ€ νš¨μœ¨μ„±: 블루-κ·Έλ¦° 배포처럼 인프라λ₯Ό 두 배둜 λ„μšΈ ν•„μš”κ°€ μ—†μ–΄ κ²½μ œμ μž…λ‹ˆλ‹€.
  • κ°„νŽΈν•œ 볡ꡬ: μΏ λ²„λ„€ν‹°μŠ€μ˜ κΈ°λ³Έ 배포 기둝(History)을 μ΄μš©ν•΄ μ†μ‰½κ²Œ 이전 λ²„μ „μœΌλ‘œ λ‘€λ°±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

단점

  • 느린 배포 속도: ν•˜λ‚˜μ”© κ΅μ²΄ν•˜λ‹€ λ³΄λ‹ˆ 배포가 μ™„μ „νžˆ 끝날 λ•ŒκΉŒμ§€ μ‹œκ°„μ΄ λ‹€μ†Œ κ±Έλ¦½λ‹ˆλ‹€.
  • ν˜Έν™˜μ„± ν•„μˆ˜: 배포 λ„μ€‘μ—λŠ” ꡬ버전과 신버전이 λ™μ‹œμ— μ‹€ν–‰λ˜λ―€λ‘œ, μ• ν”Œλ¦¬μΌ€μ΄μ…˜ κ°„(ν˜Ήμ€ DB와) ν•˜μœ„ ν˜Έν™˜μ„±μ΄ 보μž₯λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.
  • λ°μ΄ν„°λ² μ΄μŠ€ 주의: DB μŠ€ν‚€λ§ˆ 변경이 ν¬ν•¨λœ 경우, ν˜Έν™˜μ„± 처리λ₯Ό μ œλŒ€λ‘œ ν•˜μ§€ μ•ŠμœΌλ©΄ μ—λŸ¬κ°€ λ°œμƒν•  μœ„ν—˜μ΄ μžˆμŠ΅λ‹ˆλ‹€.

:light_bulb: λ©΄μ ‘ μ‹€μ „ μ‹œλ‚˜λ¦¬μ˜€

Q: 운영 쀑인 결제 λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€λ₯Ό μ—…λ°μ΄νŠΈν•΄μ•Ό ν•©λ‹ˆλ‹€. μ„œλΉ„μŠ€ 쀑단은 μ ˆλŒ€ ν—ˆμš©λ˜μ§€ μ•ŠμœΌλ©°, 좔가적인 인프라 λ¦¬μ†ŒμŠ€λ₯Ό 많이 μ‚¬μš©ν•  μˆ˜λ„ μ—†λŠ” μƒν™©μž…λ‹ˆλ‹€. μ–΄λ–€ μ „λž΅μ„ μΆ”μ²œν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ?

A: μ €λŠ” **β€˜λ‘€λ§ μ—…λ°μ΄νŠΈ(Rolling Update)’**λ₯Ό μ‚¬μš©ν•˜κ² μŠ΅λ‹ˆλ‹€. 블루-κ·Έλ¦° λ°°ν¬λŠ” λ¦¬μ†ŒμŠ€λ₯Ό 두 배둜 써야 ν•˜μ§€λ§Œ, 둀링 μ—…λ°μ΄νŠΈλŠ” μ΅œμ†Œν•œμ˜ μ—¬μœ  μžμ›λ§ŒμœΌλ‘œλ„ 무쀑단 배포가 κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. ꡬ버전 νŒŒλ“œλ₯Ό 일정 λΉ„μœ¨ μœ μ§€ν•œ μƒνƒœμ—μ„œ 신버전을 ν•˜λ‚˜μ”© νˆ¬μž…ν•˜λ―€λ‘œ μ„œλΉ„μŠ€ κ°€μš©μ„±μ„ 계속 μœ μ§€ν•  수 있고, λ§Œμ•½ λ¬Έμ œκ°€ 생기면 배포λ₯Ό μΌμ‹œ μ •μ§€ν•˜κ±°λ‚˜ μ¦‰μ‹œ λ‘€λ°±ν•˜μ—¬ λŒ€μ‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

5. μž¬μƒμ„± 배포 (Recreate Deployment): β€œμ‹Ή μ§€μš°κ³  λ‹€μ‹œ μ‹œμž‘β€


핡심 κ°œλ… 이름 κ·ΈλŒ€λ‘œ **β€˜κΈ°μ‘΄ 버전을 μ™„μ „νžˆ μ‚­μ œν•œ λ’€, μƒˆλ‘œμš΄ 버전을 생성’**ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€. μƒˆ νŒŒλ“œ(Pod)λ₯Ό λ„μš°κΈ° 전에 ꡬ버전 νŒŒλ“œ(Pod)λ₯Ό μ „λΆ€ μ’…λ£Œμ‹œν‚€κΈ° λ•Œλ¬Έμ—, ꡐ체가 μΌμ–΄λ‚˜λŠ” λ™μ•ˆμ—λŠ” **μ„œλΉ„μŠ€κ°€ μž μ‹œ 쀑단(Downtime)**λ©λ‹ˆλ‹€.

μ–Έμ œ μ‚¬μš©ν•˜λ‚˜μš”?

  • λΉ„-핡심 ν™˜κ²½: 개발 μ„œλ²„λ‚˜ ν…ŒμŠ€νŠΈ ν™˜κ²½μ²˜λŸΌ 잠깐 μ„œλΉ„μŠ€κ°€ λ©ˆμΆ°λ„ μ•„λ¬΄λŸ° λ¬Έμ œκ°€ μ—†λŠ” κ³³.
  • 점검 μ‹œκ°„ ν—ˆμš©: β€œμ‹œμŠ€ν…œ 점검 쀑” 곡지λ₯Ό λ„μš°κ³  μ„œλΉ„μŠ€λ₯Ό μž μ‹œ 내렀도 λ˜λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜.

μž₯점

  • λ‹¨μˆœν•¨κ³Ό 속도: λ³΅μž‘ν•œ νŠΈλž˜ν”½ μ œμ–΄λ‚˜ λ‘€μ˜€λ²„ 과정이 μ—†μ–΄ 섀정이 맀우 κ°„λ‹¨ν•˜κ³  배포 속도가 λΉ λ¦…λ‹ˆλ‹€.
  • μ΅œμ†Œ λ¦¬μ†ŒμŠ€: ꡬ버전을 μ§€μš°κ³  λ‚˜μ„œ 신버전을 올리기 λ•Œλ¬Έμ—, 좔가적인 인프라 μžμ›μ΄ μ „ν˜€ λ“€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

단점

  • μ„œλΉ„μŠ€ 쀑단: ꡬ버전이 κΊΌμ§€κ³  신버전이 μΌœμ§€λŠ” 사이, ν•„μ—°μ μœΌλ‘œ λ‹€μš΄νƒ€μž„μ΄ λ°œμƒν•©λ‹ˆλ‹€.
  • μƒμš© μ„œλΉ„μŠ€ 뢀적합: 24μ‹œκ°„ λ¬΄μ€‘λ‹¨μœΌλ‘œ λŒμ•„κ°€μ•Ό ν•˜λŠ” μ‹€μ œ 고객 λŒ€μƒ μ„œλΉ„μŠ€(Production)μ—λŠ” μ ν•©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

:light_bulb: λ©΄μ ‘ μ‹€μ „ μ‹œλ‚˜λ¦¬μ˜€

Q: 사내 νŒ€μ›λ“€λ§Œ μ‚¬μš©ν•˜λŠ” λ‚΄λΆ€ λŒ€μ‹œλ³΄λ“œλ₯Ό 운영 μ€‘μž…λ‹ˆλ‹€. 업무가 λλ‚œ μ•Όκ°„ μ‹œκ°„λŒ€μ— μ—…λ°μ΄νŠΈν•  μ˜ˆμ •μ΄λ©°, μ΄λ•Œ 잠깐 접속이 μ•ˆ λ˜μ–΄λ„ 업무에 μ§€μž₯은 μ—†μŠ΅λ‹ˆλ‹€. κ°€μž₯ 효율적인 배포 방식은 λ¬΄μ—‡μΌκΉŒμš”?

A: 이런 상황이라면 **β€˜μž¬μƒμ„±(Recreate) μ „λž΅β€™**이 κ°€μž₯ ν•©λ¦¬μ μž…λ‹ˆλ‹€. μ‚¬μš©μžκ°€ μ—†λŠ” μ‹œκ°„λŒ€λΌ λ‹€μš΄νƒ€μž„μ΄ ν—ˆμš©λ˜λ―€λ‘œ, ꡳ이 λ³΅μž‘ν•œ 무쀑단 배포 μ „λž΅μ„ μ“Έ ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€. κ΅¬ν˜„μ΄ κ°€μž₯ λ‹¨μˆœν•΄μ„œ κ΄€λ¦¬ν•˜κΈ° νŽΈν•˜κ³ , μΆ”κ°€ λ¦¬μ†ŒμŠ€λ„ μ „ν˜€ λ“€μ§€ μ•Šμ•„ λΉ„μš© νš¨μœ¨μ„±μ΄ κ°€μž₯ 높은 방식이기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

6. μ„€λ„μš° 배포 (Shadow Deployment): β€œκ³ κ° λͺ°λž˜ μˆ˜ν–‰ν•˜λŠ” μ™„λ²½ν•œ λ¦¬ν—ˆμ„€β€


핡심 κ°œλ… μ‹€μ œ μ‚¬μš©μž νŠΈλž˜ν”½μ„ **볡제(Mirroring)**ν•˜μ—¬ ν˜„μž¬ 버전(V1)κ³Ό μƒˆλ‘œμš΄ 버전(V2) λͺ¨λ‘μ—κ²Œ μ „μ†‘ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€. μ—¬κΈ°μ„œ 핡심은 μ‚¬μš©μžλŠ” 였직 ꡬ버전(V1)의 μ‘λ‹΅λ§Œ λ°›λŠ”λ‹€λŠ” μ μž…λ‹ˆλ‹€. 신버전(V2)은 λ°±κ·ΈλΌμš΄λ“œμ—μ„œ λ˜‘κ°™μ€ μš”μ²­μ„ λ°›μ•„ μ²˜λ¦¬ν•˜μ§€λ§Œ, κ·Έ 응닡은 μ‚¬μš©μžμ—κ²Œ μ „λ‹¬λ˜μ§€ μ•Šκ³  λ²„λ €μ§‘λ‹ˆλ‹€. 즉, **β€œμ‚¬μš©μž λͺ¨λ₯΄κ²Œ μ‹€μ œ λΆ€ν•˜λ₯Ό ν…ŒμŠ€νŠΈβ€**ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

μ–Έμ œ μ‚¬μš©ν•˜λ‚˜μš”?

  • λŒ€κ·œλͺ¨ μ•„ν‚€ν…μ²˜ 개편: λͺ¨λ†€λ¦¬μ‹ μ‹œμŠ€ν…œμ„ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€(MSA)둜 μ „ν™˜ν•˜λŠ” κ²ƒμ²˜λŸΌ ꡬ쑰가 μ™„μ „νžˆ λ°”λ€” λ•Œ.
  • μ„±λŠ₯ 검증: "κ³Όμ—° 이 μ‹œμŠ€ν…œμ΄ μ‹€μ œ 운영 νŠΈλž˜ν”½μ„ κ²¬λ”œ 수 μžˆμ„κΉŒ?"에 λŒ€ν•œ 확신이 ν•„μš”ν•  λ•Œ.
  • 리슀크 제둜 ν…ŒμŠ€νŠΈ: μ‹€μ „κ³Ό λ˜‘κ°™μ€ ν™˜κ²½μ—μ„œ ν…ŒμŠ€νŠΈν•˜κ³  μ‹Άμ§€λ§Œ, μ‚¬μš©μžμ—κ²ŒλŠ” 0.1%의 영ν–₯도 μ£ΌκΈ° 싫을 λ•Œ.

μž₯점

  • 리얼 μ›”λ“œ ν…ŒμŠ€νŠΈ: κ°€μ§œ 데이터가 μ•„λ‹Œ **β€˜μ‹€μ œ νŠΈλž˜ν”½β€™**으둜 ν…ŒμŠ€νŠΈν•˜λ―€λ‘œ μ„±λŠ₯ 검증 κ²°κ³Όκ°€ 맀우 μ •ν™•ν•©λ‹ˆλ‹€.
  • μ‘°κΈ° 문제 발견: 정식 μ˜€ν”ˆ 전에 병λͺ© ν˜„μƒμ΄λ‚˜ 였λ₯˜λ₯Ό 미리 μ°Ύμ•„λ‚Ό 수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ‚¬μš©μž 영ν–₯ μ—†μŒ: ν…ŒμŠ€νŠΈ 쀑 μ‹œμŠ€ν…œμ΄ 뻗더라도 μ‹€μ œ μ‚¬μš©μžλŠ” μ „ν˜€ μ•Œμ§€ λͺ»ν•©λ‹ˆλ‹€.

단점

  • λΉ„μš©κ³Ό λ¦¬μ†ŒμŠ€: νŠΈλž˜ν”½μ„ 두 κ΅°λ°μ„œ μ²˜λ¦¬ν•΄μ•Ό ν•˜λ―€λ‘œ 인프라 λΉ„μš©κ³Ό λ¦¬μ†ŒμŠ€ μ‚¬μš©λŸ‰μ΄ λ†’μŠ΅λ‹ˆλ‹€.
  • κ΅¬μ„±μ˜ λ³΅μž‘ν•¨: νŠΈλž˜ν”½μ„ λ³΅μ œν•˜κ³  λΌμš°νŒ…ν•˜λŠ” 섀정이 κΉŒλ‹€λ‘œμš΄ νŽΈμž…λ‹ˆλ‹€.
  • μ‚¬μš©μž λ°˜μ‘ 확인 λΆˆκ°€: 응닡을 μ‚¬μš©μžμ—κ²Œ 보여주지 μ•ŠκΈ° λ•Œλ¬Έμ—, UI λ²„κ·Έλ‚˜ μ‹€μ œ μ‚¬μš©μž κ²½ν—˜(UX)은 ν…ŒμŠ€νŠΈν•  수 μ—†μŠ΅λ‹ˆλ‹€.

:light_bulb: λ©΄μ ‘ μ‹€μ „ μ‹œλ‚˜λ¦¬μ˜€

Q: 우리 νŒ€μ΄ κΈ°μ‘΄ λ ˆκ±°μ‹œ λͺ¨λ†€λ¦¬μ‹ μ‹œμŠ€ν…œμ„ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜(MSA)둜 μ™„μ „νžˆ μž¬κ΅¬μΆ•ν–ˆμŠ΅λ‹ˆλ‹€. μ‹œμŠ€ν…œμ„ μ™„μ „νžˆ κ΅μ²΄ν•˜κΈ° 전에, 이 μƒˆλ‘œμš΄ μ•„ν‚€ν…μ²˜κ°€ μ‹€μ œ 운영 νŠΈλž˜ν”½μ„ 감당할 수 μžˆμ„μ§€ μ–΄λ–»κ²Œ κ²€μ¦ν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ?

A: 이런 μ€‘μš”ν•œ μ „ν™˜ μ‹œμ μ—λŠ” β€˜μ„€λ„μš° 배포(Shadow Deployment)’ μ „λž΅μ΄ κ°€μž₯ μ•ˆμ „ν•©λ‹ˆλ‹€. μ‹€μ œ λ“€μ–΄μ˜€λŠ” νŠΈλž˜ν”½μ„ 볡제(Mirroring)ν•˜μ—¬ μ‹ κ·œ μ‹œμŠ€ν…œμ—λ„ λ˜‘κ°™μ΄ ν˜λ €λ³΄λ‚΄κ² μŠ΅λ‹ˆλ‹€. 이λ₯Ό 톡해 μ‚¬μš©μžμ—κ²ŒλŠ” μ•„λ¬΄λŸ° 영ν–₯을 μ£Όμ§€ μ•ŠμœΌλ©΄μ„œ, μ‹€μ œ 운영 ν™˜κ²½κ³Ό λ™μΌν•œ λΆ€ν•˜ μ‘°κ±΄μ—μ„œ μ‹œμŠ€ν…œμ˜ μ„±λŠ₯, 둜그, μ—λŸ¬μœ¨ 등을 λͺ¨λ‹ˆν„°λ§ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이 'λ¦¬ν—ˆμ„€β€™μ„ 톡해 μ•ˆμ •μ„±μ΄ 100% κ²€μ¦λœ ν›„μ—λ§Œ μ •μ‹μœΌλ‘œ νŠΈλž˜ν”½μ„ μ „ν™˜(Cut-over)ν•˜κ² μŠ΅λ‹ˆλ‹€.

[좜처] Kubernetes Deployment Strategies Explained

4 Likes