Front End/Web

CI / CD (๋ฐฐํฌ ์ž๋™ํ™”)

๐ŸŒ

๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค

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

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

๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค์˜ ๋‹จ๊ณ„

  • ์š”๊ตฌ๋ถ„์„ ๋ฐ ์‹œ์Šคํ…œ ๋ช…์„ธ ์ž‘์„ฑ

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

  • ์„ค๊ณ„

    ์•ž์„œ ์ •์˜ํ•œ ๊ธฐ๋Šฅ์„ ์‹ค์ œ๋กœ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์„ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๊ฒฐ์ •ํ•œ๋‹ค. ํฌ๊ฒŒ ์‹œ์Šคํ…œ, ํ”„๋กœ๊ทธ๋žจ, UI ์„ค๊ณ„๋กœ ๋‚˜๋‰˜๋ฉฐ, ์‹œ์Šคํ…œ ๊ตฌ์กฐ์„ค๊ณ„๋Š” ์‹œ์Šคํ…œ์„ ๊ตฌ์„ฑํ•˜๋Š” ๋‚ด๋ถ€ ํ”„๋กœ๊ทธ๋žจ์ด๋‚˜ ๋ชจ๋“ˆ๊ฐ„์˜ ๊ด€๊ณ„์™€ ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•˜๊ณ , ํ”„๋กœ๊ทธ๋žจ ์„ค๊ณ„๋Š” ํ”„๋กœ๊ทธ๋žจ ๋‚ด์˜ ๊ฐ ๋ชจ๋“ˆ์—์„œ์˜ ์ฒ˜๋ฆฌ ์ ˆ์ฐจ๋‚˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์„ค๊ณ„ํ•œ๋‹ค. ์ด ์ค‘ UI ์„ค๊ณ„๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋ณด์ด๋Š” ๋ถ€๋ถ„์„ ์„ค๊ณ„ํ•˜๋Š” ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ์„ค๊ณ„์— ํ•ด๋‹น๋œ๋‹ค.

  • ๊ตฌํ˜„

    ์„ค๊ณ„ ๋‹จ๊ณ„์—์„œ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๊ฒฐ์ •ํ•œ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ์‹ค์ œ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•œ๋‹ค. ์ด ๋•Œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ฒ•์€ ๋‘ ๊ฐ€์ง€๋กœ ๋‚˜๋‰œ๋‹ค.

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

    ๊ฐœ๋ฐœํ•œ ์‹œ์Šคํ…œ์ด ์š”๊ตฌ์‚ฌํ•ญ์„ ๋งŒ์กฑํ•˜๋Š”์ง€, ์‹คํ–‰ ๊ฒฐ๊ณผ๊ฐ€ ์˜ˆ์ƒํ•œ ๊ฒฐ๊ณผ์™€ ์ •ํ™•ํžˆ ๋งž๋Š”์ง€ ๊ฒ€์‚ฌํ•˜๊ณ  ํ‰๊ฐ€ํ•˜๋Š” ์ผ๋ จ์˜ ๊ณผ์ •์ด๋‹ค. ๋ฏธ์ฒ˜ ๋ฐœ๊ฒฌํ•˜์ง€ ๋ชปํ•œ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ์–ด ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค.

  • ๋ฐฐํฌ ๋ฐ ์œ ์ง€๋ณด์ˆ˜

    ์‹œ์Šคํ…œ์ด ์ธ์ˆ˜๋˜๊ณ  ์„ค์น˜๋œ ํ›„(๋ฐฐํฌ) ์ผ์–ด๋‚˜๋Š” ๋ชจ๋“  ํ™œ๋™์„ ์ง€์นญํ•œ๋‹ค. ์ดํ›„ ์ผ์–ด๋‚˜๋Š” ์ปค์Šคํ„ฐ๋งˆ์ด์ง•, ๊ตฌํ˜„, ํ…Œ์ŠคํŠธ ๋“ฑ ๋ชจ๋‘ ์ด ๋‹จ๊ณ„์— ํฌํ•จ๋˜๋ฏ€๋กœ ์†Œํ”„ํŠธ์›จ์–ด ์ƒ๋ช…์ฃผ๊ธฐ์—์„œ ๊ฐ€์žฅ ๊ธด ๊ธฐ๊ฐ„์„ ์ฐจ์ง€ํ•œ๋‹ค. ์œ ์ง€๋ณด์ˆ˜์˜ ์œ ํ˜•์—๋Š” ๋„ค ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

    • ์ˆ˜์ •ํ˜• ์œ ์ง€๋ณด์ˆ˜ : ์‚ฌ์šฉ ์ค‘์— ๋ฐœ๊ฒฌํ•œ ํ”„๋กœ๊ทธ๋žจ์˜ ์˜ค๋ฅ˜ ์ˆ˜์ • ์ž‘์—…
    • ์ ์‘ํ˜• ์œ ์ง€๋ณด์ˆ˜ : ์‹œ์Šคํ…œ๊ณผ ๊ด€๋ จํ•œ ํ™˜๊ฒฝ์  ๋ณ€ํ™”์— ์ ์‘ํ•˜๊ธฐ ์œ„ํ•œ ์žฌ์กฐ์ • ์ž‘์—…
    • ์™„์ „ํ˜• ์œ ์ง€๋ณด์ˆ˜ : ์‹œ์Šคํ…œ์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒํ•˜๊ธฐ ์œ„ํ•œ ๊ฐœ์„  ์ž‘์—…
    • ์˜ˆ๋ฐฉํ˜• ์œ ์ง€๋ณด์ˆ˜ : ์•ž์œผ๋กœ ๋ฐœ์ƒํ• ์ง€ ๋ชจ๋ฅผ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ˆ˜์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋Œ€๋น„ ์ž‘์—…

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

์ „ํ†ต์ ์ธ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค

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

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

๊ทธ๋ž˜์„œ ์ „ํ†ต์ ์ธ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค์—์„œ๋Š” ์†Œํ”„ํŠธ์›จ์–ด์˜ ์•ˆ์ •์„ฑ ๊ฐœ์„ ์„ ์œ„ํ•ด ํ…Œ์ŠคํŠธ ๋‹จ๊ณ„์— ๋‹ค์–‘ํ•œ ํ…Œ์ŠคํŠธ๋“ค์„ ๋„์ž…ํ•˜๊ธฐ๋„ ํ•œ๋‹ค.

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

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

๋ชจ๋˜ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค

์ด๋Ÿฐ ๊ธฐ์กด ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฒ—์–ด๋‚˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ํ”„๋กœ์„ธ์Šค ์ค‘ ํ•˜๋‚˜๊ฐ€ ์• ์ž์ผ(Asile) ๋ฐฉ์‹์ด๋‹ค. ์ด ์• ์ž์ผ ๋ฐฉ์‹์€ ์Šคํ”„๋ฆฐํŠธ(sprint)๋ผ๋Š” ์งง์€ ์ฃผ๊ธฐ์˜ ๊ฐœ๋ฐœ ์‚ฌ์ดํด์„ ๊ณ„์† ๋ฐ˜๋ณตํ•œ๋‹ค.

์ด ๋ฐฉ์‹์€ ์š”๊ตฌ์‚ฌํ•ญ์ด ๋ณ€ํ•˜๋Š” ๊ฒƒ์„ ๋‹น์—ฐํ•œ ์ „์ œ๋กœ ๋‘๊ณ  ์žˆ์–ด ๊ณ„ํš์— ์˜์กดํ•˜์—ฌ ํ˜•์‹์  ์ ˆ์ฐจ๋ฅผ ๋”ฐ๋ผ์•ผ ํ•˜๊ณ  ๋’ค๋กœ ํšŒ๊ท€ํ•  ์ˆ˜ ์—†๋Š” ์ „ํ†ต์ ์ธ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋ณด๋‹ค๋Š” ํ›จ์”ฌ ํšจ์œจ์ ์œผ๋กœ ๊ฐœ๋ฐœ์— ์ฐฉ์ˆ˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ์• ์ž์ผ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋น ๋ฅด๊ฒŒ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด ํ•˜๋ฃจ์—๋„ ์—ฌ๋Ÿฌ ๋ฒˆ์˜ ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง€๋Š”๋ฐ, ์ด๋Ÿฐ ๋ฐฉ์‹์€ SaaS(Software as a Service, ์„œ๋น„์Šคํ˜• ์†Œํ”„ํŠธ์›จ์–ด)๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐ์— ์ ํ•ฉํ•˜๋‹ค.

SaaS?

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

์ „ํ†ต์ ์ธ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค vs. ๋ชจ๋˜ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค

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

DevOps

์ „ํ†ต์ ์ธ IT ์กฐ์ง ๊ตฌ์กฐ๋กœ๋Š” ๊ฐœ๋ฐœํŒ€(Dev)์™€ ์šด์˜ํŒ€(Ops)์ด ์†Œํ”„ํŠธ์›จ์–ด์˜ ๊ฐœ๋ฐœ๊ณผ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ๋‹ด๋‹นํ–ˆ๋‹ค.

Dev(๊ฐœ๋ฐœํŒ€)Ops(์šด์˜ํŒ€)
ํŠน์ง•- ์žฆ์€ ๋ฐฐํฌ ๋ฐ ์—…๋ฐ์ดํŠธ - ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ†ตํ•ด ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ(๋ฆฌ์†Œ์Šค)์ œ๊ณต- ํ”„๋กœ๋•์…˜ ์•ฑ์˜ ์•ˆ์ •์„ฑ ํ™•๋ณด - ์ธํ”„๋ผ ๊ด€๋ฆฌ - ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ์ œ์–ด

๊ฐœ๋ฐœํŒ€์ด ์žฆ์€ ์—…๋ฐ์ดํŠธ๋ฅผ ํ†ตํ•ด ์ œํ’ˆ์— ๋ณ€ํ™”๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค๋ฉด, ์šด์˜ํŒ€์€ ์ด๋Ÿฐ ์„œ๋น„์Šค ๊ตฌ์„ฑ์˜ ๋ณ€๊ฒฝ์„ ์ตœ์†Œํ™”ํ•ด ์•ˆ์ •์„ฑ์„ ํ™•๋ณดํ•˜๋Š”๋ฐ, ์ด ๋ถ€๋ถ„์€ ๊ฝค ์ƒ์ถฉ๋˜๋Š” ๋ถ€๋ถ„์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐˆ๋“ฑ์„ ์•ผ๊ธฐํ•œ๋‹ค. ์ด๋Ÿฐ ๊ฐˆ๋“ฑ์ด ๋นš์–ด์ง€๋Š” ๊ตฌ์กฐ๋Š” ํ˜„๋Œ€ IT ์‹œ์žฅ์—๋Š” ๋งž์ง€ ์•Š์„ ๋ฟ ๋”๋Ÿฌ, ์ œํ’ˆ์˜ ๋ฆด๋ฆฌ์ฆˆ ์ฃผ๊ธฐ๋ฅผ ๊ธธ์–ด์ง€๊ฒŒ ๋งŒ๋“ ๋‹ค.

๊ทธ๋ž˜์„œ ํƒ„์ƒํ•œ ๊ฐœ๋…์ด DevOps์ธ๋ฐ, ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ(Development)๊ณผ IT ์šด์˜(Operations)์˜ ํ•ฉ์„ฑ์–ด์ด๋‹ค. ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์ž์ฃผ, ๋นจ๋ฆฌ ๊ทธ๋ฆฌ๊ณ  ์•ˆ์ „ํ•˜๊ฒŒ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ์• ์ž์ผ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ๋‹ค.

DevOps ๋ฌธํ™”

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

DevOps ํŠน์ง•

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

DevOps ์‚ฌ๋ก€

์‹ค์ œ ์ธํ„ฐ๋„ท ์ƒ์—์„œ ์ŠคํŠธ๋ฆฌ๋ฐ์ด๋‚˜ ์‚ฌ์ง„๊ฐ™์€ ๋งŽ์€ ํŠธ๋ž˜ํ”ฝ๊ณผ ๋‹ค์–‘ํ•œ ์‚ฌ์šฉ์ž ํ™˜๊ฒฝ ๋ฐ ์š”๊ตฌ์— ๋น ๋ฅด๊ฒŒ ๋Œ€์‘ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐฐํฌ๊ฐ€ ๋งŽ์€ ๊ธฐ์—… ์ค‘ DevOps๋ฅผ ํ™œ์šฉํ•ด ์„ฑ๊ณตํ•œ ๊ธฐ์—…๋“ค์ด ๋งŽ๋‹ค.

์‹ค์ œ ์‚ฌ๋ก€
  • ๋ฏธ๊ตญ ์ตœ๋Œ€ ์˜จ๋ผ์ธ ์ŠคํŠธ๋ฆฌ๋ฐ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋Š” ๋„ทํ”Œ๋ฆญ์Šค(Netflex)๋Š” 2012๋…„ ๊ธฐ์ค€์œผ๋กœ 3์ฒœ๋งŒ ๋ช…์ด ๋„˜๋Š” ๊ฐ€์ž…์ž๋ฅผ ๋ณด์œ ํ•˜๋ฉฐ ์—„์ฒญ๋‚œ ์ŠคํŠธ๋ฆฌ๋ฐ ํŠธ๋ž˜ํ”ฝ์„ ์•„๋งˆ์กด ์›น ์„œ๋น„์Šค(AWS)์—์„œ 10,000์—ฌ๊ฐœ ์ด์ƒ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ 10์—ฌ๋ช… ์ •๋„์˜ DevopsํŒ€์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ๋‹ค.
  • ์‚ฌ์ง„ SNS ์„œ๋น„์Šค๋กœ ์•ผํ›„์— ํ•ฉ๋ณ‘๋œ Flickr๋Š” ์ดˆ๋‹น 40,000 ์žฅ์˜ ์‚ฌ์ง„์ด ์—…๋กœ๋“œ ๋˜๋Š”๋ฐ Devops๋ฅผ ํ†ตํ•˜์—ฌ ๋ชจ๋“  ๋ฐฐํฌ ๋ฐ ์šด์˜์„ ์ž๋™ํ™”ํ•˜์—ฌ ํ•˜๋ฃจ์—๋„ 10์—ฌ ๋ฒˆ ์”ฉ ์ด์ƒ์˜ ๋ฐฐํฌ๋ฅผ ํ•œ๋‹ค.
  • ์Œ์•… ์ŠคํŠธ๋ฆฌ๋ฐ ์„œ๋น„์Šค๋กœ ์ตœ๊ทผ ๊ฐ๊ด‘์„ ๋ฐ›๊ณ  ์žˆ๋Š” Spotify๋„ ๊ฐ•๋ ฅํ•œ Devops ๊ฐœ๋ฐœ๋ฌธํ™”๋ฅผ ๊ฐ–์ถ”๊ณ  ์˜คํ”ˆ์†Œ์Šค ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฐฐํฌ์™€ ์šด์˜์„ ์ž๋™ํ™”ํ•˜์—ฌ ๊ด€๋ฆฌํ•œ๋‹ค.

CI/CD

CI/CD๋Š” ์•ฝ์–ด๋กœ, ๋ช‡ ๊ฐ€์ง€ ๋‹ค๋ฅธ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

  • CI

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

  • CD

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

CI/CD์˜ ๋‹จ๊ณ„

์ผ๋ฐ˜์ ์ธ ์•ฑ์˜ ๊ฐœ๋ฐœ ๋ฐ ์œ ์ง€๋ณด์ˆ˜ ๋‹จ๊ณ„๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค. ์—ฌ๊ธฐ์„œ ์ง€์†์  ํ†ตํ•ฉ ๋ฐ ์ง€์†์  ์ „๋‹ฌ์„ ๋‹จ๊ณ„๋ณ„๋กœ ๊พ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

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

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

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

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

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

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

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

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

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

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

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

์ง€์†์  ๋ฐฐํฌ์˜ ๋Œ€ํ‘œ์  ์‚ฌ๋ก€ : Github Page

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

CI/CD์˜ ์˜์—ญ

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

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

๋ฐฐํฌ ์ž๋™ํ™”

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

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

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

๊ธฐ๋ณธ ๋‹จ๊ณ„์™€ ์ˆ˜ํ–‰ ์ž‘์—…

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

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

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

๊ตฌ์„ฑ์š”์†Œ ๋ฐ ์žฅ์ 

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

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

Github Actions

Github Actions์€ Github๊ฐ€ ๊ณต์‹์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ ๋ฐ ๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ์„ ์ž๋™ํ™” ํ•  ์ˆ˜ ์žˆ๋Š” CI/CD ํ”Œ๋žซํผ์ด๋‹ค. ๋ ˆํฌ์ง€ํ† ๋ฆฌ์—์„œ pull request๋‚˜ push๊ฐ™์€ ์ด๋ฒคํŠธ๋ฅผ ํŠธ๋ฆฌ๊ฑฐ๋กœ Github ์ž‘์—… ์›Œํฌํ”Œ๋กœ๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ์›Œํฌํ”Œ๋กœ๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ์ž‘์—…์ด ์‹คํ–‰๋˜๋Š” ์ž๋™ํ™” ํ”„๋กœ์„ธ์Šค๋กœ, ๊ฐ ์ž‘์—…์€ ์ž์ฒด ๊ฐ€์ƒ ๋จธ์‹  ๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ ์‹คํ–‰๋œ๋‹ค.

์›Œํฌํ”Œ๋กœ๋Š” YAML ( .yml ํ˜น์€ .yaml ) ํŒŒ์ผ์— ์˜ํ•ด ๊ตฌ์„ฑ๋˜๋ฉฐ, ํ…Œ์ŠคํŠธ, ๋ฐฐํฌ ๋“ฑ ๊ธฐ๋Šฅ์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์›Œํฌํ”Œ๋กœ๋„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ƒ์„ฑ๋œ ์›Œํฌํ”Œ๋กœ๋Š” .github/workflows ๋””๋ ‰ํ† ๋ฆฌ ์ดํ•˜์— ์œ„์น˜ํ•œ๋‹ค.

๋น„๊ณต๊ฐœ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์˜ ๊ฒฝ์šฐ Github Actions๊ฐ€ ์ž‘๋™ํ•  ๋•Œ์˜ ์šฉ๋Ÿ‰๊ณผ ์‹œ๊ฐ„์ด ์ œํ•œ๋˜์–ด ์žˆ์ง€๋งŒ ๊ณต๊ฐœ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋Š” ๋ฌด๋ฃŒ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

Github Actions ์‹ค์Šต : ๋ฐฐํฌ ์ž๋™ํ™”ํ•˜๊ธฐ

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

name: client # ์‹คํ–‰ํ•  ์•ก์…˜์˜ ์ด๋ฆ„

# ์•ก์…˜์ด ์‹คํ–‰๋˜๋Š” ์กฐ๊ฑด(์ด๋ฒคํŠธ)
on:
  push:
    branches:
      - reference # referece ๋ธŒ๋žœ์น˜์— push๊ฐ€ ์ƒ๊ธธ ๋•Œ ์‹คํ–‰๋œ๋‹ค.

# ์•ก์…˜ ์›Œํฌํ”Œ๋กœ
# ์›Œํฌํ”Œ๋กœ์˜ ์ด๋ฆ„์„ key๋กœ ์ง€์ •ํ•œ๋‹ค. ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์›Œํฌํ”Œ๋กœ๊ฐ€ ๋“ค์–ด๊ฐˆ ์ˆ˜๋„ ์žˆ๋‹ค.
# ๊ฐ๊ฐ์˜ jobs๋Š” ๋…๋ฆฝ๋œ ํ™˜๊ฒฝ(์ธ์Šคํ„ด์Šค)์—์„œ ์‹คํ–‰๋œ๋‹ค.
# ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ด ํšจ์œจ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.
jobs:
  build: # job์˜ ์ด๋ฆ„
    runs-on: ubuntu-20.04 # ์•ก์…˜์„ ์‹คํ–‰ ํ•  OS ์ง€์ •
    steps: # ์ธ์Šคํ„ด์Šค์—์„œ ์‹คํ–‰ ํ•  ๊ฐ ์ ˆ์ฐจ
      - name: Checkout source code. # Github Checkout Action : ๋ ˆํฌ์ง€ํ† ๋ฆฌ์—์„œ ์ฝ”๋“œ๋ฅผ ๋‚ด๋ ค๋ฐ›๋Š”๋‹ค.
        uses: actions/checkout@v2
      - name: Install dependencies # npm package install
        run: npm install
        working-directory: ./my-agora-states-client # ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
      - name: Build # react build ์‹คํ–‰
        run: npm run build
        working-directory: ./my-agora-states-client
      - name: SHOW AWS CLI VERSION # ๊ธฐ๋ณธ์ ์œผ๋กœ ์„ค์น˜๋œ AWS CLI์˜ ๋ฒ„์ „ ํ™•์ธ
        env: # ๋ ˆํฌ์ง€ํ† ๋ฆฌ์˜ secret์„ ์ด์šฉํ•ด env๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          AWS_EC2_METADATA_DISABLED: true
        run: |
          aws --version
      - name: Sync Bucket # AWS S3 ๋ฒ„์ผ“์— Build๋œ ํŒŒ์ผ ์—…๋กœ๋“œ
        env:
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          AWS_EC2_METADATA_DISABLED: true
        run: |
          aws s3 sync \
            --region ap-northeast-2 \
            build s3://fe-64-ninefloor-s3 \
            --delete
        working-directory: ./my-agora-states-client

โš ๏ธ Issue : S3 ๋ฒ„์ผ“ ์‹ฑํฌ ์ค‘ ์—๋Ÿฌ ๋ฐœ์ƒ

์•ก์…˜ ์‹คํ–‰ ์ค‘ The user-provided path dist does not exist.๋ผ๋Š” ๋ฉ”์„ธ์ง€์™€ ํ•จ๊ป˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. ํ•ด๋‹น ์Šคํ…์—์„œ ๋‚˜๋Š” ์›๋ž˜ working-directory: ./my-agora-states-client/build๋กœ ์ž‘์„ฑํ–ˆ๋Š”๋ฐ, ์˜ค๋ฅ˜ ๋ฉ”์„ธ์ง€๋ฅผ ์ฐพ์•„๋ณด๋‹ˆ ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค๋Š” ๋‚ด์šฉ์ด์—ˆ๋‹ค. ํŽ˜์–ด๋ถ„์€ /build ๋ถ€๋ถ„์„ ์ œ์™ธํ–ˆ์„ ๋•Œ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ–ˆ๋‹ค ํ•˜์…”์„œ ๋™์ผํ•˜๊ฒŒ ์ง„ํ–‰ํ–ˆ๊ณ , ๋‚˜ ์—ญ์‹œ ๊ทธ๋ ‡๊ฒŒ ๋ณ€๊ฒฝํ•˜๊ณ  ๋‚˜๋‹ˆ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜์—ˆ๋‹ค.

  • Why?

    AWS CLI์—์„œ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๋Š” s3 sync ๋ช…๋ น์–ด์˜ ๊ธฐ๋ณธ ํ˜•ํƒœ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

    aws s3 sync /<ORIGIN_PATH> /<TARGET_PATH>
    
    # .yml์—์„œ ์ž‘์„ฑํ•œ ์‹ค์ œ๋กœ ์‹คํ–‰ ๋  ๋ช…๋ น์–ด
    aws s3 sync --region ap-northeast-2 build s3://fe-64-ninefloor-s3 --delete

    ๊ธฐ๋ณธ์ ์œผ๋กœ ์˜ฌ๋ผ๊ฐˆ ํŒŒ์ผ์˜ ๊ฒฝ๋กœ์™€ ๋ฒ„ํ‚ท์˜ ๊ฒฝ๋กœ๋ฅผ ์ž‘์„ฑํ•ด์ฃผ๋Š”๋ฐ, ์œ„์˜ ๋ช…๋ น์–ด๋ฅผ ๋ณด๊ฒŒ ๋˜๋ฉด ์ด๋ฏธ build๋กœ ์˜ฌ๋ผ๊ฐˆ ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋ฅผ ์ž‘์„ฑํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์›Œํ‚น ๋””๋ ‰ํ† ๋ฆฌ์— /build๋ฅผ ์ž‘์„ฑํ•ด์ฃผ๋ฉด ๊ฒฐ๊ณผ์ ์œผ๋กœ๋Š” ./my-agora-states-client/build/build ๊ฒฝ๋กœ์— ๋Œ€ํ•œ ์—…๋กœ๋“œ๋ฅผ ์‹œ๋„ํ–ˆ๋˜ ๊ฒƒ์ด๋‹ค.

Action ์‹คํ–‰ ์™„๋ฃŒ ๋ฐ ๊ฒฐ๊ณผ

์ •์ƒ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๊ฐ€ ์™„๋ฃŒ๋œ ๋ชจ์Šต
React App
my-agora-states-client in React
http://fe-64-ninefloor-s3.s3-website.ap-northeast-2.amazonaws.com/


Uploaded by N2T