Programing/egovFramework

전자정부프레임워크 나만의 웹 템플릿 프로젝트 생성하기(2) - web.xml

리커니 2017. 1. 18.
반응형

 

전자정부프레임워크 나만의 웹 템플릿 프로젝트 생성하기(2) - web.xml

 

나만의 웹 템플릿 프로젝트 생성하기(1)에서는

전자정부프레임워크를 활용해 프로젝트를 생성하고 페이지를 띄우는데 까지 했다.

 

이번 (2) 에서는 가장 중요한 설정 파일인 web.xml 에 대해 설명 하려 한다.

web.xml 은 MVC모델의 프로젝트가 실행될때 가장 먼저 실행되는 세팅파일이다.

 

 

그럼 web.xml 소스를 보도록 하자.

해당 파일은 프로젝트를 생성하면 위의 위치에 존재한다.

web.xml에 대한 설명은 구글링을 해보면 아주 잘 설명되어있다.

 

여기서는 전자정부프레임워크에서 제공하는 소스에 대한 설명 위주로 포스팅 하겠다.

 

 

위의 코드는 해당 파일이 xml임을 알리는 첫번째 줄과

어떤 스키마정의를 따르는지와 버젼에 대한 설명을 정의하는 나머지 줄로 구성된다. (<wab-app ...>)

 

이제부터가 중요하다.

 

 

filter 는 웹 어플리케이션이 실행될때 사전 처리하는 기능을 수행한다.

해당 부분은 한글과 같은 문자의 인코딩을 처리하는 부분이다.

 

*.do 라는 요청이 들어오면 encodingFilter 라는 필터를 찾아 그 필터에 설정된 클래스를 메모리 상에 띄운다.

파라미터 부분은 encoding 타입을 utf-8로 설정하겠다는 것이다.

 

org.springframework.web.filter.CharacterEncodingFilter 에 커서가 있을 때 F3 단축키를 누르면 해당 클래스로 이동되며, 내용 확인이 가능하다.

 

 

다음 필터 부분을 보자.

해당 필터도 *.do 라는 요청이 들어오면 HTMLTagFilter 라는 필터를 찾아 해당 필더에 설정된 class를 메모리 상에 띄우는 부분이다.

 

egovframework.rte.ptl.mvc.filter.HTMLTagFilter 클래스는 크로스 스크립팅이라는 해킹기법을 사전에 막는 기능을 한다. 크로스 스크립팅 해킹기법은 <script>로 시작하는 코드를 전송시켜 해킹코드를 서버에서 실행시키는 기법인데

이를 막기 위하여 HTMLTagFilter 클래스를 사용하는 것이다.

 

HTMLTagFilter 를 보면 HTMLTagFilterRequestWrapper 라는 클래스를 실행시켜 정규식코드를 변환하는 것을 확인 할 수 있다.

 

예)

 

 

다음 부분은 리스너를 등록하는 부분이다.

 

 

Listener는 서블릿과는 다르게 서블릿 컨테이너(tomcat)가 web.xml 파일을 읽어서 구동될 떄, 자동으로 메모리에 생성(pre-loading)되는 객체이다.

 

만일 위와 다르게 <context-param>을 등록하지 않게 되면 <listener>에 등록된 ContextLoaderListener 는

/WEB-INF 경로에 있는 applicationContext.xml 을 자동으로 로딩하기 때문에 해당 파일이 없다면 오류가 발생하게 된다. 해서 <context-param>을 등록하여 해당경로에 있는 xml 파일들을 로딩하는 것이다.

 

 

복수의 설정파일을 사용할 경우 위와같이 설정하면 된다. 해당 경로를 확인해보면 기능에 따라 분리된 여러개의 설정 파일을 확인 할 수 있다.

 

 

 

위의 설정파일들에 대한 설명은 다음 포스팅에서 진행하도록 하겠다.

 

 

 

DispatcherServlet을 등록하는 부분이다.

 

DispatcherServlet을 등록하는 이유는 이 객체가 이용해야 하는 HandlerMapping, Controller, ViewResolver 객체들을 인지하고 있어야 클라이언트의 요청에 대해 적절히 처리할 수 있기 때문이다.

 

<load-on-startup>이 없다면, *.do 라는 요청이 들어오면 action이라는 이름의 서블릿의

org.springframework.web.servlet.DispatcherServlet 클래스를 실행한다.

이는 클라이언트가 요청을 처리하며 결과를 응답하는 역할을 한다.

하지만 <load-on-startup> 을 세팅했기 때문에 클라이언트의 *.do 요청이 오지 않아도 action 이라는 서블릿을 실행한다.

 

DispatcherServlet클래스 또한 기본 설정 경로가 /WEB-INF 경로의 action-servlet.xml 이기 때문에 <init-param> 을 이용하여 설정파일의 경로를 설정하여 준다.

 

일단 여기서 이론상 중요한 내용은, 앞에서 listener가 pre-loading 되면서 먼저 비지니스레이어(service, DAO 등)가 메모리상에 올라 간 후 *.do 요청이 없어도 프리젠테이션 레이어(controller 등)가 메모리에 올라간다는 것이다.

 

Spring MVC 모델은 클라이언트의 *.do 요청이 들어오면 핸들러가 그 요청과 controller를 매핑하고 controller는 serivce, Dao 순으로 참조하게 된다. 그러니, controller가 참조하는 service나 Dao가 메모리 상에 없으면 에러가 나게 된다.

 

 

위 코드는 간단하게 클라이언트의 요청이 들어왔을때 처음으로 응답하는 페이지를 설정하는 부분이다.

 

 

위 코드는 보안된 페이지로 들어가려는 사용자에 대한 서버의 인증 방식을 설정하는 부분이다.

BASIC, DIGEST, CLIENT-CERT, FORM 네가지 방식이 있다.

 

이부분에 대한 자세한 설명은 다음으로 미루자.

 

 

마지막 부분은 에러처리 부분이다.

각 에러에 대한 연결 페이지 설정을 할 수 있다.

 

여기까지 web.xml 코드에 대한 소스코드 설명이었다.

web.xml은 정말 중요한 부분이므로 위의 내용을 확실하게 이해하도록 하자.

반응형

댓글

💲 추천 글