프레임워크 뷰(Vue)를 사용하면 컨트롤러(Controller)가 뷰(View)를 갱신하는 것이 아니라, 뷰(View)가 모델(Model)의 변화를 감지하고 바로 화면을 갱신해 버린다. 이것도 모델-뷰-컨트롤러(MVC) 구조라고 볼 수 있을까? 구글에 ‘MVC 패턴’ 을 검색하면 수많은 자료들을 찾아볼 수 있다. 그런데 문제는 해석이 저마다 제각각이라는 것이다. 특히 뷰(View)와 모델(Model) 사이의 관계에 대한 해석이 그러하다. 우선 어떤 해석들이 있는지 간략히 살펴보자.
그림(참고1) : 위키백과. 뷰와 모델은 서로 직접 상호작용하지 않는다.
그림(참고2) : 우아한 테크코스 발표자료. 뷰와 모델은 서로 직접 상호작용하지 않는다. 컨트롤러가 모델에게 데이터를 받아 직접 뷰를 통제한다.
그림(참고3) : 생활코딩의 MVC 수업자료. 뷰와 모델은 서로 직접 상호작용하지 않는다. 컨트롤러가 모델에게 데이터를 받아 직접 통제한다.
그림(참고4) : 팀노바의 MVC 설명자료. 뷰는 모델의 변화를 감지하고 직접 값을 읽어간다.
그림 : 페이스북의 Flux 발표자료. 뷰는 컨트롤러와 별개로 모델과 상호작용한다.
이 논의를 통해 질문에 내릴 수 있는 답은 다음과 같다. 프레임워크를 이용해 MVC를 구현할 때 패턴이 구체화되는 형태는 조금씩 다르다(참고8). 만약 프레임워크가 뷰(Vue)라면 컨트롤러의 개입 없이 뷰가 모델의 변화를 감지하고 자동으로 화면을 갱신하여 둘은 직접 상호작용한다고 볼 수 있다. 데이터를 바인딩하는 것이 일반적이기 때문에, 뷰(View)와 데이터를 분리시키려는 행위는 오히려 부자연스럽다(from2). 하지만 CI(Codelgniter)와 같은 프레임워크에서는 모델(Moel)과 뷰(View) 둘은 직접 상호작용하지 않고 컨트롤러가 중간에서 모든 것을 매개해주어야 한다(참고1,2,4,5,6). 따라서 모델-뷰-컨트롤러(Model-View-Controller (MVC)) 패턴에서 모델(Model)과 뷰(View)의 관계는 엄밀하게 정의되지 않는다는 것을 알 수 있다. 뷰는 컨트롤러와만 소통하기도 하고, 뷰가 모델과 직접 소통하기도 한다(참고5,6:위키백과. 이럴수도 저럴수도 있다는 것을 말하고 있다. 하나의 문서에서도 의견이 갈린다)(참고7:배달의민족).
MVC라는 컨셉의 노이즈 속에서 남겨지는 본질은 (1) 모델-뷰-컨트롤러가 분리되어 있고, (2) 컨트롤러가 중앙에서 모델을 통제한다는 것이다. 뷰와 모델이 직접 상호작용해서는 안된다는 “엄밀한 MVC” 원칙은 프론트엔드 프레임워크가 편의를 위해 양방향 데이터 바인딩을 지원하면서 무너졌기 때문이다.
어떤 그림에서는 사람이 뷰와 상호작용하고 어떤 그림에서는 사람이 컨트롤러와 상호작용하는데 도대체 뭐야 망할!
parse me : 언젠가 이 글에 쓰이면 좋을 것 같은 재료들.