컴퓨터로 작업하는 것들이 늘어나게 되면서, 보급양이 점점 늘어나게 되었고, 일반인 관점에서도 컴퓨터 프로그램에 쉽게 접근하도록 GUI 가 강조되었다. 이때, 사람이 정보를 인식하는 방법과 컴퓨터가 정보를 인식하는 방법이 서로 다르다는 점에서 연구가 진행되었고, 이 두 부분을 서로 분리하여 정의한 것이 오늘 날 MVC 패턴의 시초가 되었다.
Model, View, Controller 세 가지의 역할로 구성된 소프트웨어 디자인 패턴이다. 각각의 역할은 다음과 같다.
Model: 애플리케이션에서 정보 및 데이터를 관리하는 역할을 담당한다. 데이터 조회 요청이나 생성, 가공 하는 비즈니스 로직 작업 전반이 Model 에서 이루어진다.
View: 사용자가 보게 될 결과 화면을 렌더링 하는 역할을 담당한다. 사용자 눈에 보이는 프레젠테이션 로직 작업 전반이 View 에서 이루어진다.
Controller: Model 과 View 의 중간다리 역할로, 사용자 요구에 맞추어 Model 로 부터 데이터를 얻어오거나, View 로부터 받은 이벤트 혹은 입력 데이터를 Model 에 건네주는 역할을 한다. 프로그램 운영에 본질적으로 필요한 함수 호출이 이루어지는 어플리케이션 로직 전반의 작업이 Controller 에서 이루어진다.
MVC 패턴을 기반 응용 패턴으로, View와 Model 사이에서 ViewModel을 두어, View와 Model의 결합도를 낮춘 패턴이다.
MVVM 패턴은 Model, View, ViewModel 세 가지의 역할로 구성된 소프트웨어 디자인 패턴이다. 각각의 역할은 다음과 같다.
Model: 애플리케이션에서 정보 및 데이터를 관리하는 역할을 담당한다. 데이터 조회 요청이나 생성, 가공 하는 비즈니스 로직 작업 전반이 Model 에서 이루어진다.
View: 사용자가 보게 될 결과 화면을 렌더링 하는 역할을 담당한다. 사용자 눈에 보이는 프레젠테이션 로직 작업 전반이 View 에서 이루어진다.
ViewModel: View를 표현하기 위해 만든 View를 위한 Model 로써, 기존 Controller의 요청을 옵저버 패턴을 활용하여 간접적으로 View에서 ViewModel로 보내도록 한다. ViewModel은 Model을 기반으로 결과물을 도출한다. View는 ViewModel 의 결과물만 참조하여, 렌더링하게 된다.
View 와 Model 의 결합도가 낮아져, MVC 대비 테스트나 유지보수가 용이하다.
병렬 작업이 가능해진다. UI 디자인 작업물이 아직 나오지 않더라도, ViewModel 과 Model 에 대한 작업을 먼저 시도하는 것이 가능하다. 즉 디자이너와 개발자간 협업이 자유로워진다.
객체 지향 외에도, 옵저버 패턴이나 service, dao 등의 역할 등의 선행 지식이 필요하다.
MVC 패턴 대비 더 많은 파일과 코드를 필요로 한다.
참고
Business Logic vs. Application Logic: The Key Differences You Need to Know | APIsec
MVC 창시자가 말하는, MVC의 본질
MVVM 패턴