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

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

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

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

์ผ๋‹จ ๋ฐฐํฌ๋˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ Prometheus, Grafana ๋˜๋Š” New Relic๊ณผ ๊ฐ™์€ ๋„๊ตฌ๊ฐ€ ํ•„์ˆ˜ ์„ฑ๋Šฅ ์ง€ํ‘œ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ , ์ด์ƒ ์ง•ํ›„๋ฅผ ๊ฐ์ง€ํ•˜๊ณ , ๊ท€์ค‘ํ•œ ํ†ต์ฐฐ๋ ฅ์„ ์ œ๊ณตํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์•ˆ์ •์„ฑ, ์œ ์šฉ์„ฑ ๋ฐ ๊ฐ€์šฉ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ํ”ผ๋“œ๋ฐฑ ๋‹จ๊ณ„์— ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค. ์ด ์ •๋ณด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ ํŒ€์€ ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜ ๊ฒฐ์ •์„ ๋‚ด๋ฆฌ๊ณ  ๊ณ ๊ฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ฉฐ ํ–ฅํ›„ ๊ฐœ์„  ์‚ฌํ•ญ์˜ ์šฐ์„  ์ˆœ์œ„๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

CI/CD ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌํ˜„์˜ ์˜ˆ๋กœ๋Š” ๋ฐฑ์—”๋“œ, ์›น ๋ฐ ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ•๋ ฅํ•œ no-code ํ”Œ๋žซํผ์ธ AppMaster ํ”Œ๋žซํผ์ด ์žˆ์Šต๋‹ˆ๋‹ค. AppMaster ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง, REST API ๋ฐ WSS endpoints ์‹œ๊ฐ์ ์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์—ฌ ์›ํ™œํ•˜๊ณ  ํšจ์œจ์ ์ธ CI/CD ํŒŒ์ดํ”„๋ผ์ธ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด๋ฅผ ํ†ตํ•ด ๊ณ ๊ฐ์€ ๊ฐ„๋‹จํ•œ drag-and-drop ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ˜์‘ํ˜• UI๋ฅผ ๋””์ž์ธํ•˜๊ณ , ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง์„ ๊ณต์‹ํ™”ํ•˜๊ณ , ํ”„๋กœ๋•์…˜๊ธ‰ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•œ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ AppMaster ์ƒ์„ฑ๋œ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์ปดํŒŒ์ผ, ํ…Œ์ŠคํŠธ, ํŒจํ‚ค์ง•ํ•˜๊ณ  Docker ์ปจํ…Œ์ด๋„ˆ์— ๋ฐฐํฌํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฐœ๋ฐœ, ์ œ๊ณต ๋ฐ ์œ ์ง€ ๊ด€๋ฆฌ๋ฅผ ํฌ๊ฒŒ ๊ฐ€์†ํ™”ํ•ฉ๋‹ˆ๋‹ค.

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