Dev.GA

[Spring] Spring MVC와 Dispatcherservlet 본문

Dev.Back-End/Spring

[Spring] Spring MVC와 Dispatcherservlet

Dev.GA 2018. 5. 8. 16:03


[Spring] Spring MVC와 Dispatcherservlet



Spring Framework를 사용해 웹기반 프로젝트를 진행함에 있어 Spring에 대한 개념을 정리하기 위한 포스팅을 진행하겠다.


그 중 첫시간으로, Spring의 기본이 되는 MVC패턴과 dispatcherservlet에 대해 알아보자.



1. Spring MVC


Spring MVC란 "Model View Controller"의 약자로 MVC패턴이라 불린다.

어플리케이션의 데이터에 해당하는 모델(M)과 이를 사용자에게 보여주는 뷰(V) 그리고 이를 제어하는 컨트롤러(C)로 구성되어 있으며 사용자 인터페이스와 비즈니스로직을 분리하여 개발하는 방식을 말한다.


MVC는 프론트 컨트롤러(Front Controller) 패턴과 함께 사용되는데 Front Controller에 대해 알아보자.




2. Dispatcherservlet


프론트 컨트롤러는 가장 앞선에서 서버로 들어오는 클라이언트로부터의 요청을 받아서 처리한다.

Spring에서는 Dispatcherservlet이라는 프론트 컨트롤러를 제공하는데 이 Dispatcherservlet에서 MVC 아키텍쳐를 관리한다.


[ Spring MVC 흐름 ]



1) 클라이언트로부터 요청(Request) 접수


서블릿 컨테이너에서 받은 HTTP요청을 Dispatcherservlet에 할당해주는데 이를 먼저 web.xml에서 설정해준다.

web.xml에서 서블릿 설정과 url매핑을 설정하며, 요청이 들어오면 Dispatcherservlet에서 요청을 접수한다.


WEB.xml

1
2
3
4
5
6
7
8
9
     <servlet>
        <servlet-name>action</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>action</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
cs



2) Dispatcherservlet에서 컨트롤러(Controller)로 위임

위의 url매핑대로 요청이 접수되면 Dispatcherservlet은 위의 MVC 흐름 그림처럼 Handler Mapping을 통해 해당 요청을 알맞은 컨트롤러로 위임한다.

Handler는 url요청을 다루는 녀석으로 요청url과 컨트롤러를 매핑하는 역할을 한다.



3) 컨트롤러(Controller)의 모델 생성

HandlerMapping을 통해 요청을 위임받은 컨트롤러(Controller)는 필요한 비즈니스 로직을 호출/수행하여 처리 결과(모델,M)를 생성하고 이 모델(M)과 출력될 뷰(View)를 Dispatcherservlet에 반환해준다.



4) ViewResolver

컨트롤러(Controller)로 부터 ModelAndView 정보를 전달받은 Dispatcherservlet은 ViewResolver란 클래스를 이용하여 사용자에게 출력할 View 객체를 얻게 된다.



5) View

ViewResolver를 통해 얻은 View객체를 통해 사용자에게 보여줄 화면을 출력한다.






오늘은 Spring의 가장 핵심이며 기본이 되는 MVC패턴과 Dispatcherservlert에 대해 정리하였다.

앞으로 Spring 개념의 가장 중요한 AOP, IOC, DI에 대해 다루도록 하겠다.





'Dev.Back-End > Spring' 카테고리의 다른 글

[Spring] Spring IoC와 DI  (2) 2018.05.10
[Spring] AOP(Aspect Oriented Programming)이란?  (0) 2018.05.08
Comments