[Spring] Spring Web MVC (2)

민픽minpic·2024년 4월 17일
0

Spring Framework

목록 보기
4/5

이전글 : [Spring] Spring Web MVC (1)

이전 글의 내용과 위의 그림과 같이 spring MVC 가 구성되어있다.
여기서 DispatcherServlet, Handler Mapping, ViewResolver 는 Spring이 제공해준다.

Spring web Application 작동원리

우선 spring web application 작동원리를 살펴보며 하나씩 코드를 뜯어보는게 정리하는데 좋은 것 같다.

1. web.xml 파일 로딩

웹 프로젝트의 파일 구조를 보면 다음과 같다.

src/main/webapp/WEB-INF/web.xml 파일이 spring web application이 구동되면 처음으로 로드된다.
web.xml파일에서 DispatcherServlet 등록한다.

web.xml파일은 웹 애플리케이션 서버에 의해 순차적으로 읽혀진다.
처음 부분이 다음과 같다.

<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/spring/root-context.xml</param-value>
</context-param>

<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

ContextLoaderListener 가 root-context.xml를 로드하면서 공통적으로 사용되는 최상위 Context를 생성한다.

보통 root-context.xml에는 웹과 직접적인 관련이 없는 설정값을을 작성해준다.

그러면 Service, DAO, Entity 부분들이 생성된다.

	<servlet>
		<servlet-name>appServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup> <!-- 이 설정 때문에 초기화 될 수 있음  -->
	</servlet>
	
	<servlet-mapping>
		<servlet-name>appServlet</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
	

그리고 그 아래에 DispatcherServlet를 등록한다.
servlet 태그와 servlet-mapping 태그는 한 세트라고 생각하면 되고, DispatcherServlet의 URL을 맵핑해준다.

이 과정에서 servlet-context.xml를 등록하는데, 해당 파일은 웹과 관련된 설정들을 담은 것이라 생각하면 된다.

root-context.xml와 servlet-context.xml를 분리하는 이유는 유지보수와 재사용을 위해?이다.

만약에 웹 어플리케이션이 아니라 모바일 어플리케이션을 개발한다고 생각하고, 웹 어플리케이션에 적용한 비지니스 로직을 그대로 사용한다고 생각해보자.

그렇다면 웹과 관련되지 않은 다른 것들은 모바일 어플리케이션을 만들때도 똑같이 필요하다. 그러면 재사용을 할 수 있게 된다.

2. Client 요청 받고, Controller Running

이와 같은 원리로 controller가 실행된다.

profile
사진찍는 개발자 / 한 가지 개념이라도 깊이있게

0개의 댓글