MCV 패턴이란?
MVC(모델-뷰-컨트롤러)는 사용자 인터페이스, 데이터 및 논리 제어를 구현하는데 널리 사용되는 소프트웨어 디자인 패턴입니다. 소프트웨어의 비즈니스 로직과 화면을 구분하는데 중점을 두고 있습니다. 이러한 "관심사 분리"는 더나은 업무의 분리와 향상된 관리를 제공합니다.
출처: https://developer.mozilla.org/ko/docs/Glossary/MVC

MVC 패턴은 비즈니스 로직을 분리해서 각 컴포넌트의 역할에 맡는 업무를 담당하는 것을 의미합니다.
Model, View, Controller
Model
- 데이터와 관련된 책임을 담당하는 레이어
- 주로 상태 변화를 처리한다.
- 데이터와 행동을 갖는 객체이다.
View
- 사용자에게 보일 사용자 인터페이스를 담당하는 레이어
- 웹에서는 웹 브라우저로 랜더링 되는 페이지가 해당된다.
- 데이터, 로직은 없어야한다.
Controller
- Model과 View를 연결해주는 레이어
- 일종의 중개자이며 컨트롤러를 사용자의 요청에 맞는 서비스를 실행하게 된다.
- 처리한 모델의 값을 뷰에 전달해서 반환한다.
- 사용자의 요청(웹 브라우저로 들어오는 요청)을 가장 먼저 마주한다.
📌 컨트롤러를 제외한 레이어(모델, 뷰)는 다른 레이어를 알아서는 안된다.
MVC 실행 순서(Spring)
- DispatcherServlet이 요청을 수신
- DispatcherServlet은 Handler Mappin에 어느 Controller를 사용할 것인지 확인
- DispatcherServlet은 요청을 해당 Controller에 전송하고 서비스 요청의 처리 결과를 리턴 받음
- ModelAndView Object에 수행결과가 포함되어 DistpatcherServelt에 리턴
- ModelAndView는 실제 JSP정보를 가지고 있지 않으며 ViewResolver가 논리적 이름을 실제 JSP 이름으로 변환
- View는 결과정보를 화면에 표현
MVC의 장단점
MVC의 장점
- 기능별로 코드를 분리하여 하나의 파일에 여러 기능을 하는 코드가 모이는 것을 방지하여 가독성과 유지보수 등에 장점이 있다.
- 각 구성요소들을 독립시켜 개발을 진행할 수 있어 개발에 있어 효율성과 확장성이 증가한다.
- 개발 후에도 쉽게 확장이 가능하며 유지보수가 편리하다.
MVC의 한계
Model과 View는 서로의 정보를 갖고 있지 않은 독립적인 상태라고 하지만 Controller를 통해 소통을 이루기에 의존성이 완전히 분리될 수 없다. 그래서 복잡한 대규모 프로그램의 경우 다수의 View와 Model이 Controller를 통해 연결되기에 불필요하게 Controller가 커지는 현상이 발생하기도 한다.
이러한 현상을 Massive-View-Controller 현상이라고 하며 이를 보완하기 위해 MVP, MVVM, Flus, Redux 등의 다양한 패턴이 생겨났다.

Reference