์ƒ์„ธ ์ปจํ…์ธ 

๋ณธ๋ฌธ ์ œ๋ชฉ

Merge Request & Code Review๊ฐ€ ์ค‘์š”ํ•˜๋‹ค : ํ”„๋กœ์ ํŠธ์—์„œ CI/CD ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ• & ์ˆ˜ํ–‰ํ•˜๋ฉด์„œ ๋А๋‚€์ 

๋ณธ๋ฌธ

๊ฐ€์žฅ ์ตœ๊ทผ์— ์ง„ํ–‰ํ•œ ํ™”์ƒ ์Šคํ„ฐ๋”” ํ”Œ๋žซํผ์—์„œ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฌธ์ œ์ ์„ ๊ฒช์—ˆ์ง€๋งŒ, 

๋ฐฐํฌ ๊ด€๋ จ ๊นจ๋‹ฌ์Œ์„ ์ ๊ณ ์ž ํ•œ๋‹ค ^^..

 

DevOps๋ž€?

DevOps๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์„œ๋น„์Šค๋ฅผ ๋น ๋ฅธ ์†๋„๋กœ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋„๋ก ์กฐ์ง์˜ ์—ญ๋Ÿ‰์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๋ฌธํ™” ์ฒ ํ•™, ๋ฐฉ์‹ ๋ฐ ๋„๊ตฌ์˜ ์กฐํ•ฉ์ด๋‹ค.

์š”๊ตฌ์‚ฌํ•ญ์„ ๋น ๋ฅด๊ฒŒ ๋ฐ˜์˜ํ•˜๊ธฐ ์œ„ํ•ด, ์„œ๋น„์Šค ํ’ˆ์งˆ์˜ ์†์‹ค ์œ„ํ—˜์„ ์ตœ์†Œํ™”ํ•˜๋ฉด์„œ ๊ฐœ๋ฐœ์€ ๋น ๋ฅด๊ฒŒ ์ง„ํ–‰ํ•œ๋‹ค.

https://en.wikipedia.org/wiki/DevOps_toolchain

CI/CD๋ž€ ?

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ๋‹จ๊ณ„๋ถ€ํ„ฐ ๋ฐฐํฌ ๋•Œ๊นŒ์ง€ ์ž๋™ํ™”๋ฅผ ํ†ตํ•ด์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋นˆ๋ฒˆํžˆ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

 

- CI(Continuous Integration) : ๊ณ„ํš > ์ฝ”๋“œ > ๋นŒ๋“œ > ํ…Œ์ŠคํŠธ

- CD(Continuous Delivery) : ์ถœ์‹œ > ๋ฐฐํฌ > ์šด์˜

 

๋Š” DevOps๋ฅผ ์œ„ํ•ด ํ•„์ˆ˜์ ์ด๋‹ค.

 

Docker๋ž€?

  • ๊ฐ€์ƒ๋จธ์‹  - ๋…๋ฆฝ์ ์ธ ๊ฐ๊ฐ์˜ Guest OS
  • ๋„์ปค - OS ์œ„์— Docker Run time

https://www.redhat.com/ko/topics/containers/containers-vs-vms

 

 

Jenkins๋ž€ ?

์  ํ‚จ์Šค๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ์‹œ ์ง€์†์  ํ†ตํ•ฉ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ํˆด์ด๋‹ค.

(>> Cloud Registry์— Image PUSH๊นŒ์ง€ ํ–ˆ๋‹ค)

 


Merge Request & Code Review๊ฐ€ ์ค‘์š”ํ•˜๋‹ค 

๊ฒฐ๋ก ์ ์œผ๋กœ๋Š” OAuth ๋กœ๊ทธ์ธ ๋กœ์ง ๊ฐœ๋ฐœ์„ ๋‹ด๋‹นํ–ˆ์—ˆ๋Š”๋ฐ, ํ”„๋ก ํŠธ์—์„œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์„ ๋‚˜๋ˆ„์ง€ ์•Š์•„ ๊ณ ์ƒํ–ˆ๋‹ค.

 

์ง์ ‘์ ์ธ ์›์ธ

ํ”„๋ก ํŠธ ํŒ€์›์ด ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ๋‚˜๋ˆ  ์ž๋™ ์ ์šฉ์‹œํ‚ค์ง€ ์•Š๊ณ , ๊ฐœ๋ฐœํ™˜๊ฒฝ์—์„œ ์“ฐ๋Š” Redirect_URL๋กœ ๊ฐ’์„ ์ง์ ‘ ๋ฐ”๊ฟ”๊ฐ€๋ฉฐ ์ž‘์—…์„ ํ–ˆ๋‹ค. ๋ง‰๋ฐ”์ง€ ๊ธฐ๊ฐ„์ด์—ˆ๊ณ , ๋จธ์ง€ ๋ฆฌํ€˜์ŠคํŠธ ํ›„ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ์›์น™์„ ์ง€ํ‚ค์ง€ ์•Š๊ณ , ๋ณธ์ธ์ด ํ’€ ๋ฆฌํ€˜ ๋‚ ๋ฆฌ๊ณ  ๋ฆฌ๋ทฐ์—†์ด ๋จธ์ง€๋ฅผ ์ง„ํ–‰ํ–ˆ๋‹ค. ์ด๋•Œ, ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ์“ฐ๋Š” ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ URL์ด ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์— ์ ์šฉ๋˜์—ˆ๋‹ค.

 

์˜ค๋ฅ˜๋ฅผ ์ฐพ๋Š”๋ฐ ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ๊ณ , ์ž ์žฌ์ ์ธ ์›์ธ & ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฐ ์ด์œ ๋ฅผ ๋‹ค์‹œ ํ•œ๋ฒˆ ๋ถ„์„ํ•ด๋ณด์•˜๋‹ค.

 

1. ์šฐ๋ฆฌ ์‹œ์Šคํ…œ์€ Web Hook์œผ๋กœ deploy ๋ธŒ๋žœ์น˜์— Merge Event๊ฐ€ ๋“ค์–ด์˜ค๋ฉด, Jenkins๊ฐ€ ๊ฐ์ง€ํ•ด์„œ ๋นŒ๋“œ > ํ…Œ์ŠคํŠธ ๋ฅผ ์ง„ํ–‰ํ•˜๊ณ ,

.Container Registery๋กœ Push ํ•˜์—ฌ ๋ฐฐํฌ๊นŒ์ง€ ์ž๋™์œผ๋กœ ์ง„ํ–‰๋˜๋„๋ก ํ•˜์˜€๋‹ค.

์ฝ”๋“œ๊ฐ€ Merge๊ฐ€ ๋˜๋ฉด, ์ž˜๋ชป๋œ ๋ฐฐํฌ๊ฐ€ ๋˜๋Š” ๊ฒƒ์„ ๋ง‰์„ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์•ˆ์ด ์—†์—ˆ๋‹ค. ์ฆ‰, ๋ฐฐํฌ ์ง์ „์— ํ•œ ๋ฒˆ ๋ฉˆ์ถฐ์„œ ์ ๊ฒ€ํ–ˆ์–ด์•ผ ํ–ˆ๋‹ค.

 

2. ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์ „์—ญ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ์ง€ ์•Š์•˜๋‹ค. ์ฝ”๋“œ์— ์ž‘์„ฑํ•ด์„œ ์—ฌ๋Ÿฌ ๊ตฐ๋ฐ ๋ถ„์‚ฐ๋œ ๊ฐ’๋“ค์„ ์ฐพ๊ณ  ์ง์ ‘ ๋ฐ”๊พธ๋А๋žด ์˜ค๋ž˜ ๊ฑธ๋ ธ๋‹ค.

 

3. ๋ฐฐํฌ๊ฐ€ ์ž˜๋˜์—ˆ๋Š”์ง€ ์ˆ˜๋™์œผ๋กœ ํ™•์ธํ–ˆ์–ด์•ผ ํ–ˆ๋‹ค. ์ด๋ฏธ์ง€๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ, ํ˜น์‹œ ?, ์ปจํ…Œ์ด๋„ˆ ์ž‘๋™ํ•˜๊ณ  ์žˆ๋Š” ๊ฑฐ ๋งž์ง€?? ๋ผ๋Š” ๋งˆ์Œ์œผ๋กœ ์ง์ ‘ Docker ๋ช…๋ น์–ด๋ฅผ EC2 ์„œ๋ฒ„์— ์ž‘์„ฑํ•ด๊ฐ€๋ฉด์„œ ํ™•์ธํ–ˆ๋‹ค. ( ๋‚ด๊ฐ€ ์ง์ ‘ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ํ™•์ธํ•˜๋Š” Polling ๋ฐฉ์‹์ด ์•„๋‹ˆ๊ณ  Event ๊ธฐ๋ฐ˜ ์•Œ๋ฆผ์ด ํ•„์š”ํ–ˆ๋‹ค. )

์ฆ‰, ์˜ฌ๋ฐ”๋ฅธ ๋ฒ„์ „์ด ์ž˜ ๋ฐฐํฌ๋˜์—ˆ๋Š”์ง€ ์•Œ๋ ค์ฃผ๋Š” ๋ชจ๋‹ˆํ„ฐ๋ง ํˆด์ด ํ•„์š”ํ–ˆ๋‹ค.

 

4. ์ค‘๋‹จ ๋ฐฐํฌ๋กœ ์ธํ•ด ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ฃฝ์€ ๊ฒƒ์ธ์ง€ ์ž ์‹œ ๋ฐฐํฌ๋กœ ์ธํ•ด ์„œ๋น„์Šค๊ฐ€ ์•ˆ๋˜๋Š” ๊ฒƒ์ธ์ง€ ๋ถˆ์•ˆํ–ˆ๋‹ค 

>> ์‹ค ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ ์ž…์žฅ์—์„œ๋Š” ์ค‘๋‹จ ๋ฐฐํฌํ•˜๋ฉด ๊ทธ ์‹œ๊ฐ„ ๋™์•ˆ์€ ์„œ๋น„์Šค ์•ˆ๋˜๋Š” ๊ฑฐ์ž„

์•„! ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ ์ „๋žต์„ ์‚ฌ์šฉํ•ด์•ผ๊ฒ ๋‹ค.

 

์ด๋กœ ์ธํ•ด

1. Merge Request + Code Review์˜ ์ค‘์š”์„ฑ

2. CI/CD์—์„œ ์ž๋™ Deploy๋Š” ํ•˜์ง€ ๋ง์ž

3. ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ๋‚˜๋ˆ„์ž

4. ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ’์€ ๋ณ€์ˆ˜๋กœ ๋นผ์„œ ์ •์˜ํ•˜์ž

5. ๋ชจ๋‹ˆํ„ฐ๋ง ํˆด์ด ํ•„์š”ํ•œ ์ด์œ 

6. ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ ์ „๋žต์„ ์‚ฌ์šฉํ•˜์ž!

๋ฅผ ๊นจ๋‹ซ๊ฒŒ ๋˜์—ˆ๋‹ค.

 

์ž๋™ Deploy ๋Š” ์œ„ํ—˜ํ•˜๋‹ค / ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง / ๋ชจ๋‹ˆํ„ฐ๋ง ํˆด์ด ํ•„์š”ํ•˜๋‹ค / ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ์ „๋žต์„ ์‚ฌ์šฉํ•˜์ž!


์ฟ ๋ฒ„๋„คํ‹ฐ์Šค

์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜(๊ด€๋ฆฌ ๋ฐ ๋ฐฐํฌ) ํ”Œ๋žซํผ์œผ๋กœ, ๋ถ„์‚ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‰ฝ๊ฒŒ ๋ฐฐํฌ, ์Šค์ผ€์ผ๋ง ๋ฐ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ์ด๋‹ค.

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ฃผ์š” ํŠน์ง•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

1. ์„ ์–ธ์  ๊ตฌ์„ฑ & ์ž๋™ํ™”๋œ ์Šค์ผ€์ผ๋ง

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” YAML ๋˜๋Š”  JSON ํŒŒ์ผ์„ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๋ฆฌ์†Œ์Šค์˜ ๊ตฌ์„ฑ์„ ์„ ์–ธ์ ์œผ๋กœ ์ •์˜ํ•œ๋‹ค.

์›ํ•˜๋Š” ์ƒํƒœ๋ฅผ ๋ช…์‹œํ•˜๋ฉด, ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๊ฐ€ ์‹œ์Šคํ…œ์„ ํ•ด๋‹น ์ƒํƒœ๋กœ ์กฐ์ •ํ•œ๋‹ค.

 

๋…ธ๋“œ๋‚˜ ์ปจํ…Œ์ด๋„ˆ์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด, ์ž๋™์œผ๋กœ ์žฅ์• ๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ๋ณต๊ตฌ๋ฅผ ์‹œ๋„ํ•œ๋‹ค.

 

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ๋Š” ์—ฌ๋Ÿฌ ๋…ธ๋“œ๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, ํ•„์š”์— ๋”ฐ๋ผ ํด๋Ÿฌ์Šคํ„ฐ ํฌ๊ธฐ๋ฅผ ํ™•์žฅํ•˜๊ฑฐ๋‚˜ ์ถ•์†Œํ•  ์ˆ˜ ์žˆ๋‹ค.

2. ์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ ๋ฐ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ ์„ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋น„์Šค๋ผ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค.

์„œ๋น„์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉด DNS์ด๋ฆ„์„ ํ†ตํ•ด ํƒ์ƒ‰ํ•˜๊ณ , ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์ด ์ž๋™์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.

 

๋ฌด์ค‘๋‹จ ๋ฐฐํฌ 

1. Blue/ Green

๊ตฌ ๋ฒ„์ „(Blue)๊ณผ ์ƒˆ๋กœ์šด ๋ฒ„์ „(Green) 2๊ฐ€์ง€๋ฅผ ์„œ๋ฒ„์— ๋งˆ๋ จํ•˜๊ณ  ํ•œ๊บผ๋ฒˆ์— ๊ต์ฒดํ•˜๋Š” ๋ฐฉ๋ฒ•

๋ฐฐํฌ์‹œ 2๋ฐฐ์˜ ์ž์›์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

2. ์นด๋‚˜๋ฆฌ์•„

์ผ๋ถ€ ํŠธ๋ž˜ํ”ฝ์„ ์ƒˆ๋ฒ„์ „์œผ๋กœ ๋ถ„์‚ฐ์‹œ์ผœ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•

A/B ํ…Œ์ŠคํŠธ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค

 

3. Rolling Update

100% capacity๊ฐ€ ์œ ์ง€๊ฐ€ ๋˜์–ด์•ผ ํ•œ๋‹ค => 3 ์ œ์™ธ

๊ธฐ์กด ๋ฒ„์ „์˜ ์„œ๋ฒ„๋ฅผ ํ•˜๋‚˜์”ฉ ์ฃฝ์ด๊ณ  ์ƒˆ๋กœ์šด ๋ฒ„์ „์˜ ์„œ๋ฒ„๋ฅผ ํ•˜๋‚˜์”ฉ ๋„์šฐ๋ฉด์„œ ์ˆœ์ฐจ์ ์œผ๋กœ ๊ต์ฒดํ•˜๋Š” ๋ฐฉ๋ฒ•

์„œ๋ฒ„๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜์”ฉ ๋ฒ„์ „์„ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๋ฐฉ์‹

์ด์ „ ๋ฒ„์ „๊ณผ ์ƒˆ๋กœ์šด ๋ฒ„์ „์ด ๊ณต์กดํ•˜๋Š” ์‹œ๊ฐ„์ด ์กด์žฌํ•œ๋‹ค.


๋‹ค์Œ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์‚ฌ์šฉํ•ด์„œ 

์ด์ „์˜ ๋ฌธ์ œ์ ๋“ค์„ ํ•ด๊ฒฐํ•ด๋ด์•ผ๊ฒ ๋‹ค


์Šค๋…ธ์šฐ๋ณผ ๊ตด๋ฆฌ๊ธฐ (์ธ์ƒ๊นŠ์–ด์„œ)

์ƒํ™ฉ์ด ์—ฌ์˜์น˜ ์•Š๋‹ค >> ๋ฐฉ๋ฒ•์„ ๋ฐ”๊พธ์ž >> ํ•˜๋ฃจ๋„ ๋น ๋œจ๋ฆฌ์ง€ ์•Š๊ณ  ์กฐ๊ธˆ์”ฉ ํ•™์Šตํ•˜๋ฉด ๋‚˜์ค‘์—๋Š” ๊ทธ ์–‘์ด ์–ด๋งˆ์–ด๋งˆํ•  ๊ฒƒ์ด๋‹ค.

728x90

๊ด€๋ จ๊ธ€ ๋”๋ณด๊ธฐ