MVC 패턴
어플리케이션을 Model - View - Controller 3개의 컴포넌트로 나눠서 개발하는 방식의 디자인 패턴이다.
MVC 패턴을 잘 사용하면 사용자 인터페이스(View)와 비즈니스 로직(Model)이 분리되어 서로 영향받지 않고 개발하기 쉽다.
동작 방식
- Controller가 사용자의 요청을 받으면 Model의 로직을 사용해 나온 결과를 View에 담아 사용자에게 보여준다.
Model
model은 데이터와 정보를 가공하는 컴포넌트로 비즈니스 로직을 처리한다. 이때 model은 view, controller와 의존하지 않아야 한다.
View
view는 사용자 인터페이스 요소를 나타내는 컴포넌트로 model을 이용해 이를 시각적으로 보여주는 역할을 한다. view는 controller를 몰라야 한다. model의 데이터가 변경되면 view로 전달되어 사용자에게 보여진다. view에서 데이터가 변경되면 model을 업데이트 할 수 있다.
Controller
controller는 model과 view 사이의 데이터를 제어한다. 사용자의 요청에 따라 model에 요청해 비즈니스 로직을 수행하고 수행된 결과를 받아 view에 전달한다. controller를 통해 model과 view를 분리할 수 있다.
MVC 패턴을 지키며 개발하기 위해서는 model에서는 데이터, 비즈니스 로직 수행과 관련된 코드만 작성하고 view에서는 사용자 인터페이스와 관련된 코드만 작성한다. controller가 model과 view의 메서드를 적절히 사용해 사용자 요청에 응답해야 한다.
MVC 패턴 장점
MVC 패턴을 사용해 개발하면 각각의 컴포넌트가 자신의 역할만 수행하면 되어 결합도를 낮출 수 있고, 유지보수도 용이해진다.
MVC 패턴 한계
프로그램이 복잡해지면 model과 view의 개수가 많아지고 결국 controller가 커지게 된다. (Massive-View-Controller)
이를 보완하기 위해서 다양한 패턴이 생겼다. (MVVM, MVP, Flux, Redux ..)
MVP
controller 대신 presenter 사용 (view는 presenter를 통해서만 데이터를 전달받는다)
어플리케이션이 복잡해질수록 view와 presenter의 의존성이 높아진다.
MVVM
Model - View - View Model
View Model을 이용해 view와 model 사이의 의존성을 제거했고, view와 view model 사이의 의존성도 없다. 하지만 view model의 설계가 쉽지 않다. (view model이 view에서 받은 사용자 요청을 받아 model에게 데이터 요청, 응답받고 데이터를 가공해 저장 후 view와 data-binding)
Flux
Client-Side 웹 애플리케이션을 만들기 위해 사용하는 디자인 패턴