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

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

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

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

๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์€ ๋ทฐ์™€ ViewModel ๊ฐ„์˜ ์ž๋™ ๋™๊ธฐํ™”๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋ฏ€๋กœ MVVM ํŒจํ„ด์˜ ์ค‘์š”ํ•œ ์ธก๋ฉด์ž…๋‹ˆ๋‹ค. ViewModel์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ๋ทฐ๊ฐ€ ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜๊ณ  ๊ทธ ๋ฐ˜๋Œ€์˜ ๊ฒฝ์šฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ์ด ์–‘๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์€ UI์™€ ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ์˜ ๋™๊ธฐํ™”๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ˆ˜๋™ ๊ฐœ์ž…์ด๋‚˜ ๊ด‘๋ฒ”์œ„ํ•œ ์ฝ”๋“œ ๋…ผ๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋”์šฑ ํšจ์œจ์ ์ด๊ณ  ๊ฐ„์†Œํ™”๋ฉ๋‹ˆ๋‹ค.

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

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

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

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