MVC 패턴이란 Model, View, Controller의 약자이다.

모델은 어떤 동작을 수행하는 코드를 말하며, 표시 형식에 의존하지 않는다.
모델의 상태에 변화가 있을 때 컨트롤러와 뷰에 이것을 통보한다. 어떤 MVC 패턴에서는 통보가 아닌 뷰나 컨트롤러가 직접 모델의 상태를 읽어오기도 한다.
뷰는 앱의 데이터를 보여주는 방식을 정의한다.
-> 사용자가 볼 결과물을 생성하기 위해 모델로부터 정보를 얻어온다.
MVC에서 모델은 여러 개의 뷰를 가질 수 있다.
MVC의 뷰는 여러 개의 컨트롤러를 가지고 있다. 사용자는 이 컨트롤러를 통해 모델의 상태를 바꾼다.
컨트롤러는 모델에 명령을 보내 모델의 상태를 변경할 수 있다.
컨트롤러가 관련된 뷰에 명령을 보내 모델의 표시 방법을 바꿀 수 있다.
쉽게 말해서 사용자가 컨트롤러를 조작하면 컨트롤러는 모델을 통해 데이터를 가져오고 그 데이터를 바탕으로 뷰를 통해 시각적으로 사용자에게 전달한다. 이러한 패턴을 사용한다면 비지니스 로직과 UI 로직을 분리해서 유지보수를 독립적으로 수행할 수 있게 된다.
이러한 MVC 패턴에도 두 가지 종류가 있다.

Model 1은 JSP에서 모든 로직과 출력을 처리한다.
즉, JSP 페이지에 비지니스 로직을 처리하기 위한 코드와 웹브라우저에 결과를 출력하는 코드가 섞여 있다.

Model 2는 모든 요청을 서블릿이 받아 처리하고 JSP 페이지로 포워드한다.
이때 서블릿은 클라이언트(브라우저) 요청을 구분하여 처리한다. (View로 보여줄 것인지 Model로 보낼 것인지를 판단하여 전송)
Model 1의 경우에는 빠르고 쉽게 개발이 가능하지만, JSP 파일이 너무 커지고 컨트롤러와 뷰가 같이 존재하기 때문에 유지보수에 어렵다.
Model 2의 경우에는 디자이너와 개발자의 분업이 가능하고, 유지보수 및 확장이 쉽다.
하지만 설계가 어렵고 개발 난이도가 높다.