๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Frontend Dev/๐Ÿฅ ์ฝ”๋“œ์Šคํ…Œ์ด์ธ  FE ๋ถ€ํŠธ์บ ํ”„

Section4 Unit7 [Deploy] CI/CD - Github Actions ์‹ค์Šต

๋ฐ˜์‘ํ˜•


Section4 Unit7 [Deploy] CI/CD - Github Actions ์‹ค์Šต

 

๐Ÿ“Œ Chapter1. ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค

• ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค, ์ฆ‰ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค ๋ชจ๋ธ์€ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ์ƒ๋ช…์ฃผ๊ธฐ(SDLC, Software Develpment Life Cycle)๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ๋‹ค.

 

• ์ „ํ†ต์ ์ธ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋กœ ์›Œํ„ฐํ’€ ๋ฐฉ์‹์ด ์žˆ๊ณ , ๋ชจ๋˜ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋กœ ์• ์ž์ผ์ด ์žˆ๋‹ค.

 

๐Ÿ“Œ Chapter2. CI/CD

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

 ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ์ž๋™ํ™” ํ”„๋กœ์„ธ์Šค (Code - Build - Test ๋‹จ๊ณ„)

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

 

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

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

 

๐Ÿ“Œ Chapter3. Github Action

GitHub Actions๋Š” Github๊ฐ€ ๊ณต์‹์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ ๋ฐ ๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ์„ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” CI/CD ํ”Œ๋žซํผ์ด๋‹ค.

 

โญ๏ธ ๊ณผ์ œ. Github Actions ์‹ค์Šต

 

โœ”๏ธ Bare Minimum Requirement

  โœ… ๋‚˜๋งŒ์˜ ์•„๊ณ ๋ผ ์Šคํ…Œ์ด์ธ  ์„œ๋ฒ„์˜ ํด๋ผ์ด์–ธํŠธ ๋ถ€๋ถ„์„ S3๋กœ ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค. ํŠœํ† ๋ฆฌ์–ผ์— ์ด์–ด์„œ ํ•ด๋‹น ์‹ค์Šต์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด์— ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ๋˜ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์ด์šฉํ•ด ๋ด…์‹œ๋‹ค.

 

 Github Actions ์‹ค์Šต์€ ๋”ฐ๋กœ ์ •๋ฆฌ๋ฅผ ํ•ด๋ณด์•˜๋‹ค.

 ํ•˜๋‹ค๋ณด๋‹ˆ ํฅ๋ฏธ๋กญ๊ณ , ์žฌ๋ฏธ์žˆ๋Š” ์ž‘์—…์ด์—ˆ๋‹ค. ๋‹ค๋ฅธ ๋‹ค์–‘ํ•œ ํ…Œ์ŠคํŠธ๋„ ๋„ฃ์„ ์ˆ˜ ์žˆ์—ˆ์œผ๋ฉด ์ข‹์•˜์„ ํ…๋ฐ! ์ฐจ๊ทผ์ฐจ๊ทผ ๊ณต๋ถ€ํ•ด์•ผ๊ฒ ๋‹ค.

 

 

Github Actions, AWS S3๋ฅผ ์‚ฌ์šฉํ•œ CI/CD

๐Ÿ’ฌ Code States ๋ถ€ํŠธ์บ ํ”„์˜ ๋ง‰๋ฐ”์ง€์— CI/CD๋ฅผ ์œ„ํ•œ Github Action ์‹ค์Šต์ด ์žˆ์—ˆ๋‹ค. ์ด์ „ ์ฑ•ํ„ฐ์—์„œ AWS S3 ๋ฒ„ํ‚ท์„ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ๋ฅผ ๋ฐฐํฌํ–ˆ์—ˆ๊ณ , ์ด๋ฏธ ๋ฐฐํฌ ์ค€๋น„๊ฐ€ ์™„๋ฃŒ๋œ S3์— Github Action์„ ํ†ตํ•ด ํŒŒ์ผ

fay-story.com


๐ŸŒ™  ์˜ค๋Š˜์˜ ํšŒ๊ณ 

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

 

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

 

 ์‚ฌ์‹ค ์–ด์ œ ์‹ค์Šตํ–ˆ๋˜ AWS์™€ ์˜ค๋Š˜ ์‹ค์Šตํ•œ Github Actions๋Š” ์ฒ˜์Œ ์ ‘ํ•˜๋‹ค๋ณด๋‹ˆ ๋œฌ๊ตฌ๋ฆ„ ์žก๋Š” ๋Š๋‚Œ์—๋‹ค๊ฐ€ ์ง€๊ธˆ ๋‹น์žฅ ํ•„์š”ํ•œ๊ฑด ์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐํ•ด์„œ ๊ทธ๋ƒฅ ํ•œ๋ฒˆ ๊ฒฝํ—˜๋งŒ ํ•ด๋ณด๊ณ  React ๊ณต๋ถ€๋‚˜ ๋” ํ•ด์•ผ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐ์„ ํ–ˆ์—ˆ๋Š”๋ฐ, ๊ณต๋ถ€๋ฅผ ํ•˜๋ฉด์„œ ํฅ๋ฏธ๊ฐ€ ์ƒ๊ฒผ๋‹ค. ๊ฒฐ๊ตญ์—๋Š” ์„œ๋น„์Šค๋ฅผ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์ด ํšŒ์‚ฌ์˜ ๋ชฉํ‘œ์ผํ…Œ๊ณ , ๋ฐฐํฌ๋œ ์„œ๋น„์Šค๋Š” ์ง€์†์ ์œผ๋กœ ๊ด€๋ฆฌ๋ฅผ ํ•ด์ค˜์•ผํ• ํ…Œ๋‹ˆ ๋‹น์—ฐํžˆ ์•Œ์•„์•ผ ํ•˜๋Š” ๋ถ€๋ถ„์ด๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. ๋ฌผ๋ก  ๋‹น์žฅ์€ ์‚ฌ์šฉ๋นˆ๋„๊ฐ€ ๋–จ์–ด์ง€๋”๋ผ๋„, ์–ธ์  ๊ฐ€ ๋‚ด ์„œ๋น„์Šค๋ฅผ ๋‚ด๊ฐ€ ๊ตฌ์ถ•ํ•˜๊ณ  ๋ฐฐํฌํ•˜๋Š” ๋‚ ๋„ ์˜ค์ง€ ์•Š์„๊นŒ? ๊ทธ๋‚ ๊นŒ์ง€ ํ™”์ดํŒ… ๐Ÿ’“

๋ฐ˜์‘ํ˜•