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

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

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

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

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

๋˜ํ•œ AppMaster ํ”Œ๋žซํผ์€ ์„œ๋ฒ„ endpoints ์šฉ Swagger(OpenAPI) ๋ฌธ์„œ ๋ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์Šคํฌ๋ฆฝํŠธ์™€ ๊ฐ™์€ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ์ฃผ๊ธฐ์˜ ๋‹ค์–‘ํ•œ ์ธก๋ฉด์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋‚ด์žฅ ๋„๊ตฌ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋„๊ตฌ๋Š” ๊ฐœ๋ฐœ์ž ๊ฐ„์˜ ํ˜‘์—…์„ ์ด‰์ง„ํ•˜์—ฌ ํŒ€ ๋‚ด์—์„œ ์›ํ™œํ•˜๊ณ  ํšจ์œจ์ ์ธ ์ •๋ณด ๊ณต์œ  ๋ฐ ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ๋ฅผ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

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

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

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