๐Ÿ’ป Development/๊ธฐ๋ก

CI/CD & ํŒŒ์ดํ”„๋ผ์ธ

ahyeon7 2023. 3. 9. 17:37

๐Ÿ“Œ CI/CD

CI/CD๋Š” ์•ฝ์–ด๋กœ, ๋ช‡ ๊ฐ€์ง€์˜ ๋‹ค๋ฅธ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. CI/CD์˜ "CI"๋Š” ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ์ž๋™ํ™” ํ”„๋กœ์„ธ์Šค์ธ ์ง€์†์ ์ธ ํ†ตํ•ฉ(Continuous Integration)์„ ์˜๋ฏธํ•œ๋‹ค. CI๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ๊ตฌํ˜„ํ•  ๊ฒฝ์šฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ •๊ธฐ์ ์œผ๋กœ ๋นŒ๋“œ ๋ฐ ํ…Œ์ŠคํŠธ๋˜์–ด ๊ณต์œ  ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ํ†ตํ•ฉ๋˜๋ฏ€๋กœ ์—ฌ๋Ÿฌ ๋ช…์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋™์‹œ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ๊ณผ ๊ด€๋ จ๋œ ์ฝ”๋“œ ์ž‘์—…์„ ํ•  ๊ฒฝ์šฐ ์„œ๋กœ ์ถฉ๋Œํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

CI/CD์˜ "CD"๋Š” ์ง€์†์ ์ธ ์„œ๋น„์Šค ์ œ๊ณต(Continuous Delivery) ๋ฐ ์ง€์†์ ์ธ ๋ฐฐํฌ(Continuous Deployment)๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ ์ด ๋‘ ์šฉ์–ด๋Š” ์ƒํ˜ธ ๊ตํ™˜์ ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค. ๋‘ ๊ฐ€์ง€ ์˜๋ฏธ ๋ชจ๋‘ ํŒŒ์ดํ”„๋ผ์ธ์˜ ์ถ”๊ฐ€ ๋‹จ๊ณ„์— ๋Œ€ํ•œ ์ž๋™ํ™”๋ฅผ ๋œปํ•˜์ง€๋งŒ ๋•Œ๋กœ๋Š” ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์ž๋™ํ™”๊ฐ€ ์ด๋ฃจ์–ด์ง€๊ณ  ์žˆ๋Š”์ง€๋ฅผ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด ๋ณ„๋„๋กœ ์‚ฌ์šฉ๋˜๊ธฐ๋„ ํ•œ๋‹ค.


๐Ÿ“Œ CI/CD์˜ ๋‹จ๊ณ„

[๊ทธ๋ฆผ] ์ผ๋ฐ˜์ ์ธ ์•ฑ์˜ ๊ฐœ๋ฐœ ๋ฐ ์œ ์ง€๋ณด์ˆ˜ ๋‹จ๊ณ„

โœจ ์ง€์†์  ํ†ตํ•ฉ(Continuous Integration, CI)

๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ์ž๋™ํ™” ํ”„๋กœ์„ธ์Šค๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, Code - Build - Test ๋‹จ๊ณ„์—์„œ ๊พ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • Code : ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฝ”๋“œ๋ฅผ ์›๊ฒฉ ์ฝ”๋“œ ์ €์žฅ์†Œ (Ex. github repository)์— pushํ•˜๋Š” ๋‹จ๊ณ„
  • Build : ์›๊ฒฉ ์ฝ”๋“œ ์ €์žฅ์†Œ๋กœ๋ถ€ํ„ฐ ์ฝ”๋“œ๋ฅผ ๊ฐ€์ ธ์™€ ์œ ๋‹› ํ…Œ์ŠคํŠธ ํ›„ ๋นŒ๋“œํ•˜๋Š” ๋‹จ๊ณ„
  • Test : ์ฝ”๋“œ ๋นŒ๋“œ์˜ ๊ฒฐ๊ณผ๋ฌผ์ด ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ์™€ ์ž˜ ํ†ตํ•ฉ๋˜๋Š” ์ง€ ํ™•์ธํ•˜๋Š” ๊ณผ์ •

์ด ๊ณผ์ •์—์„œ ๊ฐœ๋ฐœ์ž๋Š” ์ฝ”๋“œ๋ฅผ ์žฆ๊ฒŒ ์›๊ฒฉ ์ฝ”๋“œ ์ €์žฅ์†Œ์— pushํ•˜๊ณ , ํ…Œ์ŠคํŠธ ๋ฐ ๋นŒ๋“œ๋ฅผ ํ•˜๋ฉฐ ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฅผ ํ†ตํ•ด ๋นŒ๋“œ๊ฐ€ ์„ฑ๊ณตํ–ˆ๋Š”์ง€ ์‹คํŒจํ–ˆ๋Š”์ง€ ํ™•์ธ์„ ํ•˜๊ณ , ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ ํ†ตํ•ด ๊ฐœ์„  ๋ฐฉ์•ˆ์„ ์ฐพ๋Š”๋‹ค. ์ด ์ง€์†์ ์ธ ํ†ตํ•ฉ ๊ณผ์ •์„ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋Š” ๋ฒ„๊ทธ๋ฅผ ์ผ์ฐ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ๊ณ , ํ…Œ์ŠคํŠธ๊ฐ€ ์™„๋ฃŒ๋œ ์ฝ”๋“œ์— ๋Œ€ํ•ด ๋น ๋ฅธ ์ „๋‹ฌ์ด ๊ฐ€๋Šฅํ•ด์ง€๋ฉฐ ์ง€์†์ ์ธ ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

์ง€์†์  ํ†ตํ•ฉ์€ ๋ชจ๋“  ์ฝ”๋“œ ๋ณ€ํ™”๋ฅผ ํ•˜๋‚˜์˜ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค. ๋ชจ๋“  ๊ฐœ๋ฐœํŒ€์ด ์ฝ”๋“œ์˜ ๋ณ€ํ™”๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ํˆฌ๋ช…ํ•˜๊ฒŒ ๋ฌธ์ œ์ ์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์žฆ์€ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ(pull request)์™€ ๋จธ์ง€(merge)๋กœ ์ฝ”๋“œ๋ฅผ ์ž์ฃผ ํ†ตํ•ฉํ•œ๋‹ค. ์ด ๋•Œ, ๊ธฐ๋ณธ์ ์ธ ํ…Œ์ŠคํŠธ๋„ ์ž‘๋™์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์ง€์†์  ํ†ตํ•ฉ์„ ํ†ตํ•ด ๊ฐœ๋ฐœํŒ€์€ ๊ฐ์ž ๊ฐœ๋ฐœํ•œ ์ฝ”๋“œ๋ฅผ ์ด๋ฅธ ์‹œ์ ์— ์ž์ฃผ ํ•ฉ์น˜๊ณ  ์ž์ฃผ ํ…Œ์ŠคํŠธ ํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์ง€์†์  ํ†ตํ•ฉ์œผ๋กœ ๋ณด์•ˆ ์ด์Šˆ, ์—๋Ÿฌ ๋“ฑ์„ ์‰ฝ๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์–ด ํ•ด๋‹น ์ด์Šˆ๋ฅผ ๋น ๋ฅด๊ฒŒ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด์ „์—๋Š” ๊ฐ์ž ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ํ•ฉ์น˜๊ณ  ๋‚œ ํ›„, ๋ชจ๋‘ ๋ชจ์—ฌ์„œ ๋นŒ๋“œ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  ๋‚˜์„œ์•ผ ๋ฌธ์ œ์ ์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์ง€์†์  ํ†ตํ•ฉ์ด ์ ์šฉ๋œ ๊ฐœ๋ฐœํŒ€์€ ์ฝ”๋“œ๋ฅผ ๋จธ์ง€ํ•˜๊ธฐ ์ „, ์ด๋ฏธ ๋นŒ๋“œ ์˜ค๋ฅ˜๋‚˜ ํ…Œ์ŠคํŠธ ์˜ค๋ฅ˜๋ฅผ ํ™•์ธํ•˜์—ฌ ํ›จ์”ฌ ๋” ํšจ์œจ์ ์ธ ๊ฐœ๋ฐœ์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

โœจ ์ง€์†์  ๋ฐฐํฌ(Continuous Delivery/Deployment, CD)

์ง€์†์ ์ธ ์„œ๋น„์Šค ์ œ๊ณต(Continuous Delivery) ๋ฐ ์ง€์†์ ์ธ ๋ฐฐํฌ(Continuous Deployment)๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ ์ด ๋‘ ์šฉ์–ด๋Š” ์ƒํ˜ธ ๊ตํ™˜์ ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค. ์ด ๋ถ€๋ถ„์€ Release - Deploy - Operate ๋‹จ๊ณ„์—์„œ ๊พ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • Release : ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์†Œํ”„ํŠธ์›จ์–ด ํŒจํ‚ค์ง€๋ฅผ ์ž‘์„ฑ
  • Deploy : ํ”„๋กœ๋น„์ €๋‹์„ ์‹คํ–‰ํ•˜๊ณ  ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋…ธ์ถœ, ์‹ค์งˆ์ ์ธ ๋ฐฐํฌ ๋ถ€๋ถ„
  • Operate : ์„œ๋น„์Šค ํ˜„ํ™ฉ์„ ํŒŒ์•…ํ•˜๊ณ  ์ƒ๊ธธ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋ฅผ ๊ฐ์ง€

์ง€์†์  ๋ฐฐํฌ์˜ ๊ฒฝ์šฐ, ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์˜ ๋ณ‘ํ•ฉ๋ถ€ํ„ฐ ํ”„๋กœ๋•์…˜์— ์ ํ•ฉํ•œ ๋นŒ๋“œ ์ œ๊ณต์— ์ด๋ฅด๋Š” ๋ชจ๋“  ๋‹จ๊ณ„๋กœ, ํ…Œ์ŠคํŠธ ์ž๋™ํ™”์™€ ์ฝ”๋“œ ๋ฐฐํฌ ์ž๋™ํ™”๊ฐ€ ํฌํ•จ๋œ๋‹ค.

์ด ํ”„๋กœ์„ธ์Šค๋ฅผ ์™„๋ฃŒํ•˜๋ฉด ํ”„๋กœ๋•์…˜ ์ค€๋น„๊ฐ€ ์™„๋ฃŒ๋œ ๋นŒ๋“œ๋ฅผ ์ฝ”๋“œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ์ž๋™์œผ๋กœ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์šด์˜ํŒ€์ด ๋ณด๋‹ค ๋น ๋ฅด๊ณ  ์†์‰ฝ๊ฒŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ”„๋กœ๋•์…˜์œผ๋กœ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

์ตœ๊ทผ์—๋Š” ํด๋ผ์šฐ๋“œ ๊ธฐ์ˆ  ๋ฐœ์ „๊ณผ ๋งž๋ฌผ๋ ค ์ง€์†์  ํ†ตํ•ฉ๊ณผ ์ง€์†์  ๋ฐฐํฌ๊ฐ€ ๋น ๋ฅธ ์†๋„๋กœ ์ง„ํ–‰๋˜๋ฉด์„œ CI/CD๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด์„œ ๋‹ค๋ฃจ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ ์ฐจ ์ฆ๊ฐ€ํ•˜๊ณ  ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ด์ „์—๋Š” ๋ฐฐํฌ ์ž์ฒด๊ฐ€ ์ƒ๋‹นํžˆ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ณ  ํž˜๋“  ์ผ์ด์–ด์„œ ๋ฐฐํฌ ์ด์ „ ๋‹จ๊ณ„์—์„œ ๋งŽ์€ ๊ณ ๋ฏผ์„ ํ•˜๊ณค ํ–ˆ๋‹ค. ์„œ๋ฒ„๋ฅผ ์ „๋ถ€ ์žฌ์‹œ์ž‘ํ•ด์•ผ ํ•œ๋‹ค๊ฑฐ๋‚˜, ์ผ๋ถ€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๋„ ๋งŽ์•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์š”์ฆ˜์€ ๊ณ ๊ฐ์˜ ํ”ผ๋“œ๋ฐฑ์„ ๋นจ๋ฆฌ ๋ฐ›๊ธฐ ์œ„ํ•ด์„œ๋ผ๋„, ์„œ๋น„์Šค๋ฅผ ์ค‘๋‹จํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด์„œ๋ผ๋„ ๋ฆด๋ฆฌ์ฆˆ๋งŒ ์ž˜ ๊ธฐ๋กํ•ด๋‘๊ณ  ๋ฐ”๋กœ๋ฐ”๋กœ ๋ฐฐํฌํ•˜๋Š” ์‚ฌ๋ก€๊ฐ€ ์ฆ๊ฐ€ํ•˜๊ณ  ์žˆ๋‹ค.

์‹ค๋ฆฌ์ฝ˜๋ฐธ๋ฆฌ ํ…Œํฌ ๊ธฐ์—…๋“ค์€ ๋‹ค์–‘ํ•œ ๋ชจ๋‹ˆํ„ฐ๋ง ํˆด๊ณผ ์žฅ์•  ๋Œ€์‘ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋งˆ๋ จํ•ด ๋ฐฐํฌ์— ๋Œ€ํ•œ ์ž์‹ ๊ฐ์„ ๋†’์—ฌ ์กฐ์ง์˜ ๋น„์ฆˆ๋‹ˆ์Šค ์—ญ๋Ÿ‰์„ ํ‚ค์šฐ๊ณ  ์žˆ๋‹ค. ์ฒ˜์Œ์— ์†Œ๊ฐœํ•œ ๋“ฏ์ด “ํ•˜๋ฃจ์— 1,000๋ฒˆ์˜ ๋ฐฐํฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€?” ๋Š” ์กฐ์ง์˜ ๊ธฐ์ˆ ์  ํ™•์žฅ ์—ญ๋Ÿ‰์„ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๋Š” ์ค‘์š”ํ•œ ์ง€ํ‘œ์ด๋‹ค.

๋ฑ…ํฌ์…€๋Ÿฌ๋“œ - ํ•˜๋ฃจ์— 1000๋ฒˆ ๋ฐฐํฌํ•˜๋Š” ์กฐ์ง ๋˜๊ธฐ


๐Ÿ“Œ ์ง€์†์  ๋ฐฐํฌ ์‚ฌ๋ก€

[๊ทธ๋ฆผ] ์ง€์†์  ๋ฐฐํฌ ์‚ฌ๋ก€

์ง€์†์  ๋ฐฐํฌ์˜ ๊ฐ€์žฅ ํ”ํ•œ ์‚ฌ๋ก€๊ฐ€ Github Page์ด๋‹ค. ์ง€์ •ํ•ด๋‘” ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์ •ํ•ด์ง„ ๋ฐฉ์‹์— ๋”ฐ๋ผ ์ž˜ ์ปค๋ฐ‹ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด, Github Page๊ฐ€ ์•Œ์•„์„œ ํ•ด๋‹น index.html ํŒŒ์ผ๊ณผ ํ•ด๋‹น ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์žˆ๋Š” ํŒŒ์ผ์„ ์ž˜ ๋ฒˆ๋“ค๋งํ•ด์„œ Github Page ์„œ๋ฒ„์— ์—…๋กœ๋“œํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ์ž๋™์œผ๋กœ ์ธํ„ฐ๋„ท์— ๋ฐฐํฌ๊ฐ€ ๋˜์—ˆ๊ณ , ์ฃผ๋ณ€ ๊ฐ€์กฑ์ด๋‚˜ ์นœ๊ตฌ๋“ค์—๊ฒŒ ์‰ฝ๊ฒŒ ๋งŒ๋“  ๊ฒฐ๊ณผ๋ฌผ์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋‹ค. (ํ‹€๋ฆฐ ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด ๋น ๋ฅด๊ฒŒ ํ”ผ๋“œ๋ฐฑ๋„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.) ์ด์ „ ์†”๋กœ ํ”„๋กœ์ ํŠธ์—์„œ Github Page ๋ฐฐํฌ์— ์„ฑ๊ณตํ–ˆ๋‹ค๋ฉด, ์ด๋ฏธ ์ง€์†์  ๋ฐฐํฌ๋ฅผ ๊ฒฝํ—˜ํ•ด๋ดค๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.


๐Ÿ“Œ CI/CD์˜ ์˜์—ญ

CI/CD๋Š” ์ง€์†์  ํ†ตํ•ฉ ๋ฐ ์ง€์†์  ์ œ๊ณต(CD, Continuous Delivery)์˜ ๊ตฌ์ถ• ์‚ฌ๋ก€๋งŒ์„ ์ง€์นญํ•  ๋•Œ๋„ ์žˆ๊ณ , ์ง€์†์  ํ†ตํ•ฉ, ์ง€์†์  ์ œ๊ณต, ์ง€์†์  ๋ฐฐํฌ๋ผ๋Š” 3๊ฐ€์ง€ ๊ตฌ์ถ• ์‚ฌ๋ก€ ๋ชจ๋‘๋ฅผ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์ผ ์ˆ˜๋„ ์žˆ๋‹ค.

์ข€ ๋” ๋ณต์žกํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๋ฉด "์ง€์†์ ์ธ ์„œ๋น„์Šค ์ œ๊ณต"์€ ๋•Œ๋กœ ์ง€์†์ ์ธ ๋ฐฐํฌ์˜ ๊ณผ์ •๊นŒ์ง€ ํฌํ•จํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉ๋˜๊ธฐ๋„ ํ•œ๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ CI/CD๋Š” ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ ํ‘œํ˜„๋˜๋Š” ์‹ค์ œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์˜๋ฏธํ•˜๊ณ , ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์— ์ง€์†์ ์ธ ์ž๋™ํ™” ๋ฐ ์ง€์†์ ์ธ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์ด ์šฉ์–ด๋Š” ์‚ฌ๋ก€๋ณ„๋กœ CI/CD ํŒŒ์ดํ”„๋ผ์ธ์— ๊ตฌํ˜„๋œ ์ž๋™ํ™” ์ˆ˜์ค€ ์ •๋„์— ๋”ฐ๋ผ ๊ทธ ์˜๋ฏธ๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ ๊ธฐ์—…์—์„œ๋Š” CI๋ฅผ ๋จผ์ € ์ถ”๊ฐ€ํ•œ ๋‹ค์Œ ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ผ๋ถ€๋กœ์„œ ๋ฐฐํฌ ๋ฐ ๊ฐœ๋ฐœ ์ž๋™ํ™”๋ฅผ ๊ตฌํ˜„ํ•ด ๋‚˜๊ฐ„๋‹ค.


๐Ÿ“Œ ๋ฐฐํฌ ์ž๋™ํ™”

  • ํ•œ๋ฒˆ์˜ ํด๋ฆญ ํ˜น์€ ๋ช…๋ น์–ด ์ž…๋ ฅ์„ ํ†ตํ•ด ์ „์ฒด ๋ฐฐํฌ ๊ณผ์ •์„ ์ž๋™์œผ๋กœ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ

โœจ ๋ฐฐํฌ ์ž๋™ํ™”๊ฐ€ ์™œ ํ•„์š”ํ• ๊นŒ?

  • ๋จผ์ € ์ˆ˜๋™์ ์ด๊ณ  ๋ฐ˜๋ณต์ ์ธ ๋ฐฐํฌ ๊ณผ์ •์„ ์ž๋™ํ™”ํ•จ์œผ๋กœ์จ ์‹œ๊ฐ„์ด ์ ˆ์•ฝ
  • ํœด๋จผ ์—๋Ÿฌ(Human Error)๋ฅผ ๋ฐฉ์ง€

์—ฌ๊ธฐ์„œ ํœด๋จผ ์—๋Ÿฌ๋ž€ ์‚ฌ๋žŒ์ด ์ˆ˜๋™์ ์œผ๋กœ ๋ฐฐํฌ ๊ณผ์ •์„ ์ง„ํ–‰ํ•˜๋Š” ์ค‘์— ์ƒ๊ธฐ๋Š” ์‹ค์ˆ˜๋“ค์„ ๋œปํ•œ๋‹ค. ๊ทธ ์ „์— ํ–ˆ๋˜ ๋ฐฐํฌ ๊ณผ์ •๊ณผ ๋น„๊ตํ•˜์—ฌ ํŠน์ • ๊ณผ์ •์„ ์ƒ๋žตํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅด๊ฒŒ ์ง„ํ–‰ํ•˜์—ฌ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์ด ํœด๋จผ ์—๋Ÿฌ์˜ ์˜ˆ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๋ฐฐํฌ ์ž๋™ํ™”๋ฅผ ํ†ตํ•ด ์ „์ฒด ๋ฐฐํฌ ๊ณผ์ •์„ ๋งค๋ฒˆ ์ผ๊ด€๋˜๊ฒŒ ์ง„ํ–‰ํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•˜์—ฌ ํœด๋จผ ์—๋Ÿฌ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ์„ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“Œ CI/CD ํŒŒ์ดํ”„๋ผ์ธ

SaaS๋Š” ๋ชจ๋˜ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋กœ ๊ฐœ๋ฐœํ•˜๊ธฐ ์ ํ•ฉํ•œ ์†Œํ”„ํŠธ์›จ์–ด์ด๋‹ค. ์‚ฌ์šฉ์ž ์—…๋ฐ์ดํŠธ์— ๋Œ€ํ•œ ๊ฑฑ์ •์—์„œ๋„ ๋ฒ—์–ด๋‚ฌ๊ณ , ํ•˜๋ฃจ์— ์—ฌ๋Ÿฌ ๋ฒˆ์˜ ๋ฐฐํฌ๋„ ๊ฐ€๋Šฅํ•ด์กŒ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋น ๋ฅธ ๋ฐฐํฌ ์†๋„๋ฅผ ๋ณด์žฅ ๋ฐ›์„ ์ˆ˜ ์žˆ์„๊นŒ? ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฐฐํฌํ•  ๋•Œ๋งˆ๋‹ค ์ผ์ผํžˆ ๋นŒ๋“œํ•˜๊ณ  ๋ฐฐํฌํ•˜๋Š” ๊ณผ์ •์„ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์€ ํ•œ๋‘ ๋ฒˆ์ด๋ฉด ์ถฉ๋ถ„ํ•˜๊ฒ ์ง€๋งŒ, ์ด๋Ÿฌํ•œ ๊ณผ์ •์ด ์ˆ˜์—†์ด ์ง„ํ–‰๋œ๋‹ค๋ฉด ์ผ์ผํžˆ ์ด ๊ณผ์ •์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ๋ฒˆ์žก์Šค๋Ÿฝ๊ณ  ์ง€๋ฃจํ•  ๊ฒƒ์ด๋‹ค.

๊ทธ๋ž˜์„œ ์ด ์ˆ˜์—†์ด ์ง„ํ–‰๋˜๋Š” ๋ฐฐํฌ ๊ณผ์ •์„ ์ž๋™ํ™”์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์„ ๊ตฌ์ถ•ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ๊ทธ๊ฒƒ์„ CI/CD ํŒŒ์ดํ”„๋ผ์ธ์ด๋ผ๊ณ  ํ•œ๋‹ค.

[๊ทธ๋ฆผ] ๋ฐฐํฌ ๊ณผ์ •

ํ•ด๋‹น ๊ทธ๋ฆผ์€ ๋ฐฐํฌ ๊ณผ์ •์„ ๋„์‹ํ™”ํ•œ ๊ฒƒ์ž…์ด๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฝ”๋“œ๋ฅผ ์›๊ฒฉ ์ €์žฅ์†Œ์— ์˜ฌ๋ฆฌ๋ฉด, ๊ทธ ์ฝ”๋“œ๊ฐ€ ๋นŒ๋“œ ๋ฐ ํ…Œ์ŠคํŠธ์™€ ๋ฆด๋ฆฌ์ฆˆ๋ฅผ ๊ฑฐ์ณ ๋ฐฐํฌ ์„œ๋ฒ„๋กœ ์ „๋‹ฌ๋œ๋‹ค. ๋ฐฐํฌ ์„œ๋ฒ„์— ๋„๋‹ฌํ•œ ๋นŒ๋“œ๋œ ์ฝ”๋“œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋กœ ์ตœ์ข… ๋ฐฐํฌ๊ฐ€ ์™„๋ฃŒ ๋˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฌผ์„ ์œ ์ €๊ฐ€ ์ง์ ‘ ํ™•์ธํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

์—ฌ๊ธฐ์„œ ์ž๋™ํ™”๋ฅผ ๊พ€ํ•˜๋Š” ๋ถ€๋ถ„์€ ๋ณดํ†ต ์ฝ”๋“œ๊ฐ€ ๋นŒ๋“œ๋˜๋ฉด์„œ ์ตœ์ข…์ ์œผ๋กœ ๋ฐฐํฌ๊ฐ€ ๋˜๋Š” ๋‹จ๊ณ„๊นŒ์ง€์ด๋‹ค. ์ด ๋ถ€๋ถ„์„ ์ง€์†์ ์ธ ํ†ตํ•ฉ ๋ฐ ๋ฐฐํฌ๋ฅผ ์œ„ํ•˜์—ฌ ์ผ๋ จ์˜ ์ž๋™ํ™” ๋‹จ๊ณ„๋กœ ๋งŒ๋“œ๋Š”๋ฐ, ์ด๊ฒƒ์„ ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•œ๋‹ค๊ณ  ํ‘œํ˜„ํ•œ๋‹ˆ๋‹ค.


๐Ÿ“Œ CI/CD ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ธฐ๋ณธ ๋‹จ๊ณ„์™€ ์ˆ˜ํ–‰ ์ž‘์—…

[๊ทธ๋ฆผ] ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ธฐ๋ณธ ๋‹จ๊ณ„์™€ ์ˆ˜ํ–‰ ์ž‘์—…

๋ฐฐํฌ์—์„œ ํŒŒ์ดํ”„๋ผ์ธ(Pipeline)์ด๋ž€ ์šฉ์–ด๋Š” ์†Œ์Šค ์ฝ”๋“œ์˜ ๊ด€๋ฆฌ๋ถ€ํ„ฐ ์‹ค์ œ ์„œ๋น„์Šค๋กœ์˜ ๋ฐฐํฌ ๊ณผ์ •์„ ์—ฐ๊ฒฐํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ๋œปํ•œ๋‹ค. ํŒŒ์ดํ”„๋ผ์ธ์€ ์ „์ฒด ๋ฐฐํฌ ๊ณผ์ •์„ ์—ฌ๋Ÿฌ ๋‹จ๊ณ„(Stages)๋กœ ๋ถ„๋ฆฌํ•œ๋‹ค. ๊ฐ ๋‹จ๊ณ„๋Š” ํŒŒ์ดํ”„๋ผ์ธ ์•ˆ์—์„œ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰๋˜๋ฉฐ, ๊ฐ ๋‹จ๊ณ„๋งˆ๋‹ค ์ฃผ์–ด์ง„ ์ž‘์—…(Actions)๋“ค์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

ํŒŒ์ดํ”„๋ผ์ธ์„ ์—ฌ๋Ÿฌ ๋‹จ๊ณ„๋กœ ๋ถ„๋ฆฌํ•  ๋•Œ, ๋Œ€ํ‘œ์ ์œผ๋กœ ์“ฐ์ด๋Š” ์„ธ ๊ฐ€์ง€ ๋‹จ๊ณ„๊ฐ€ ์กด์žฌํ•œ๋‹ค.

  • Source ๋‹จ๊ณ„: Source ๋‹จ๊ณ„์—์„œ๋Š” ์›๊ฒฉ ์ €์žฅ์†Œ์— ๊ด€๋ฆฌ๋˜๊ณ  ์žˆ๋Š” ์†Œ์Šค ์ฝ”๋“œ์— ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ผ์–ด๋‚  ๊ฒฝ์šฐ, ์ด๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ์ „๋‹ฌํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰
  • Build ๋‹จ๊ณ„: Build ๋‹จ๊ณ„์—์„œ๋Š” Source ๋‹จ๊ณ„์—์„œ ์ „๋‹ฌ๋ฐ›์€ ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผ, ๋นŒ๋“œ, ํ…Œ์ŠคํŠธํ•˜์—ฌ ๊ฐ€๊ณต. ๋˜ํ•œ Build ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ ์ƒ์„ฑ๋œ ๊ฒฐ๊ณผ๋ฌผ์„ ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ์ „๋‹ฌํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰
  • Deploy ๋‹จ๊ณ„: Deploy ๋‹จ๊ณ„์—์„œ๋Š” Build ๋‹จ๊ณ„๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›์€ ๊ฒฐ๊ณผ๋ฌผ์„ ์‹ค์ œ ์„œ๋น„์Šค์— ๋ฐ˜์˜ํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰.

ํŒŒ์ดํ”„๋ผ์ธ์˜ ๋‹จ๊ณ„๋Š” ํ•„์š”์— ๋”ฐ๋ผ ๋” ์„ธ๋ถ„ํ™”๋˜๊ฑฐ๋‚˜ ๊ฐ„์†Œํ™”๋  ์ˆ˜ ์žˆ๋‹ค. DevOps๋ฅผ ์ „๋ฌธ์œผ๋กœ ํ•™์Šตํ•˜๋Š” ๊ฒฝ์šฐ ์•„๋ž˜์™€ ๊ฐ™์ด ํŒŒ์ดํ”„๋ผ์ธ์˜ ๋‹จ๊ณ„๋ฅผ ์„ธ๋ถ„ํ™”ํ•ด์„œ ๋‚˜๋ˆ„๊ธฐ๋„ ํ•œ๋‹ค. ๋˜ํ•œ, ํ•ด๋‹น ํˆด์„ ์†Œ๊ฐœํ•˜๋Š” ์—…์ฒด์— ๋”ฐ๋ผ ์šฉ์–ด๋ฅผ ๋ฏธ๋ฌ˜ํ•˜๊ฒŒ ๋‹ค๋ฅด๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•œ๋‹ค.

โœจ CI/CD ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์„ฑ ์š”์†Œ ๋ฐ ์žฅ์ 

  • ๋นŒ๋“œ (์†Œํ”„ํŠธ์›จ์–ด ์ปดํŒŒ์ผ)
  • ํ…Œ์ŠคํŠธ (ํ˜ธํ™˜์„ฑ ๋ฐ ์˜ค๋ฅ˜ ๊ฒ€์‚ฌ)
  • ๋ฆด๋ฆฌ์Šค (๋ฒ„์ „ ์ œ์–ด ์ €์žฅ์†Œ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์—…๋ฐ์ดํŠธ)
  • ๋ฐฐํฌ (๊ฐœ๋ฐœ์—์„œ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์œผ๋กœ์˜ ๋ณ€ํ™˜)
  • ๊ทœ์ • ์ค€์ˆ˜ ๋ฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ

์ด ๊ณผ์ •์ด ์‹ค๋ฌด์—์„œ๋Š” ๋ฐ˜๋ณต์ ์ธ ํ”„๋กœ์„ธ์Šค์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ถ€๋ถ„์„ ์ผ๋ จ์˜ ์ž๋™ํ™” ๋‹จ๊ณ„๋กœ ๋งŒ๋“ ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์ด๋ ‡๊ฒŒ ๊ตฌ์ถ•๋œ ํŒŒ์ดํ”„๋ผ์ธ์€ ์ตœ์‹  ๋ฒ„์ „์˜ ์†Œํ”„ํŠธ์›จ์–ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ์ œ๊ณตํ•˜๋ ค๋Š” ์ผ๋ จ์˜ ์ฒ˜๋ฆฌ ๋‹จ๊ณ„์— ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ์ˆ˜๋™์œผ๋กœ ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋น ๋ฅด๊ณ  ์•ˆ์ •์ ์ด๋ฉฐ ํšจ๊ณผ์ ์œผ๋กœ ์ค„์—ฌ์ฃผ๊ณ  CI/CD ์ธํ”„๋ผ์™€์˜ ํ˜ธํ™˜์„ฑ๊ณผ ํšจ์œจ์„ฑ์„ ๋†’์—ฌ์ค€๋‹ค.


github action์œผ๋กœ ํด๋ผ์ด์–ธํŠธ CI/CD๋ฅผ ๊ตฌ์ถ•

+ https://fe-63-youa7878-s3.s3.ap-northeast-2.amazonaws.com/index.html