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 ํจํด์ ์ ๋ฌธ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ๋๋ฆฌ ์ฑํ๋์์ผ๋ฉฐ ๋ค์ํ ํ๋ ์์ํฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ ๊ทน์ ์ผ๋ก ์ง์๋๋ฏ๋ก ๊ฐ๋ฐ์์ ์กฐ์ง ๋ชจ๋์๊ฒ ์ธ๊ธฐ ์๋ ์ ํ์ ๋๋ค.