web.xml ?

Yoon·2022년 6월 8일
0

web.xml 이란?

web.xml은 DD(Deployment Descriptor : 배포 설명자)라고 불리며, Web Application의 설정 파일이다.
DD는 Web Application 실행 시 메모리에 로드된다.
즉,web.xml이란 웹 어플리케이션을 실행시킬 때 함께 올라가야할 설정(설명)들을 정의해 놓은 것이다.
그렇다면 web.xml에는 어떤 설정을 할까?

설정

Web.xml 에서는 크게 DispatcherServlet, ContextLoaderListener, Filter 설정을 한다.

클라이언트의 요청을 처리하는 DispatcherServlet.
웹 어플리케이션 컨텍스트 단위의 설정을 로드하는 ContextLoaderListener.
이건 꼭 거쳤으면 좋겠는 Filter.

DispatcherServlet

DispatcherServlet은 클라이언트의 요청을 전달받는 객체이다. 하는 일은? 당연히 클라이언트의 요청을 처리하는 일이다.

클라이언트의 요청을 처리하려면 크게 4가지 일이 진행되어야 한다.

첫째,클라이언트의 요청을 처리해줄 컨트롤러를 찾는다.
둘째, 컨트롤러를 실행시킨다.(비지니스 로직 처리)
셋째, 클라이언트에게 보여질 View를 찾는다.
넷째, 응답 데이터와 View를 클라이언트에게 전달한다.

요청을 처리할 컨트롤러를 찾는 일은 Handler Mapping이라는 객체가 처리한다.
이 객체는 클라이언트의 요청 경로를 이용해서
컨트롤러를 검색하고, 검색된 객체를 DispatcherServlet에게 리턴한다.
만약 클라이연트가 'http://~~/test'를 요청할 경우 /test를 처리할 컨트롤러 객체를 리턴하는 것이다.

컨트롤러를 실행시키는 일은 Handler Adapter라는 객체가 처리한다.
이객체는 @Controller 어노테이션을 이용해 구현한 컨트롤러 뿐만 아니라, Controller 인터페이스를 구현한 컨트롤러, 특수 목적으로 사용되는 HttpRequestHandler 인터페이스를 구현
즉, 컨트롤러 실행 업무에 특화된 객체로 Controller를 실행하는 것이다.

Controller가 실행되면 개발자가 구현한 비지니스 로직을 거쳐 응답 데이터가 추출된다.
실행된 Controller는 리턴할 데이터와 View를 Handler Adapter에게 리턴한다.
Handler Adapter는 데이터와 view를 ModelAndView 형태로 DispatcherServlet에게 리턴한다.

여기서 view는 단순히 view의 이름이다. 뭔소리냐면 이 이름에 해당하는 실제 view를 찾아야 한다는 것.

클라이언트에게 보여질 view를 찾는 일은 ViewResolver 객체가 처리한다

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

위는 viewResolver 객체를 설정하는 부분인데 설정된 prefix(접두사), suffix(접미사)를 참조하여 처리한다.
만약 Controller에서 리턴한 view 이름이 hello였다면 /WEB-INF/view/hello.jsp를 찾아 dispatcher Servlet에게 리턴한다.

최종적으로 viewResolver가 리턴한 View 객체에 응답 데이터를 넣어 클라이언트에게 리턴한다.

이처럼 클라이언트의 요청은 DispatcherServlet이라는 감독관이 처리한다.
다만 직접 처리하지 않고 적절한 객체들에게 일을 위임하여 처리하고 있다.

ContextLoaderListener

앞서 Dispatcher Servlet은 클라이언트의 요청을 처리하는 객체라고 설명했다.
웹 어플리케이션의 규모가 커진다면, 클라이언트의 요청또한 다양해질 것이고, 이를 처리할 Dispatcher Servlet도 늘어날 가능성이 있다. 다른 성격을 가진 서블릿이 생성될 것이고, 설정 또한 서블릿의 성격에 맞게 각각 적용시켜야 한다.
반면에, 모든 서블릿이 공통으로 가져야할 설정들도 있다. 즉, Servlet Context 단위가 아닌 Application Context 단위의 설정이 필요한데 이를 ContextLoaderListener 객체가 처리한다.
이 객체는 Application Context 단위의 설정을 생성한다.
참고로 Application Context 는 Web Application의 Context이며, 모든 Servlet들이 참조가 가능한 부모 Context이다.

Fiter

클라이언트에서 온 요청을 Dispatcher Servlet이 받기 전 거치는 부분이 있다. 그것이 Filter 객체이다.
만약 스프링 시큐리티 필터가 적용되어 있다면, 인가 및 인증 처리를 먼저 처리하고, 인코딩 필터가 적용되어 있다면 클라이언트의 요청데이터를 인코딩하는 작업이 선 처리된 후 Dispatcher Servlet에게 필터링 된 데이터가 전달된다.

profile
나의 공부 일기

0개의 댓글