MVVM(Model-View-ViewModel)์ ํนํ ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋งฅ๋ฝ์์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค(UI) ๊ฐ๋ฐ ์ ๋ฌธ์ ๋ถ๋ฆฌ๋ฅผ ๋จ์ํํ๊ณ ํฅ์์ํค๊ธฐ ์ํด ๋์ ๋ ์ํํธ์จ์ด ์ํคํ ์ฒ ํจํด์ ๋๋ค. ์ด๋ MVC(Model-View-Controller) ํจํด์ ํ์ฅ์ผ๋ก, ๋ณต์กํ UI ์๋๋ฆฌ์ค๋ฅผ ์ฒ๋ฆฌํ ๋ MVC๊ฐ ์ง๋ฉดํ๋ ์ผ๋ถ ์ ํ ์ฌํญ์ ํด๊ฒฐํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค. MVVM์ ๊ฐ๋ฐ์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณต์ก์ฑ์ ๊ด๋ฆฌํ๊ณ ์ ์ง ๊ด๋ฆฌ๋ฅผ ๋จ์ํํ๋ ๋ฐ ๋์์ด ๋๋ ๋์ฑ ๋ช ํํ๊ณ ๋ชจ๋์์ด๋ฉฐ ํ ์คํธ ๊ฐ๋ฅํ ์ํคํ ์ฒ๋ฅผ ์ด์งํฉ๋๋ค.
MVVM์๋ ์ธ ๊ฐ์ง ๊ธฐ๋ณธ ๊ตฌ์ฑ ์์๊ฐ ์์ต๋๋ค.
- ๋ชจ๋ธ: ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์ดํฐ์ ๋น์ฆ๋์ค ๋ก์ง์ ๋ํ๋ ๋๋ค. ๋ชจ๋ธ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ์ ํ์ํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋๋ ๋ฐ์ดํฐ ์กฐ์์ ํ์ํ ์ ํจ์ฑ ๊ฒ์ฌ ๋ ผ๋ฆฌ๋ฅผ ์ ์ฅํฉ๋๋ค. ์ด ๊ตฌ์ฑ ์์๋ UI์ ๋ ๋ฆฝ์ ์ด๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค, RESTful API ๋๋ ๊ธฐํ ๋คํธ์ํฌ ์๋น์ค์ ๊ฐ์ ์ธ๋ถ ์์คํ ๊ณผ ์ํธ ์์ฉํฉ๋๋ค.
- ๋ณด๊ธฐ: ์ ํ๋ฆฌ์ผ์ด์ ์ ์๊ฐ์ ํํ๊ณผ ์ฌ์ฉ์ ์ํธ ์์ฉ ๊ณ์ธต์ ๋ํ๋ ๋๋ค. Model์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉ์์๊ฒ ํ์ํ๊ณ , ์ฌ์ฉ์ ์ ๋ ฅ์ ๋ฐ๊ณ , ViewModel๊ณผ ํต์ ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํฉ๋๋ค. ๋ณด๊ธฐ๋ ์ผ๋ฐ์ ์ผ๋ก ๋ฐ์์ด ๋น ๋ฅด๊ณ ๋งค๋ ฅ์ ์ธ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ ๋ฒํผ, ํ ์คํธ ํ๋ ๋ฐ ๋ ์ด๋ธ๊ณผ ๊ฐ์ ์์๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
- ViewModel: View์ Model ์ฌ์ด์ ์ค๊ฐ์ ์ญํ ์ ํฉ๋๋ค. ๋ทฐ์ ํ์ํ ๋ฐ์ดํฐ์ ๋ช ๋ น์ ๋ ธ์ถํ๊ณ , ์ฌ์ฉ์ ์์ ์ ์๋ตํ๊ณ , ํ์์ ๋ฐ๋ผ ๋ชจ๋ธ์ ์ ๋ฐ์ดํธํ๋ ์ผ์ ๋ด๋นํฉ๋๋ค. ViewModel์ ๋ชจ๋ธ์ ๋ฐ์ดํฐ์ ์์ ์ ๋ณต์ก์ฑ์ ์ถ์ํํ์ฌ View๊ฐ ์์ ํ ์ ์๋ ๋ ๋จ์ํ๊ณ ์ง์ค์ ์ธ ๊ตฌ์กฐ๋ฅผ ์ ์ํฉ๋๋ค. Controller๊ฐ View๋ฅผ ์ง์ ์กฐ์ํ ์ ์๋ MVC ํจํด๊ณผ ๋ฌ๋ฆฌ ViewModel์ ํน์ View ์์์ ๋ํ ์ง์ ์ ์ธ ์ฐธ์กฐ๋ ์ข ์์ฑ์ด ์์ผ๋ฏ๋ก ์ ์ฐ์ฑ๊ณผ ์ฌ์ฌ์ฉ์ฑ์ด ํฅ์๋ฉ๋๋ค.
MVVM์ ์ค์ํ ์ธก๋ฉด ์ค ํ๋๋ View์ ViewModel ๊ฐ์ ์๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ์ค์ ํ๋ ๊ธฐ๋ฅ์ ๋๋ค. ์ด ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ ์ฐ๊ฒฐ์ ViewModel์ ๋ณ๊ฒฝ ์ฌํญ์ด View์ ์๋์ผ๋ก ๋ฐ์๋๊ณ ๊ทธ ๋ฐ๋์ ๊ฒฝ์ฐ๋ ๊ฐ๋ฅํ๋๋ก ๋์์ค๋๋ค. ์ด๋ฅผ ํตํด ViewModel์ UI ๊ตฌ์ฑ ์์์ ์ง์ ์ํธ ์์ฉํ์ง ์๊ณ ๋ View์ ๋ฐ์ดํฐ๋ฅผ ๋๊ธฐํํ ์ ์์ผ๋ฏ๋ก View์ ViewModel ๊ฐ์ ๊ฒฐํฉ์ด ํฌ๊ฒ ์ค์ด๋ญ๋๋ค.
MVVM ํจํด์ ๊ตฌํํ๋ฉด ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ํฐ ์ด์ ์ ์ป์ ์ ์์ต๋๋ค.
- ์ ์ง ๊ด๋ฆฌ์ฑ: MVVM์ ์ฐ๋ ค ์ฌํญ์ ๋ถ๋ฆฌํ๊ณ ๊ตฌ์ฑ ์์ ๊ฐ์ ์ข ์์ฑ์ ์ค์์ผ๋ก์จ ๋ณด๋ค ๋ชจ๋ํ๋๊ณ ์ดํดํ๊ธฐ ์ฌ์ด ์ฝ๋๋ฒ ์ด์ค๋ฅผ ํ์ฉํ๋ฏ๋ก ์ฝ๋ ์ ์ง ๊ด๋ฆฌ๊ฐ ๋ ์ฌ์์ง๊ณ ์๋ก์ด ํ ๊ตฌ์ฑ์์ด ๋ ๋น ๋ฅด๊ฒ ์ฑํํ ์ ์์ต๋๋ค.
- ํ ์คํธ ๊ฐ๋ฅ์ฑ: View์ ViewModel์ ๋ถ๋ฆฌํ๋ฉด View์ ๋ํ ์ง์ ์ ์ธ ์ฐธ์กฐ๊ฐ ํฌํจ๋์ด ์์ง ์์ผ๋ฏ๋ก ViewModel์ ๋ณด๋ค ๊ฐ๋จํ ๋จ์ ํ ์คํธ๊ฐ ๊ฐ๋ฅํฉ๋๋ค. ์ด๋ ๋์ฑ ๊ฐ๋ ฅํ๊ณ ์ค๋ฅ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด์งํฉ๋๋ค.
- ์ฌ์ฌ์ฉ์ฑ: ViewModel์ ํ๋ซํผ๋ณ ์ข ์์ฑ์ด ์์ผ๋ฏ๋ก ์ฌ๋ฌ ๋ทฐ ๋๋ ์ฌ์ง์ด ๋ค๋ฅธ ํ๋ซํผ์์๋ ์ฌ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ ์๊ฐ์ด ๋จ์ถ๋๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์ ๊ฑธ์ณ ์ผ๊ด์ฑ์ด ํฅ์๋ ์ ์์ต๋๋ค.
- ํ์ฅ์ฑ: MVVM์ ๋ชจ๋์ ์ํคํ ์ฒ๋ ๊ธฐ์กด ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์กฐ ๋ฐ ๊ธฐ๋ฅ์ ๋ํ ์ค๋จ์ ์ต์ํํ๋ฉด์ ์ ํ๋ฆฌ์ผ์ด์ ์๊ตฌ ์ฌํญ์ ํฅํ ์ฑ์ฅ๊ณผ ๋ณํ๋ฅผ ์์ฉํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
Android์ Jetpack ๋ฐ iOS์ SwiftUI ์ ๊ฐ์ ์ฌ๋ฌ ์ธ๊ธฐ ์๋ ๋ชจ๋ฐ์ผ ์ฑ ํ๋ ์์ํฌ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ MVVM ์ํคํ ์ฒ๋ฅผ ์์ฉํ๊ณ ๊ฐ๋ฐ์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์์ MVVM ํจํด์ ํจ์จ์ ์ผ๋ก ๊ตฌํํ ์ ์๋๋ก ๊ธฐ๋ณธ ์ง์์ ์ ๊ณตํฉ๋๋ค.
AppMaster ์ no-code ํ๋ซํผ์ MVVM ๋ฐ ๊ธฐํ ์ํคํ ์ฒ ํจํด์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์บก์ํํ์ฌ ๋ชจ๋ฐ์ผ, ์น ๋ฐ ๋ฐฑ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ์ํํ๊ณ ๋น ๋ฅธ ๊ฐ๋ฐ ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค. ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง, ๋น์ฆ๋์ค ๋ก์ง ์ค๊ณ ๋ฐ UI ์์ฑ์ ์ํ ๋น์ฌ์ ์๊ฐ์ ๋๊ตฌ๋ฅผ ํตํด ๊ณ ๊ฐ์ MVVM ์์น์ ์ค์ํ๊ณ ๊ณ ๋ถํ ๋ฐ ์ํฐํ๋ผ์ด์ฆ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์ฒ๋ฆฌํ๋๋ก ํ์ฅํ ์ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค๊ณ ๋ฐ ๊ตฌ์ถํ ์ ์์ต๋๋ค. AppMaster ์ฌ์ฉํ๋ฉด ์ฑ๋ฅ, ์ ์ง ๊ด๋ฆฌ์ฑ ๋๋ ํ์ฅ์ฑ์ ์ ํ์ํค์ง ์๊ณ ์๋ฒ ๋ฐฑ์๋, ์น ์ ํ๋ฆฌ์ผ์ด์ , Android ๋ฐ iOS์ฉ ๊ธฐ๋ณธ ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ ์ด ํฌํจ๋ ํฌ๊ด์ ์ธ ์ํํธ์จ์ด ์๋ฃจ์ ์ ์์ฑํ๊ณ ๋ฐฐํฌํ ์ ์์ต๋๋ค.