Model은 일반적인 JavaScript의 객체(배열, ...)이며 데이터를 나타낸다. 원격지에서 AJAX를 통해서 가져오기도 한다.
ViewModel(이하 VM)은 자바스크립트로 작성된 프로그래밍 영역이다. 이 VM은 Model과 View를 연결하는데 Model의 데이터가 변경되면 View에 전달해서 화면을 갱신하게 하고 사용자가 화면에서 값을 변경하면 다시 그 값을 Model에 업데이트시켜준다.
그동안 힘들게 [데이터 변경 <--> 화면 반영]을 JavaScript로 처리해 왔었는데 MVVM 기반의 Vue를 적용하면 그냥 해준다. 왜냐고? 프레임워크니까.. 우리는 비즈니스 로직만 신경 쓰면 된다. 나머지는 프레임워크의 역할이다.
사실 Vue는 정확히 MVVM은 아니긴 하다.
기껏 MVVM이라고 해놓고 이건 또 무슨 소리?
Vue 2.X에서는 공홈에 분명히 MVVM임을 밝혔지만 Vue 3.x에서는 관련 내용이 싹 없어졌다. 대신 전통적인 MVVM 패턴에서 영감을 얻어서 제작되었다고 한다.
개발 초창기에는 Model, View, ViewMode 간의 연관관계에 집중해서 개발이 진행되었지만 Vue 자체가 성숙하면서 다양한 기능들을 넣다보니 MVVM과 살짝 결을 달리하는 내용들이 생기면서 발생한 일이다.
예를 들면 MVVM에서는 객체의 변경을 모니터링 하기 위해 Model이 observable 해야 하지만 Vue3에서는 Proxy를 이용한 반응성을 이용한다. MVVM에서는 View, Model, ViewModel이 명확히 구분되어야 하지만 Vue에서는 View와 ViewModel이 살짝 겹치는 형태(v-for, v-if 등)로 작성된다.
따라서 그냥 "MVVM이 아니다" 라고 말하기 보다는 "MVVM 기반으로 작성되었으며 이를 넘어 좀 더 유연하게 다른 패턴들도 적용되었다" 정도로 정리하는 것이 어떨까?
Vue.js의 시장 점유율?
자고 나면 쏟아지는 다양한 기술들 중에 원픽을 해야 한다면 과연 우리는 Vue.js를 선택하는 것이 바람직할까?