Skip to content

Commit

Permalink
Merge pull request #539 from Meet-Coder-Study/byungwoo
Browse files Browse the repository at this point in the history
[#528] 무쀑단 λ°°ν¬μ „λž΅μ˜ μ’…λ₯˜
  • Loading branch information
Byung Woo LEE authored Feb 24, 2021
2 parents 267f0a5 + 8aa113d commit 4dd02a8
Show file tree
Hide file tree
Showing 2 changed files with 93 additions and 0 deletions.
93 changes: 93 additions & 0 deletions byungwoo/2021-02-18-deployment-strategy.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
# 무쀑단 λ°°ν¬μ „λž΅μ˜ μ’…λ₯˜

## 무쀑단 배포

λ°°ν¬λž€ "λΉŒλ“œκ°€ μ™„μ„±λœ μ‹€ν–‰ κ°€λŠ₯ν•œ νŒŒμΌμ„ μ‚¬μš©μžκ°€ μ ‘κ·Όν•  수 μžˆλŠ” ν™˜κ²½μ— λ°°μΉ˜μ‹œν‚€λŠ” 일"이닀.

MSA(Microservices Architecture)κ°€ λŠ˜μ–΄λ‚˜λ©΄μ„œ λ‹€μ–‘ν•œ λ°°ν¬μ „λž΅μ΄ μƒκ²¨λ‚˜κ³  있고 심지어 무쀑단 배포가 ν˜„μž¬λŠ” 거의 ν‘œμ€€μœΌλ‘œ 자리작고 μžˆλ‹€.

무쀑단 λ°°ν¬λž€ μ„œλ²„λ₯Ό μ‹€μ œλ‘œ μ„œλΉ„μŠ€ν•  λ•Œ μ„œλΉ„μŠ€μ  μž₯애와 배포에 μžˆμ–΄μ„œ 뢀담감을 μ΅œμ†Œν™”ν•  수 μžˆκ²Œλ” μ„œλΉ„μŠ€κ°€ μ€‘λ‹¨λ˜μ§€ μ•Šκ³ λ„ μ½”λ“œλ₯Ό 배포할 수 μžˆλŠ” κΈ°μˆ μ΄λ‹€.

무쀑단 배포의 λ°˜λŒ€λŠ” 쀑단 배포이닀. 가끔 μ–΄λ–€ μ›Ήμ‚¬μ΄νŠΈμ— μ ‘μ†ν•˜λ©΄ "μž‘μ—…μ€‘μ΄λ‹ˆ μ‚¬μ΄νŠΈ 이용이 λΆˆκ°€ν•˜λ‹€"λŠ” μ•ˆλ‚΄μ°½μ„ λ³Έ 적이 μžˆμ„ 것이닀. μž₯애상황일 μˆ˜λ„ μžˆκ² μ§€λ§Œ 배포의 κ΄€μ μ—μ„œ 보면 ν•΄λ‹Ή μ›Ήμ‚¬μ΄νŠΈμ—λŠ” 쀑단 배포가 μΌμ–΄λ‚œλ‹€κ³  λ³Ό 수 μžˆλ‹€.

κ³Όκ±°μ—λŠ” 배포λ₯Ό ν•˜κΈ° μœ„ν•΄μ„œ λ‹΄λ‹Ήμžλ“€μ΄ μ„œλΉ„μŠ€ μœ μž…μ΄ 적은 μ•Όκ°„μ΄λ‚˜ μƒˆλ²½ μ‹œκ°„ λŒ€μ— μž‘μ—…μ„ ν•˜μ˜€μ§€λ§Œ ν˜„μž¬μ—λŠ” 일반적인 μ—…λ¬΄μ‹œκ°„ 내에 배포와 ν•¨κ»˜ ν•„μš”μ‹œ 둀백을 ν•˜λŠ” λ°©μ‹μœΌλ‘œ λ³€ν•˜κ³  μžˆλ‹€.

μ†Œν”„νŠΈμ›¨μ–΄ λΆ„μ•Όλ₯Ό μ œμ™Έν•˜λ”λΌλ„ 무쀑단 λ°°ν¬λŠ” 우리의 μΌμƒμƒν™œμ— κΉŠμˆ™νžˆ μŠ€λ©°λ“€μ–΄ μžˆλ‹€.

![road-construction.jpg](images/road-construction.jpg)

μœ„μ˜ 사진은 λ„λ‘œκ³΅μ‚¬ ν˜„μž₯이닀. λ„λ‘œκ³΅μ‚¬ ν˜„μž₯μ—μ„œ 일뢀 μ°¨μ„ λ§Œμ„ κ°œλ°©ν•˜κ±°λ‚˜ 우회둜λ₯Ό μ•ˆλ‚΄ν•˜λŠ” 방식은 무쀑단 배포λ₯Ό ν•˜λŠ” 것과 μœ μ‚¬ν•˜λ‹€κ³  λ³Ό 수 μžˆλ‹€.

λ‹€μ‹œ λ§ν•΄μ„œ μ›ν™œν•œ ꡐ톡흐름을 μœ„ν•΄μ„œλŠ” λ„λ‘œμ—λŠ” 항상 μΌμ •ν•œ 톡행이 보μž₯λ˜μ–΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— λΆˆκ°€ν”Όν•œ κ²½μš°κ°€ μ•„λ‹ˆλΌλ©΄ ꡐ톡흐름을 λ°©ν•΄ν•˜μ§€ μ•Šκ³  μ΄λ ‡κ²Œ 일뢀 차선을 κ°œλ°©ν•˜κ±°λ‚˜ 우회둜λ₯Ό μ•ˆλ‚΄ν•˜λŠ” "무쀑단" λ°©μ‹μ˜ μž‘μ—…μ΄ ν•„μš”ν•˜λ‹€. λ”λΆˆμ–΄ 주간에 μž‘μ—…ν•  경우 μž‘μ—…μžλ“€μ΄ 보닀 "μ•ˆμ „ν•œ" ν™˜κ²½μ—μ„œ μ˜ˆμƒμΉ˜ λͺ»ν•œ 상황에 λŒ€μ‘ν•  수 μžˆλ‹€.

## μ„œλ²„ 이쀑화

무쀑단 λ°°ν¬λŠ” λ°˜λ“œμ‹œ "μ„œλ²„ 이쀑화" μƒνƒœμ—μ„œ μˆ˜ν–‰ν•  수 μžˆλ‹€.

μ„œλ²„ μ΄μ€‘ν™”λž€ λ‹€μŒκ³Ό 같이 λ‘œλ“œλ°ΈλŸ°μ„œλ₯Ό μ•žμ— 두고 ν•œ λŒ€ μ΄μƒμ˜ λ™μΌν•œ μ„œλ²„κ°€ νŠΈλž˜ν”½μ„ λΆ„μ‚°ν•˜λŠ” 것을 λ§ν•œλ‹€.
![server-duplicate.png](https://img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2332684E583157AD06)

μ„œλ²„ μ΄μ€‘ν™”λŠ” λ‹€μŒμ˜ 두 가지 큰 λͺ©μ μ„ 가지고 μžˆλ‹€.

첫 λ²ˆμ§ΈλŠ” Failover(μ‹œμŠ€ν…œ λŒ€μ²΄ μž‘λ™)이며 두 λ²ˆμ§ΈλŠ” Load Balance(λΆ€ν•˜κ· λ“±)이닀.

Failoverλž€ ν‰μ†Œ μ‚¬μš©ν•˜λŠ” μ„œλ²„μ™€ λ™μΌν•œ μ„œλ²„λ₯Ό κ΅¬μΆ•ν•˜μ—¬ ν•˜λ‚˜μ˜ μ„œλ²„κ°€ μž₯μ• λ‘œ μ‚¬μš©μ΄ μ–΄λ ΅κ²Œ 될 경우 λŒ€μ²΄ μ„œλ²„λ₯Ό ν™œμš©ν•˜μ—¬ 쀑단없이 μ„œλΉ„μŠ€λ₯Ό 제곡 ν•  수 있게 ν•˜λŠ” 것이닀.

LoadBalanceλž€ λ‘œλ“œλ°ΈλŸ°μ„œλ₯Ό ν†΅ν•΄μ„œ ν•˜λ‚˜μ— μ„œλ²„μ— κ°€ν•΄μ§€λŠ” λΆ€ν•˜λ₯Ό λΆ„μ‚°μ‹œμΌœμ„œ ν•œ μ„œλ²„μ— λ„ˆλ¬΄ λ§Žμ€ λΆ€ν•˜κ°€ κ±Έλ¦¬κ±°λ‚˜ 병λͺ©μ΄ 걸리지 μ•Šλ„λ‘ ν•˜λŠ” 것이닀.

## 무쀑단 λ°°ν¬μ „λž΅μ˜ μ’…λ₯˜
### 둀링 μ—…λ°μ΄νŠΈ(Rolling Update)
![rolling-updates.png](https://t1.daumcdn.net/cfile/tistory/99143F435C87397A09)

둀링 μ—…λ°μ΄νŠΈλž€ ꡬ λ²„μ „μ—μ„œ μ‹  λ²„μ „μœΌλ‘œ ν•˜λ‚˜μ”© μ—…λ°μ΄νŠΈ 방식을 λ§ν•œλ‹€. μ„œλ²„ μ „μ²΄μ˜ 개수λ₯Ό N이라고 ν•  λ•Œ ꡬ 버전과 μ‹  λ²„μ „μ˜ λΉ„μœ¨μ€ N-K:K이며 N:0μ—μ„œ μ‹œμž‘ν•˜μ—¬ 0:N λΉ„μœ¨λ‘œ κ°€λŠ” 것을 λͺ©ν‘œλ‘œ ν•œλ‹€. 배포λ₯Ό μœ„ν•œ 인프라 λ¦¬μ†ŒμŠ€ 확보가 μ–΄λ €μšΈ 경우 μ‚¬μš©ν•˜κΈ°μ— μ ν•©ν•˜λ‹€.

- μž₯점
- 배포λ₯Ό μœ„ν•œ 좔가적인 인프라 λ¦¬μ†ŒμŠ€λ₯Ό μš”κ΅¬ν•˜μ§€ μ•ŠλŠ”λ‹€.
- 단점
- 배포 μ€‘μ—λŠ” μΈμŠ€ν„΄μŠ€ μˆ˜κ°€ κ°μ†Œλ˜λ―€λ‘œ μ„œλ²„ 처리 μš©λŸ‰μ„ κ³ λ €ν•΄μ•Ό ν•œλ‹€.
- ꡬ 버전과 μ‹  버전이 κ³΅μ‘΄ν•˜λŠ” μ‹œκΈ°κ°€ μžˆμœΌλ―€λ‘œ ꡬ 버전을 λͺ¨λ‘ κ³ λ €ν•˜μ—¬ κ°œλ°œν•΄μ•Ό ν•œλ‹€. 예λ₯Ό λ“€μ–΄ λ°μ΄ν„°λ² μ΄μŠ€ μŠ€ν‚€λ§ˆμ— 큰 λ³€ν™”λ₯Ό μ£ΌκΈ° μ–΄λ ΅λ‹€.
- μ„Έμ…˜μ„ μ‚¬μš©ν•  경우 κΈ°μ‘΄ μ„œλ²„μ— μ ‘μ†ν•˜κ³  μžˆλŠ” μ‚¬μš©μžμ˜ μ„Έμ…˜μ— λŒ€ν•œ κ³ λ €κ°€ ν•„μš”ν•˜λ‹€.


### 블루/κ·Έλ¦°(Blue/Green)
![blue-green.png](https://t1.daumcdn.net/cfile/tistory/99A68F4E5C8739470D)

ꡬ 버전과 μ‹  버전을 λ™μ‹œμ— λ°°ν¬ν•œ μƒνƒœμ—μ„œ λ‘œλ“œλ°ΈλŸ°μ„œμ—μ„œ νŠΈλž˜ν”½μ„ "일제히" μ‹  버전을 λ°”λΌλ³΄κ²Œ ν•˜λŠ” 방식이닀.
둀백이 λΉ λ₯΄μ§€λ§Œ μ‹œμŠ€ν…œ μžμ›μ΄ μ΅œμ†Œ 두배 이상 ν•„μš”ν•˜λ‹€.

- μž₯점
- μ‹ κ·œ 버전에 문제 λ°œμƒμ‹œ λΉ λ₯Έ 둀백이 κ°€λŠ₯ν•˜λ‹€.
- 단점
- 인프라 λ¦¬μ†ŒμŠ€κ°€ 2배둜 λ“€μ–΄κ°„λ‹€.
- κΈ°μ‘΄ 운영되고 μžˆλŠ” μ„œλ²„μ—μ„œ Long-term νŠΈλžœμž­μ…˜μ΄ μˆ˜ν–‰μ€‘μ΄μ—ˆλ‹€λ©΄ μ „ν™˜μ‹œ μ–΄λ–€ λ°©μ‹μœΌλ‘œ μ²˜λ¦¬ν•  지 μΆ©λΆ„ν•œ κ³ λ €κ°€ ν•„μš”ν•˜λ‹€.

[λ ˆλ“œ/λΈ”λž™(Red/Black) 배포라고 ν‘œν˜„ν•˜κΈ°λ„ ν•œλ‹€.](https://octopus.com/blog/blue-green-red-black)

### μΉ΄λ‚˜λ¦¬(Canary)
![canary.png](https://t1.daumcdn.net/cfile/tistory/9946A3495B0DDDB12E)

μΉ΄λ‚˜λ¦¬μ•„λΌλŠ” μƒˆμ—μ„œ μœ λž˜ν•œ 배포방식이닀. μ˜›λ‚ μ΄ 광뢀듀이 κ΄‘μ‚°μ—μ„œ μœ λ…κ°€μŠ€κ°€ λ‚˜μ˜€λŠ” 것을 μ•Œμ•„λ‚΄κΈ° μœ„ν•΄ κ°€μŠ€μ— λ―Όκ°ν•œ μΉ΄λ‚˜λ¦¬μ•„λ₯Ό κ΄‘μ‚°μ—μ„œ ν‚€μ› λ‹€κ³  ν•œλ‹€. μΉ΄λ‚˜λ¦¬μ•„κ°€ 죽으면 μœ λ…κ°€μŠ€κ°€ λ‚˜μ˜€λŠ” κ²ƒμœΌλ‘œ νŒλ‹¨ν•˜κ³  쑰치λ₯Ό μ·¨ν–ˆλ‹€κ³  ν•˜λŠ”λ°, 이 κ°œλ…μ„ λ°°ν¬μ „λž΅μ— μ°¨μš©ν•œ 것이 μΉ΄λ‚˜λ¦¬ 배포이닀.

![canary-deployment.png](https://t1.daumcdn.net/cfile/tistory/99E6E74C5C8737EC0E)

μƒˆλ‘œμš΄ 버전이 μš΄μ˜ν™˜κ²½μ— μ ν•©ν•œμ§€ μ‹œν—˜ν•˜λŠ” 배포 μ „λž΅μ΄λ‹€. μΉ΄λ‚˜λ¦¬ 버전에 μΌλΆ€μ˜ νŠΈλž˜ν”½μ„ μ£Όμ–΄μ„œ 검증 후에 νŠΈλž˜ν”½μ„ λŠ˜λ €κ°€λ©΄μ„œ μ‹ κ·œ 버전을 λŠ˜λ €λ‚˜κ°„λ‹€. μΉ΄λ‚˜λ¦¬ λ²„μ „μœΌλ‘œ κ°€λŠ” νŠΈλž˜ν”½μ€ λ‹¨μˆœνžˆ λΉ„μœ¨λΏλ§Œ μ•„λ‹ˆλΌ 랜덀 ν˜Ήμ€ μ‚¬μš©μžμ˜ νŠΉμ • ν”„λ‘œν•„μ„ 기반으둜 λΌμš°νŒ…ν•  수 μžˆλ‹€.

- μž₯점
- λ°°ν¬ν•œ μΉ΄λ‚˜λ¦¬ λ²„μ „μœΌλ‘œ μš©λŸ‰/λΆ€ν•˜μ‚°μ • ν…ŒμŠ€νŠΈ(Load/Capacity Testing)κ³Ό A/B ν…ŒμŠ€νŠΈλ₯Ό 진행할 μˆ˜λ„ μžˆλ‹€.
- μΉ΄λ‚˜λ¦¬ 버전을 ν…ŒμŠ€νŠΈν•˜λŠ” 초기 λ‹¨κ³„μ—μ„œλŠ” 둀백이 μš©μ΄ν•˜λ‹€.
- 단점
- λͺ¨λ‹ˆν„°λ§ν•˜λŠ” μ‹œκ°„μ΄ 쀑간에 ν¬ν•¨λ˜κΈ° λ•Œλ¬Έμ— 배포가 μ§„ν–‰λ˜λŠ” μž‘μ—…μ‹œκ°„μ΄ 길어진닀.


### [μ°Έκ³ ] A/B ν…ŒμŠ€νŠΈ
![ab-testing.png](https://t1.daumcdn.net/cfile/tistory/993F14395A92BE330A)

A/B ν…ŒμŠ€νŠΈλž€ μ„œλ‘œ λ‹€λ₯Έ 두 가지 λ²„μ „μ˜ μœ μš©μ„±, 인기도, μ•ˆμ •μ„± 등을 ν…ŒμŠ€νŠΈν•˜λŠ” 방법둠이닀. μΉ΄λ‚˜λ¦¬ 배포와 μœ μ‚¬ν•˜λ‚˜ λͺ©μ μ΄ μ‚¬μš©μž ν…ŒμŠ€νŠΈμ— 있기 λ•Œλ¬Έμ— λ°°ν¬μ „λž΅μ΄λΌκΈ° λ³΄λ‹€λŠ” ν…ŒμŠ€νŒ… 방법둠이라고 보아야 ν•œλ‹€.

## μ°Έκ³ 
- https://blog.christianposta.com/deploy/blue-green-deployments-a-b-testing-and-canary-releases/
- https://thefif19wlsvy.tistory.com/22
- https://reference-m1.tistory.com/211
- https://jason-lim.tistory.com/3
- https://itwiki.kr/w/%EC%B9%B4%EB%82%98%EB%A6%AC_%EB%B0%B0%ED%8F%AC

Binary file added byungwoo/images/road-construction.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 4dd02a8

Please sign in to comment.