๊ด€๋ฆฌ ๋ฉ”๋‰ด

axnuo

[CI/CD] CI/CD์˜ ๊ฐœ๋… ๋ฐ ์ข…๋ฅ˜ ๋ณธ๋ฌธ

์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

[CI/CD] CI/CD์˜ ๊ฐœ๋… ๋ฐ ์ข…๋ฅ˜

axnuo 2024. 9. 18. 00:22

๐Ÿ“ŒCI/CD๋ž€?

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

Continuous Integration (CI)

์ง€์†์ ์ธ ํ†ตํ•ฉ : ๊ฐœ๋ฐœ์ž๋“ค์ด ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ฉํ•˜๋Š” ํ”„๋กœ์„ธ์Šค.

๋ชฉํ‘œ : ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ฆ‰์‹œ ํ…Œ์ŠคํŠธ ๋˜๊ณ , ๋ฌธ์ œ๋ฅผ ์กฐ๊ธฐ์— ๋ฐœ๊ฒฌํ•˜์—ฌ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ

ํ•ต์‹ฌ ์š”์†Œ : ์ž๋™ํ™”๋œ ๋นŒ๋“œ์™€ ํ…Œ์ŠคํŠธ

[CI์˜ ์ด์ ]

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

Continuous Delivery (CD)

์ง€์†์ ์ธ ๋ฐฐํฌ : ํ†ตํ•ฉ๋œ ์ฝ”๋“œ๋ฅผ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์— ๋ฐฐํฌํ•  ์ค€๋น„.

ํ•ต์‹ฌ ์š”์†Œ : ์ฝ”๋“œ๊ฐ€ ํ•ญ์ƒ ๋ฐฐํฌํ•  ์ค€๋น„๊ฐ€ ๋œ ์ƒํƒœ๋กœ ์œ ์ง€๋˜๋Š” ๊ฒƒ, ํ•˜์ง€๋งŒ ์‹ค์ œ ๋ฐฐํฌ๋Š” ์ˆ˜๋™์œผ๋กœ ์ด๋ฃจ์–ด์ง.

[CD์˜ ์ด์ ]

  • ์ฝ”๋“œ๋ฅผ ์ž์ฃผ ๋ฐฐํฌํ•  ์ค€๋น„๊ฐ€ ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ตฌ์‚ฌํ•ญ ๋ณ€ํ™”์— ๋น ๋ฅด๊ฒŒ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ์Œ.
  • ๋ฐฐํฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž๋™ํ™”๋˜์–ด ์ธ์  ์˜ค๋ฅ˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Œ.

Continuous Deployment (CD)

Continuous Delivery์˜ ํ™•์žฅ, ์ค€๋น„๋œ ์ฝ”๋“œ๋ฅผ ์ž๋™์œผ๋กœ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์— ๋ฐฐํฌํ•จ. ์ฆ‰, ๋ฐฐํฌ ๊ณผ์ •์ด ์™„์ „ํžˆ ์ž๋™ํ™”๋˜์–ด ์‚ฌ๋žŒ์ด ๊ฐœ์ž…ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

[Continuous Deployment์˜ ์ด์ ]

  • ๋น ๋ฅด๊ฒŒ ๊ธฐ๋Šฅ ๋ฐฐํฌ ๊ฐ€๋Šฅ.
  • ์ธ์  ์˜ค๋ฅ˜๋ฅผ ์ค„์ด๋ฉฐ, ๋ฐฐํฌ ์ฃผ๊ธฐ๋ฅผ ๊ทน๋‹จ์ ์œผ๋กœ ์งง๊ฒŒ ๋งŒ๋“ฆ.

๐Ÿ“ŒCI/CD ํŒŒ์ดํ”„๋ผ์ธ์˜ ์ฃผ์š” ๋‹จ๊ณ„

์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ๋ถ€ํ„ฐ ๋ฐฐํฌ๊นŒ์ง€์˜ ๊ณผ์ •์„ ์ž๋™ํ™”ํ•˜๊ธฐ ์œ„ํ•œ ์—ฌ๋Ÿฌ ๋‹จ๊ณ„๋กœ ๊ตฌ์„ฑ

  1. ์ฝ”๋“œ ์ž‘์„ฑ (Code): ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•œ ํ›„ ์ปค๋ฐ‹
  2. ๋นŒ๋“œ (Build): ์ปค๋ฐ‹๋œ ์ฝ”๋“œ๊ฐ€ ์ž๋™์œผ๋กœ ๋นŒ๋“œ. ๋นŒ๋“œ์—์„œ๋Š” ์ข…์†์„ฑ ๊ด€๋ฆฌ, ์ปดํŒŒ์ผ, ํŒจํ‚ค์ง• ๋“ฑ์ด ์ด๋ฃจ์–ด์ง.
  3. ํ…Œ์ŠคํŠธ (Test): ๋นŒ๋“œ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•ด ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ ์‹คํ–‰. ์œ ๋‹› ํ…Œ์ŠคํŠธ, ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ, ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ ๋“ฑ์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ์Œ.
  4. ๋ฐฐํฌ ์ค€๋น„ (Release): ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•œ ๋นŒ๋“œ๋Š” ๋ฐฐํฌ ์ค€๋น„ ์ƒํƒœ๋กœ ๋ณ€๊ฒฝ. Continuous Delivery์—์„œ๋Š” ์ˆ˜๋™ ์Šน์ธ์„ ๊ฑฐ์น˜๊ณ , Continuous Deployment์—์„œ๋Š” ์ž๋™ํ™”.
  5. ๋ฐฐํฌ (Deploy): ์ค€๋น„๋œ ์ฝ”๋“œ๋Š” ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์— ๋ฐฐํฌ. CI/CD์— ๋”ฐ๋ผ ์ž๋™ ๋˜๋Š” ์ˆ˜๋™์œผ๋กœ ๋ฐฐํฌ๊ฐ€๋Šฅ.
  6. ๋ชจ๋‹ˆํ„ฐ๋ง (Monitor): ๋ฐฐํฌ ํ›„, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜์—ฌ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”์ง€ ํ™•์ธ.

๐Ÿ“ŒCI/CD ๋„๊ตฌ

  1. Jenkins: ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ์˜คํ”ˆ์†Œ์Šค CI/CD ๋„๊ตฌ. ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋ฉฐ, ์œ ์—ฐํ•˜๊ฒŒ ์„ค์ • ๊ฐ€๋Šฅ
  2. GitLab CI/CD: GitLab์—์„œ ์ œ๊ณตํ•˜๋Š” CI/CD ๊ธฐ๋Šฅ์œผ๋กœ, GitLab ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์™€ ๋ฐ€์ ‘ํ•˜๊ฒŒ ํ†ตํ•ฉ๋จ.
  3. CircleCI: ํด๋ผ์šฐ๋“œ ๊ธฐ๋ฐ˜ CI/CD ๋„๊ตฌ๋กœ, ๋น ๋ฅธ ์‹คํ–‰ ์†๋„์™€ ์„ค์ •์˜ ๊ฐ„ํŽธํ•จ.
  4. Travis CI: GitHub๊ณผ ๊ธด๋ฐ€ํ•˜๊ฒŒ ํ†ตํ•ฉ๋œ CI ๋„๊ตฌ๋กœ, ๊ฐ„ํŽธํ•œ ์„ค์ •๊ณผ ์‚ฌ์šฉ๋ฒ•์ด ์žฅ์ .
  5. AWS CodePipeline: AWS ํ™˜๊ฒฝ์— ์ตœ์ ํ™”๋œ CI/CD ๋„๊ตฌ๋กœ, AWS ์„œ๋น„์Šค์™€์˜ ํ†ตํ•ฉ์ด ๊ฐ•๋ ฅํ•จ.
  6. Github Actions: GitHub์—์„œ ์ œ๊ณตํ•˜๋Š” ์ž๋™ํ™” ์›Œํฌํ”Œ๋กœ์šฐ ๋„๊ตฌ๋กœ, ์ฝ”๋“œ ํ‘ธ์‹œ, ํ’€ ๋ฆฌํ€˜์ŠคํŠธ, ์ด์Šˆ ์ƒ์„ฑ ๋“ฑ ๋‹ค์–‘ํ•œ GitHub ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ์ž๋™ํ™”๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Œ.

๐Ÿ“ŒCI/CD ๊ตฌ์ถ• ๋ฐฉ๋ฒ•

1. ์ฝ”๋“œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์„ค์ •

  • Git๊ณผ ๊ฐ™์€ ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์„ค์ •
  • ์ฝ”๋“œ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ํŠธ๋ฆฌ๊ฑฐ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ CI/CD ํŒŒ์ดํ”„๋ผ์ธ์ด ๋™์ž‘ํ•˜๋„๋ก ์„ค์ •

2. ๋นŒ๋“œ ์ž๋™ํ™”

  • ๋นŒ๋“œ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋นŒ๋“œํ•˜๋Š” ํ”„๋กœ์„ธ์Šค ์ž๋™ํ™”
  • CI ๋„๊ตฌ์—์„œ ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •

3. ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ ์„ค์ •

  • ์œ ๋‹› ํ…Œ์ŠคํŠธ, ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ, ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ ๋“ฑ ๋‹ค์–‘ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์ž๋™์œผ๋กœ ์‹คํ–‰ํ•˜๋„๋ก ์„ค์ •
  • ํ…Œ์ŠคํŠธ ํ†ต๊ณผ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ์ง„ํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •

4. ๋ฐฐํฌ ์„ค์ •

  • ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ ๋˜๋Š” ์Šคํ…Œ์ด์ง• ํ™˜๊ฒฝ์— ๋ฐฐํฌํ•  ์ค€๋น„๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด, ์ž๋™์œผ๋กœ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •
  • AWS, Google Cloud, Docker ๋“ฑ ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ๊ณผ์˜ ํ†ตํ•ฉ์„ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ์Œ.

5. ๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ํ”ผ๋“œ๋ฐฑ ๋ฃจํ”„

  • ๋ฐฐํฌ ํ›„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •
  • ๋ฐฐํฌ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ฆ‰์‹œ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ๊ณ  ์‹œ์Šคํ…œ ๊ตฌ์ถ•

5. CI/CD ๊ตฌ์ถ• ์‹œ ์ฃผ์˜ํ•  ์ 

  1. ํ…Œ์ŠคํŠธ ํ’ˆ์งˆ: CI/CD์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ์˜ ํ’ˆ์งˆ์ž…๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ๊ฐ€ ์ œ๋Œ€๋กœ ์„ค๊ณ„๋˜์ง€ ์•Š์œผ๋ฉด, ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ์ฝ”๋“œ๊ฐ€ ํ”„๋กœ๋•์…˜์— ๋ฐฐํฌ๋  ์ˆ˜ ์žˆ์Œ.
  2. ๋ฐฐํฌ ๋นˆ๋„: ๋ฐฐํฌ๋ฅผ ๋„ˆ๋ฌด ์ž์ฃผ ํ•˜๊ฑฐ๋‚˜ ๋„ˆ๋ฌด ์ ๊ฒŒ ํ•˜๋Š” ๊ฒƒ์€ ๋ชจ๋‘ ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ ์ ˆํ•œ ๋นˆ๋„๋กœ ๋ฐฐํฌํ•˜๋„๋ก ์ „๋žต์„ ์ˆ˜๋ฆฝํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”
  3. ๋ณด์•ˆ: ๋ฏผ๊ฐํ•œ ์ •๋ณด๊ฐ€ ์œ ์ถœ๋˜์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•ด์•ผ ํ•˜๋ฉฐ, ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋ณ„๋„์˜ ๋ณด์•ˆ ํ…Œ์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•จ.

๊ฒฐ๋ก 

CI/CD๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ๊ณผ ๋ฐฐํฌ์˜ ์†๋„๋ฅผ ๋น ๋ฅด๊ฒŒ ํ•˜๊ณ , ํ’ˆ์งˆ์„ ๋†’์ด๋ฉฐ, ์ธ์  ์˜ค๋ฅ˜๋ฅผ ์ค„์ด๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์ง€์†์ ์ธ ํ†ตํ•ฉ๊ณผ ๋ฐฐํฌ๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋“ค์€ ๋” ๋น ๋ฅด๊ณ  ์•ˆ์ •์ ์œผ๋กœ ์ œํ’ˆ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜๋ฌธ์ 

๋„์ปค๋Š” ๋ญ์ง€? …

๋‹ค์Œ ๊ธ€์—์„œ…

์ผ๋‹จ ์ด๋ก ์„ ๋Œ€์ถฉ์ด๋‚˜๋งˆ ๊ณต๋ถ€ํ•˜๊ณ  ์‹ค์Šต ๊ธ€๋„ ๋”ฐ๋กœ ๊ผญ๊ผญ ์˜ฌ๋ ค์•ผ์ง€!!

- ์šฐ์„  github actions + AWS S3๋กœ ๋‹ค๋“ค ๋งŽ์ด CI/CD ๊ตฌ์ถ•์„ ์ง„ํ–‰ํ•˜๋Š” ๋“ฏ ๋ณด์ž„!!