MVC란?
- Model-View-Controller의 약자이다.
- 원래는 제록스 연구소에서 일하던 트뤼그베 린즈커그가 처음으로 소개한 개념으로, 데스트톱 어플리케이션용으로 고안되었다.
- Model : 모델은 뷰가 렌더링 하는데 필요한 데이터이다. 예를 들어 사용자가 요청한 상품 목록이나, 주문 내역이 이에 해당한다.
- View : 웹 애플리케이션에서 뷰는 실제로 보이는 부분이며, 모델을 사용해 렌더링을 한다. 뷰는 JSP, JSF, PDF, XML 등으로 결과를 표현한다.
- Controller : 컨트롤러는 사용자의 액션에 응답하는 컴포넌트이다. 컨트롤러는 모델을 업데이트하고, 다른 액션을 수행한다.
MVC Model1 아키텍쳐
- 브라우저가 요청을 하게 되면 해당 요청을 JSP가 받게된다. 따라서 요청만큼 JSP 페이지가 존재한다.
- 이런 JSP는 Java bean을 이용해서 데이터베이스를 사용하여 그 결과를 화면에 출력한다.
- Java Bean은 이전에 JDBC로 작성했던 Role Dao와 같은 클래스들이 해당된다.
- JSP 자체에 Java 코드와 HTML 코드가 섞여있기 때문에 유지보수가 어렵다는 문제점이 있다. 이를 해결하기 위해 나온 것이 model2이다.
MVC Model2 아키텍쳐
- 요청 자체를 서블릿이 받게 하고, 서블릿이 Java bean을 이용해 DB에서 데이터를 꺼내온 후 결과를 JSP를 통해 화면에 보여주게 하는 모델이다.
- 서블릿은 요청과 데이터를 처리하는 컨트롤러의 역할을 수행, JSP는 모델의 결과를 보여주는 View 역할을 수행한다. 이렇게 함으로써 로직과 뷰를 분리했다.
MVC Model2 발전 형태
- Model2를 좀 더 발전시킨 형태이다.
- 클라이언트가 보낸 모든 요청을 프론트 컨트롤러라고 하는 서블릿 클래스가 받는다.
- 서블릿은 관련된 요청을 처리하기에 조금 불편한 구조를 가지고 있다. 때문에 모든 요청은 서블릿이 받되, 요청의 실제 처리는 위임한다.
- 일을 위임받은 클래스를 컨트롤러 클래스 혹은 핸들러 클래스라고 한다.
- 컨트롤러 혹은 핸들러 클래스가 Java bean 등을 이용하여 결과를 만들어내고 그 결과를 모델에 담아 프론트 컨트롤러에게 보낸다. 그러면 프론트 컨트롤러는 알맞은 뷰에게 모델을 전달해서 그 결과를 출력한다.
Spring Web Module
- 모델 2의 발전된 형태가 Spring 프레임워크 모듈 중에 하나인 web 모듈에 구현되어 있고, 이러한 web 모듈을 Spring MVC라고 한다.