[Spring] Spring MVC 구조

msriver·2020년 6월 22일
0

Spring

목록 보기
9/16

Spring MVC는 Spring의 서브 프로젝트

Spring은 하나의 기능을 위해서만 만들어진 프레임워크가 아니다.

  • '코어'라고 할 수 있는 프레임워크에 여러가지 서브 프로젝트들을 결합해서 사용하는 형태.
  • 서브 프로젝트라는 의미를 개발자의 입장에서 쉽게 이해할 수 있는 방법은 '별도의 설정이 존재할 수 있다' 라는 개념이다.

예제를 Spring Legacy Project로 생성한 경우 servlet-context.xml과 root-context.xml로 설정파일이 분리된 것을 확인할 수 있음

  • Spring MVC 프로젝트를 구성해서 사용한다?
    ➡ root-context.xml로 사용하는 POJO 영역과 servlet-context.xml로 설정하는 Web관련 영역을 같이 연동하여 구동하는 것

예제 프로젝트 생성

STS에서 new - spring legacy project - spring mvc project 클릭

프로젝트 이름은 ex01로 작성한다.

pom.xml수정은 기존에 포스팅한 대로 하면된다. 간단하게 정리하자면

  • 스프링버전 바꾸기
  • Maven-Compiler 옵션 1.8로 바꾸기 (JDK 1.8사용을 위함)
  • Lombok 라이브러리 추가 + spring-test 라이브러리 추가

그리고 Spring Legacy Project로 생성된 프로젝트는 서블릿버전이 2.5로 잡혀있다. Java설정을 한다면 3.0이상으로 바꾸어 주는것이 좋다. javax-servlet-api의 버전을 3.1.0 이상으로 골라잡아 maven repository에서 복사해온다.

예제 프로젝트의 로딩 구조

프로젝트를 Run as - Run on Server 로 실행해 보면 약간의 로그들이 기록된다.
로그를 살펴보면 프로젝트 구동 시 관여하는 XML파일로 web.xml, root-context.xml, servlet-context.xml 등이 있음을 알 수 있다.

프로젝트 구동은 web.xml에서 시작한다. 이 파일에는 tomcat 관련 설정들이 있다.

<!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/spring/root-context.xml</param-value>
	</context-param>
	
	<!-- Creates the Spring Container shared by all Servlets and Filters -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

root-context.xml의 경로가 잡혀있고, 스프링MVC의 ContextLoaderListener가 <listen>에 등록되어 있음을 확인.

root-context.xml에서는 파일에 적혀진 Bean들의 설정들이 동작한다. (의존성 주입)

이후 스프링 MVC에서 사용하는 DispatcherServlet이라는 서블릿과 관련된 설정이 동작한다.
DispatcherServlet은 XmlWebApplicationContext를 이용해서 servlet-context.xml을 로딩하고 해석함. 이때 등록된 객체들은 기존의 root-context.xml을 통해 등록된 객체들과 연동된다.

Spring MVC의 기본사상

Spring MVC를 사용한다면 개발자들은 직접적으로 HttpServletRequest / HttpServletResponse 등 JSP/Servlet의 API를 직접 사용할 필요성이 현저히 줄어든다.
스프링 MVC가 내부적으로 JSP/Servlet을 처리해줌

모델2 = 로직과 화면을 분리

https://jeong-pro.tistory.com/96
직접 정리하려하였으나 매우 깔끔하게 정리해주신 포스팅이 있어 링크를 남김.

profile
NOBODY

0개의 댓글