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

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

์ปจํ…Œ์ด๋„ˆํ™”๋Š” ์ปจํ…Œ์ด๋„ˆ๋ผ๊ณ  ํ•˜๋Š” ๊ฒฝ๋Ÿ‰์˜ ์ž์ฒด ํฌํ•จ ๋‹จ์œ„ ๋‚ด์— ์ฝ”๋“œ์™€ ํ•ด๋‹น ์ข…์†์„ฑ์„ ์บก์Аํ™”ํ•˜์—ฌ CI/CD ํŒŒ์ดํ”„๋ผ์ธ์„ ๋ณด์™„ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ปจํ…Œ์ด๋„ˆ๋Š” ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ์‹คํ–‰๋˜๋ฏ€๋กœ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๋™์‹œ์— ๊ฐœ๋ฐœ ๋ฐ ๋ฐฐํฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹จ์ˆœํ™”ํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ๊ฐœ๋ฐœ์ž๋Š” ์‹œ์Šคํ…œ๋ณ„ ๊ตฌ์„ฑ์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•  ํ•„์š” ์—†์ด ์ฝ”๋“œ ์ž‘์„ฑ์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. CI/CD ํŒŒ์ดํ”„๋ผ์ธ์— ํ†ตํ•ฉ๋˜๋ฉด ์ปจํ…Œ์ด๋„ˆํ™”๋Š” ์ „์ฒด ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ์ˆ˜๋ช…์ฃผ๊ธฐ(SDLC)๋ฅผ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

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

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

'๊ฒŒ์‹œ' ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด AppMaster ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์‹ ์†ํ•˜๊ฒŒ ์ƒ์„ฑํ•˜๊ณ , ์ปดํŒŒ์ผํ•˜๊ณ , ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ํด๋ผ์šฐ๋“œ์— ๋ฐฐํฌํ•˜๊ธฐ ์ „์— Docker ์ปจํ…Œ์ด๋„ˆ(๋ฐฑ์—”๋“œ๋งŒ ํ•ด๋‹น)๋กœ ํŒจํ‚ค์ง•ํ•ฉ๋‹ˆ๋‹ค. AppMaster ์—์„œ ์ƒ์„ฑ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋ฐฑ์—”๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์šฉ Go(golang), ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์šฉ Vue3 ํ”„๋ ˆ์ž„์›Œํฌ ๋ฐ JS/TS, ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ Android์šฉ Kotlin ๋ฐ Jetpack Compose ๋ฐ iOS์šฉ SwiftUI ์™€ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค. ํ•œํŽธ, ์„œ๋ฒ„ ์ค‘์‹ฌ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์•ฑ ์Šคํ† ์–ด์— ์ƒˆ ๋ฒ„์ „์„ ์ œ์ถœํ•˜์ง€ ์•Š๊ณ ๋„ ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ UI, ๋กœ์ง ๋ฐ API ํ‚ค๋ฅผ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

AppMaster ์˜ ์ž๋™ํ™”๋œ ์†Œ์Šค ์ฝ”๋“œ ์ƒ์„ฑ, ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ ๋ฐ ์ปจํ…Œ์ด๋„ˆํ™” ๋•๋ถ„์— ๊ธฐ์—…์€ ์„ฑ๋Šฅ์ด๋‚˜ ํ’ˆ์งˆ์„ ์ €ํ•˜์‹œํ‚ค์ง€ ์•Š๊ณ  ์˜จํ”„๋ ˆ๋ฏธ์Šค ๋˜๋Š” ํด๋ผ์šฐ๋“œ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ ํ”Œ๋žซํผ์€ ์„œ๋ฒ„ endpoints ์šฉ Swagger(๊ฐœ๋ฐฉํ˜• API) ๋ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์Šคํฌ๋ฆฝํŠธ์™€ ๊ฐ™์€ ํ•„์ˆ˜ ๋ฌธ์„œ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜์—ฌ ์ผ๊ด€๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

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

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