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 ์ ์๋ฒฝํ ๋๊ตฌ ์ธํธ์ ์ํํธ์จ์ด ์ํคํ ์ฒ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ํตํด ๊ฐํ๋ ๋น ๋ฅด๊ณ ๋น์ฉ ํจ์จ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ๋์์ด ๋๋ ํ๊ฒฝ์ ์กฐ์ฑํ ์ ์์ต๋๋ค.