SpringMVC를 배우기 전까지의
MVC Model2 패턴은
위와 같았으나 이제 Spring MVC에서는
위와 같은 형태를 가지며 요청을 받고 응답하는 CS센터인 Front controller가 등장한다.
즉 Spring MVC 에서 클라이언트의 요청이 진입하는 지점 : front controller
이고 사용자의 요청을 front controller가 요청에 맞는 controller에게 request를 전달하는것
회사에 비유하면
ex) ┌ C1(자재부매니저) MV(직원들) 안내데스크──┿ C2(인사부매니저) MV(직원들) ---------- └ C3(영업부매니저) MV(직원들) (front controller) Spring이 담당 그 중에서도 DispatcherServlet이 담당
와 같은 구조를 띄는 것이다.
이제 우리(개발자)는 MVC 구성하고,
그 환경안에서 약속에 따라 돌아갈 수 있도록 Spring에게 기술서(XML) 넘겨주면 된다.
┌→ Controller가 주인공: 실제로 하는 일은 없음 │ 지시, 교통정리 담당 웹 개발을 위한 MVC 패턴이 적용된 Spring Framework로 Spring 에서는 DispatcherServlet 클래스가 컨트롤러 역할을 수행하게 된다.
① 사용자 요청 → DispatcherServlet 접수
② DispatcherServlet → HandlerMapping 에 주소 분석 요청
③ DispatcherServlet → 특정 Controller 객체 호출 및 결과 수신
결과는 ModelAndView 객체
④ DispatcherServlet → ViewResolver 에 View 객체 분석 요청
⑤ DispatcherServlet → 특정 View 객체에 Model 객체를 넘겨주고
결과 출력
※ ModelAndView 객체
: View 객체 정보와 결과값이 들어있는 객체
Controller
액션 처리를 담당하는 Controller 클래스 작성
Annotation 을 사용하지 않으면, Controller 인터페이스를 구현하여 작성
└→ 사용자 정의 컨트롤러를 우리가 만들어야 하고,
이걸 만드는 과정에서 annotation 사용하거나
아니면 framework 답게 Controller 인터페이스를 구현하여 작성
View
결과 출력용 JSP 페이지 작성
web.xml
서블릿 주소와 DispatcherServlet 클래스 등록
└→ 어떤 요청이 들어왔을 때,
이젠 다 front-controller로 가야하기 때문에
DispatcherServlet으로 보내야지 하고 인계해주는거
dispatcher-servlet.xml
우리가 작성한 Controller 객체 등록
URL 매핑 주소 등록
└→ 우리가 작성한대로 분기되게 작성해줘야 한다.
※ Spring 이 스트럿츠를 비롯하여 다양한 웹 프레임워크와
비교적 연동이 잘 되는 편이기는 하지만
서로 다른 두 프레임워크를 연동하기 위해서는
설정의 중복 등 개발 과정에서 불편함이 존재할 수 밖에 없다.
따라서, Spring 이 자체적으로 제공하는 MVC 프레임워크를 사용하게 되면
Spring 이 제공하는 AOP, 트랜잭션 처리, IoC/DI 등의 기능을
그대로 사용하면서 MVC 패턴에 기반하여 웹 어플리케이션을 개발할 수 있다.
또한, 다른 프레임워크와 Spring 을 연동하기 위해서
설정을 중복해서 적용해야 한다던지... 하는 개발 과정에서 나타나는
불편을 해소할 수 있게 된다.