Architecture
Spring MVC는 MVC 패턴 기반의 Model2아키텍처를 사용하며 Model, View,
Controller 컴포넌트로 구성된다.
- Model
:
Model Component를 만드는 다양한 방법을 직접 제공하지 않는다. 대신 EJB
(Enterprise Java Beans), JDO (Java Data Objects),
JavaBeans, ORM (Object to Relational Mapping framework )
등 여러 기술들을 이용해 구현된 어떤 Model Component 에도 접근 가능하다. 또한 폼 입력
필드 값을 폼 객체 없이 모델 객체로 바인딩 할 수 있는데 이 때 모델 객체 attribute로
정의된 타입에 따라 자동 매핑된다. 단, attribute명과 입력 필드 명이 일치 해야한다.
- View
:
표준 JSP 나 Spring MVC에서 제공하는 tag library 를 사용하여 View
Component를 제작 한다. Spring MVC에서는 별도의 bean, html, logic
태그는 제공하지 않으며 표준JSP 태그인 JSTL을 사용하는것을 권장한다. Component의
재사용, 관리 노력의 절감, 에러 감소를 위해 Application-Specific Custom
tag, Image Rendering Component 등 다른 기술의 채택을 고려할 수 있다.
- Controller
: DispatcherServlet이 Front Controller 역할을 담당하고 있으며 모든 Request의 Flow를 제어한다.
FrontController 역할을 하는 DispatcherServlet의 요청 처리 workflow는 아래의 그림과 같다.

Request의 흐름
위 workflow에서 볼 수 있듯이 모든 요청이 통과하는 곳은 Front Controller이며
Spring MVC에서는 DispatcherServlet이 이 Front Controller 역할을 한다.
DispatcherServlet은 모든 요청을 하나의 받은 뒤 Handler Mapping을 통해 각각의
요청을 처리할 컨트롤러에 넘긴다. 컨트롤러에서 요청을 처리한 뒤 ModelAndView 객체를 다시
DispatcherServlet에게 넘기면 DispatcherServlet은 ModelAndView 객체의 view 이름과
ViewResolver를 사용하여 해당 응답을 보여줄 view에게 Model 객체들을 넘기고 출력할
view를 만들게 된다. 그 후 다시 DispatcherServlet에게 제어권을 넘기면 Reponse에
방금 만들어낸 view을 실어 보낸다.