디자인 패턴은 소스코드나 개발에 필요한 리소스를 어떤 방식으로 구조를 만들고 사용할 지를 말하는 것이다. 개발을 계속 진행하게 되면 자연스럽게 규모가 커지는데 유지보수의 불편함을 느끼게 된다. 이 불편함을 최소화 하기 위해서 디자인 패턴을 적용하는 것이다. 디자인 패턴은 많은 종류가 있는데 이는 개발자들이 자신의 프로젝트의 구조를 어떻게 짜냐에 따라 달라지기 때문이다.
오래전 개발자들은 이러한 패턴들이 없었을 때에 마음대로 프로그램을 구성하여 개발을 했지만 유지보수나 협업을 하는 과정에서 큰 불편함을 겪었고, 이를 해결하기 위해 수많은 패턴들이 시도되고, 공유되었고, 논문들도 발표되었다. 그 패턴 중 하나가 MVC다.
Model은 data와 애플리케이션이 무엇을 할 것인지를 정의하는 부분으로 내부 비즈니스 로직을 처리하기 위한 역할을 한다. 즉, 모델은 컨트롤러가 호출을 하면 DB와 연동하여 사용자의 입출력 데이터를 다루는 일과 같은 데이터와 관련된 비즈니스 로직을 처리한다.
Model은 두 가지 규칙이 있는데, 첫 번째는 사용자가 받아야 하는 모든 데이터를 가지고 있어야 한다. 둘째는 View나 Controller에 대해서 어떤 정보도 알지 못해야 한다.
View는 사용자에게 보여주는 화면에 해당한다(html, css)사용자와 상호작용을 하면서 Controller에게 받은 모델의 결과값을 사용자에게 화면으로 출력하는 일을 한다.
View역시 두 가지 규칙이 있는데 첫째는 컨트롤러로 부터 전달받은 Model의 정보를 따로 저장할 수 없다. 둘째는 Model이나 Controller에 대해 어떤 정보도 알지 못해야 한다.
1. 사용자의 Input들은 Controller를 통해 들어온다.
2. 사용자로부터 받은 Input을 Model에 전달하여 Model을 업데이트한다.
3. Model은 Controller로부터 받은 요청에 응답한다.
4. Controller는 Model로부터 받은 Data를 View에 전달한다.
5. Controller로부터 받은 Data를 UI에 넣어 사용자에게 출력한다.
MVC의 핵심은 각 구성요소들을 독립시켜 맡은 역할에만 집중시켜 개발의 효율성을 높이고 독립된만큼 유지보수와 확장성도 용이하다.
비즈니스 처리 로직(Model)과 인터페이스 요소(View)를 분리시킴으로써 로직 재사용이 가능하다.
MVC패턴은 단순하고 직관적이라 하나의 파일에 코드가 모이는 걸 방지하여 가독성과 재사용성을 증가시킨다.
View가 업데이트될 때마다 Model도 업데이트되므로 의존성이 강하다
Model과 View의 의존성을 완전히 분리시킬 수 없다.