SPRING

SPRING MVC 구조, 처리 흐름, 개발 과정

Adev 2022. 11. 10. 00:01

: 스프링 MVC는 스프링의 sub project이다. 따라서 별도의 설정이 존재할 수 있다.
: 일반 Java 영역(root-context.xml)과 web영역(servlet-context.xml)을 함께 연동해서 구동한다.

 

 

로딩 구조

1) 프로젝트 구동

2) web.xml - ContextLodaderListener 구동

3) root-context.xml 처리 : 객체(Bean)을 스프링 영역(context)안에 생성하고 의존성 처리

4) DispatcherServlet - servlet-context.xml 처리 : 객체(Bean)을 스프링 영역(context)안에 생성하고 의존성 처리

 

 

웹 프로젝트 3-tier 방식과 Spring MVC

Presentation Tier                  <-> Business Tier                       <-> Persistence Tier 

Spring MVC                          <-> Spring core (POJO)             <-> spring-mybatis - MyBatis - DB

 

일반적으로 웹 애플리케이션의 목적은 데이터베이스에 데이터를 기록하고 원하는 데이터를 가져오는 것이다.

 

화면 계층은 화면에 보여주는 기술을 사용한다.

비즈니스 계층은 순수한 비즈니스 로직을 담고 있다. 고객의 요구 사항과 정확히 일치해야한다. (xxService)

영속 계층(데이터 계층)은 데이터를 보관하고 사용하는 방법을 설계한다.

각 영역을 구분하여 설계하는 이유는 유지 보수의 필요성 때문이다.

 

Naming Convention

: 비즈니스 단위별로 패키지를 만들고 그 내부에서 Controller, Service 패키지 등으로 나눈다.

xxxController

xxxService, xxxServiceImpl

xxxDAO, xxxRepository, MyBatis의 Mapper인터페이스

VO, DTO

 

요구사항 분석 설계

: '고객'은 '(대상)'을 ...할 수 있어야 한다.

: 요구사항에서 사용되는 용어를 기준으로 게시물의 구조를 판단해서 테이블 등과 화면(스토리보드)을 설계한다.

화면 설계는 Mock-up툴을 이용하며 각 단계에서 사용자가 입력할 값과 전체 페이지 흐름(url과 get/post방식) 설계한다.

 

 

 

1. 모델2 방식의 springMVC

: springMVC는 로직과 화면을 분리하는 '모델2' 방식으로 처리된다.
보통 Controller를 먼저 호출해 나중에 View를 교체하더라도 URL이 변하지 않도록 한다.
SPRING이 중간 역할을 해서 RequestDispatcher, HTTPServletRequest/HttpServletRsponse와 같은 Servlet/JSP의 API 등을 직접 이용하지 않고 spring MVC 내부에서 처리되도록 하며, 개발자는 springMVC API를 이용해 코드를 작성한다.

 

 

출처 - boostcourse 웹 백엔드 4강

 

 

2. SPRING MVC 기본 구조

  • DispatcherServlet

- Front-Controller. 

사용자의 Request를 받아서 처리한다. (Front-Controller 패턴)

클라이언트의 요청을 받고 컨트롤러에게 전달하며, 컨트롤러가 리턴한 값을 View에 전달한다.

 

더보기

[web.xml]

 

<servlet>
<servlet-name>action</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name> <!-- DispatcherServlet이 어떤 일을 하게 할지 적는다 -->
<param-value>
/WEB-INF/config/*-servlet.xml
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.da</url-pattern> <!-- 해당 url이 들어오면 servlet-name(action)과 같은 이름으로 mapping돼있는 servlet-class(org.springframework.web.servlet.DispatcherServlet)를 실행한다. url을 /로 설정하면 DispatcherServlet이 모든 요청을 다 받는다. -->
</servlet-mapping>

 

  • HandlerMapping

- 클라이언트의 요청 URL을 담당할 컨트롤러를 정한다.

 

+ HandlerAdapter : 찾은 컨트롤러를 동작시킨다.

 

  • Controller

- 클라이언트의 request를 처리하고 그 결과를 DispatcherServlet에 전달한다.

주로 Model객체에 View에 전달할 데이터를 담는다. 

 

  • ModelAndView

- 컨트롤러가 처리한 결과 및 뷰 선택에 필요한 정보를 담는다.

 

  • ViewResolver

- 컨트롤러가 반환한 다양한 타입의 결과를 생성할 뷰를 결정한다.

어떤 View를 통해 처리할지 해석한다.

 

  • View

- 컨트롤러의 처리 결과 화면을 생성한다.

응답 데이터를 Jsp등을 이용해 생성한다. 

만들어진 응답은 DispatcherServlet을 통해 전송한다.

 

 

 

3. WEB 요청 처리 과정

1) 클라이언트의 요청을 DisparcherServlet로 전달  
2) DisparcherServlet은 HandlerMapping을 사용해 Controller 객체를 구하고 요청을 처리

3) Controller는 처리결과를 담은 ModelAndView 객체를 리턴

4) DisparcherServlet은 ViewResolver로부터 처리 결과를 생성할 View 객체를 구함

5) View는 클라이언트에 전송할 응답을 생성

 

 

 

4. WEB Application 개발 과정

1) web.xml에 클라이언트의 요청을 받을 DispatcherServlet 설정

 

2) 클라이언트의 요청을 처리할 Controller작성

 - @Controller Annotation

    : 해당 Class가 spring mvc의 컨트롤러를 구현한 Class라는 것을 지정

 - @RequestMapping Annotaition

    : 클라이언트의 요청을 처리할 메서드 설정. 해당 메서드에서 처리할 URI를 값으로 가짐

 - Controller Class는 직간접적으로 뷰 이름과 모델 정보를 설정하는 ModelAndView 객체 생성

 - DispatcherServlet이 사용하는 설정 파일에 Controller Class를 Bean으로 등록

 

더보기

<context:component-scan base-package="coffeeDao.common.controller" />

 

3) Controller가 전달한 값을 이용해 응답 화면을 생성할 View를 결정하는 ViewResolver 설정

 - JSP로 View를 작성할 경우 InternalResourceViewResolver 구현체를 빈으로 등록한다

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/view/" />
<property name="suffix" value=".jsp"/>

 

4) JSP 등을 이용해 Controller의 처리 결과를 보여줄 View 작성

 - Controller에서 설정한 모델의 이름을 이용해서 해당 모델의 값을 출력할 수 있다

 

5) 실행

 - http://host:port/[컨텍스트 경로]/[RequestMapping Annotaition에서 지정한 처리 경로 값]

'SPRING' 카테고리의 다른 글

SPRING View 영역 구현  (0) 2022.11.14
SPRING Controller Model  (0) 2022.11.13
SPRING View 지정  (0) 2022.11.12
SPRING Controller 구현  (0) 2022.11.11
SPRING Framework 개념, 기능, 특징  (0) 2022.11.09