Search
Duplicate
😀

06. Spring Web MVC

태그

MVC Pattern

어플리케이션의 확장을 위해 Model, View, Controller 세가지 영역으로 분리
컴포넌트의 변경이 다른 영역 컴포넌트에 영향을 미치지 않음(유지보수 용이)
컴포넌트 간의 결합성이 낮아 프로그램 수정이 용이(확장성이 뛰어남)
장점
화면과 비즈니스 로직을 분리해서 작업 가능
영역별 개발로 인하여 확장성이 뛰어남
표준화된 코드를 사용하므로 공동작업이 용이하고 유지보수성이 좋음
단점
개발과정이 복잡해 초기 개발속도가 늦음
초보자가 이해하고 개발하기에 다소 어려움

Model, View, Controller

Model
어플리케이션 상태의 캡슐화
상태 쿼리에 대한 응답
어플리케이션의 기능 표현
변경을 view에 통지
View
모델을 화면에 시각적으로 표현
모델에게 업데이트 요청
사용자의 입력을 컨트롤러에 전달
컨트롤러가 view를 선택하도록 허용
Controller
어플리케이션의 행위 정의
사용자 액션을 모델 업데이트와 mapping
응답에 대한 view 선택

Spring MVC

Spring MVC 특징

Spring은 DI나 AOP같은 기능 뿐만 아니라, Servlet 기반의 WEB 개발을 위한 MVC Framework 제공
Spring MVC는 Model2 Arichitecture와 Front Controller Pattern을 프레임워크 차원에서 제공
Spring MVC Framework는 Spring을 기반으로 하고 있기 때문에 Spring이 제공하는 Transaction 처리나 DI 및 AOP 등을 손쉽게 사용할 수 있음

Spring MVC 구성요소

DispatcherServlet (Front Controller 역할)
모든 클라이언트의 요청을 전달받음
Controller에게 클라이언트의 요청을 전달하고, Controller가 리턴한 결과값을 View에게 전달하여 알맞은 응답을 생성
HandlerMapping
클라이언트의 요청 URL을 어떤 Controller가 처리할지를 결정
URL과 요청 정보를 기준으로 어떤 핸들러 객체를 사용할지 결정하는 객체이며, DispatcherServlet은 하나 이상의 핸들러 매핑을 가질 수 있음
Controller
클라이언트의 요청을 처리한 뒤, Model을 호출하고 그 결과를 DispatcherServlet에 알려줌
ModelAndView
Controller가 처리한 데이터 및 화면에 대한 정보를 보유한 객체
ViewResolver
Controller가 리턴한 뷰 이름을 기반으로 Controller의 처리 결과를 보여줄 View를 결정
View
Controller의 처리 결과를 보여줄 응답화면을 생성

Spring MVC 요청흐름

1.
DispatcherServlet이 클라이언트 요청을 수신함
> 클라이언트가 /gb/list 라는 url을 요청하면 그것을 수신
2.
DispatcherServlet은 Handler Mapping에 어느 Controller를 사용할 것인지 물어봄
>/gb/list 를 처리하려면 어떤 컨트롤러를 써야해?
3.
HandlerMapping은 url에 맞는 컨트롤러를 찾아서 리턴해줌
>요청한 컨트롤러는 GuestBook.Controller.list() 이야
4.
DispatcherServlet은 요청을 해당 Controller로 전송함
5.
Controller는 요청을 처리한 후 ModelAndView에 담아서 결과를 리턴해줌
>기존의 request.setAttribute() 과정이 Model에 담기고,
>기존의 Page Path 지정이 View에 담김
6.
DispatcherServlet은 ModelAndView에 담긴 path를 가지고 ViewResolver에 요청함
>path가 list인데 정확히 어떤 View로 가야해?
7.
ViewResolver는 논리적 이름을 실제 JSP 이름으로 변환해줌
>/XXX/list.jsp 로 가라
8.
실제 JSP 경로를 찾아서 View(jsp)를 통해 결과정보를 사용하여 화면을 표현함

Spring MVC 구현

Spring MVC를 이용한 Application 구현 Step

web.xml에 DispatcherServlet 등록 및 Spring 설정파일 등록
설정 파일에 HandlerMapping 설정
Controller 구현 및 Context 설정 파일(servlet-context.xml)에 등록
Controller와 JSP의 연결을 위해 View Resolver 설정
JSP 코드 작성

web.xml - DispatcherServlet 설정

경로 : src > main > webapp > WEB-INF > web.xml
Spring Container는 설정파일의 내용을 읽고 ApplicationContext 객체를 생성
<load-on-startup>1</load-on-startup>설정 시 WAS startup시 초기화 작업진행
<listener>
최상위 Root ContextLoader 설정
Context 설정 파일들을 로드하기 위해 web.xml 파일에 리스너 설정(ContextLoaderListener)
리스너 설정이 되면 /WEB-INF/spring/roo-context.xml 파일을 읽어서 공통적으로 사용되는 최상위 Context를 생성
그 외 다른 컨텍스트 파일을들 최상위 컨텍스트에 로드하기 위해서는 classpath 지정
<init-param>
applicationContext(DispatcherServlet)의 정보를 설정해둔 파일
Spring 적용 이전의 ApplicationContext.xml과 같은역할
<init-param>을 설정하지 않으면 "<servlet-name>-servlet.xml" file에서 applicationContext의 정보를 load함
<url-pattern>
DispatcherServlet이 처리하는 URL Mapping pattern을 정의
초기값은 /로 되어있음 → /로 시작하는 모든 URL을 D.S이 처리함
Servlet이므로 1개 이상의 DispatcherServlet 설정 가능