MVVM(Model-View-ViewModel)์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค(UI), ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ๋ฐ ๊ธฐ๋Šฅ ๋…ผ๋ฆฌ ๊ฐ„์˜ ๋ฌธ์ œ๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ถ„๋ฆฌํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ์ด ํŒจํ„ด์€ ์œ ์ง€ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“ˆ์‹ ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•˜์—ฌ ๋ณต์žกํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฐœ๋ฐœ, ํ…Œ์ŠคํŠธ ๋ฐ ์œ ์ง€ ๊ด€๋ฆฌ๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. MVVM์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ํšจ์œจ์ ์ธ ๋ฆฌ์†Œ์Šค ํ™œ์šฉ ๋ฐ ํ™•์žฅ์„ฑ์„ ๊ฐ–์ถ˜ ๊ณ ์„ฑ๋Šฅ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“œ๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ๋Œ€๊ทœ๋ชจ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธ์— ํŠนํžˆ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

MVVM ํŒจํ„ด์€ Model, View ๋ฐ ViewModel์˜ ์„ธ ๊ฐ€์ง€ ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋ธ์€ ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰ ๋ฐ ์ €์žฅ, ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๊ทœ์น™ ์ ์šฉ, ๊ด€๋ จ ๋ฐ์ดํ„ฐ ์กฐ์ž‘ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌํ˜„์„ ๋‹ด๋‹นํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐ์ดํ„ฐ ๋ฐ ๊ด€๋ จ ๋น„์ฆˆ๋‹ˆ์Šค ๋…ผ๋ฆฌ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๋ทฐ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ๋ชจ๋ธ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œ์‹œํ•˜๊ณ  ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ViewModel์€ ๋ชจ๋ธ๊ณผ ๋ทฐ ์‚ฌ์ด์˜ ์ค‘๊ฐœ์ž ์—ญํ• ์„ ํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ๊ณผ ํ†ต์‹  ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

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

AppMasterno-code ํ”Œ๋žซํผ์€ MVVM ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์„ ํ™œ์šฉํ•˜์—ฌ ๊ฐ•๋ ฅํ•˜๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๋ฐฑ์—”๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹œ๊ฐ์ ์œผ๋กœ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ํšจ์œจ์ ์ธ ๋„๊ตฌ ์„ธํŠธ๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. AppMaster ์˜ ์‹œ๊ฐ์  ๋ฐ์ดํ„ฐ ๋ชจ๋ธ ๋””์ž์ด๋„ˆ๋ฅผ ํ™œ์šฉํ•˜๋ฉด ์‚ฌ์šฉ์ž๋Š” MVVM ํŒจํ„ด์˜ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ์ค€์ˆ˜ํ•˜๋ฉด์„œ ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๊ณผ ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•˜๊ณ  ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ํ”Œ๋žซํผ์˜ ๋น„์ฆˆ๋‹ˆ์Šค ํ”„๋กœ์„ธ์Šค(BP) ๋””์ž์ด๋„ˆ๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž๋Š” ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‹œ๊ฐ์ ์œผ๋กœ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ViewModel์€ ๋ชจ๋ธ๊ณผ ๋ทฐ ์‚ฌ์ด์˜ ํ•„์ˆ˜ ์ค‘์žฌ์ž์ด๋ฏ€๋กœ AppMaster ์˜ ๋ฐฑ์—”๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ RESTful API์™€ WebSocket endpoints ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ๊ตฌ์„ฑ ์š”์†Œ ๊ฐ„์˜ ์›ํ™œํ•œ ํ†ต์‹ ์„ ์ด‰์ง„ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ ‘๊ทผ ๋ฐฉ์‹์€ MVVM ํŒจํ„ด์˜ ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ ์›์น™์„ ์ค€์ˆ˜ํ•˜๋ฏ€๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ณด๋‹ค ์œ ์ง€ ๊ด€๋ฆฌํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

AppMaster ์˜ ๋ฐฑ์—”๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์„ฑ๋Šฅ๊ณผ ํ™•์žฅ์„ฑ์œผ๋กœ ์œ ๋ช…ํ•œ Go(golang) ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ AppMaster ์˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ Vue3 JavaScript ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ํ™œ์šฉํ•˜๊ณ , ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ Android์šฉ Kotlin ๋ฐ Jetpack Compose ๋˜๋Š” iOS์šฉ SwiftUI ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ตœ์ฒจ๋‹จ ๊ธฐ์ˆ ์€ MVVM ํŒจํ„ด์ด ์ œ๊ณตํ•˜๋Š” ์ด์ ์„ ๋ณด์™„ํ•˜๊ณ  ํ–ฅ์ƒํ•˜๊ธฐ ์œ„ํ•ด ํŠน๋ณ„ํžˆ ์„ ํƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

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

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

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