본문 바로가기
웹 프로그래밍/스프링

IntelliJ Maven Project를 이용한 Spring MVC 프로젝트 생성 방법02

by Backchus 2019. 2. 19.

maven프로젝트를 만들어서 pom.xml설정가지 완료하였다면 이제 본격적으로 Spring MVC를 이용해 웹 어플리케이션을 작성하기 위한 설정들을 해보자


DispatcherServlet을 FrontController로 설정해야하는데 여러가지 방법이 있는데 가장 많이 사용하는 web.xml설정 방법을 이용해서 설정을 해보겠다.


web.xml파일에서 DispatcherServlet을 설정할때

이렇게 WebMVCContextConfig라는 xml파일을 만들어서 설정할 수도 있지만 요즘은 xml설정보단 java로 설정을 지향하는 추세이므로


WebMvcConfigurerAdapter를 상속받은 클래스를 만들어 빨간 네모박스안에 설정해 주는 방식으로 할 것이다.


먼저 java폴더아래에 설정파일들을 따로 분리해서 만들기위해 kr.or.connect.mvcexam.config패키지를 만들고 거기에 WebMvcConfigurerAdapter를 상속받은 WebMvcContextConfiguration이라는 클래스를 하나 만든다. WebMvcContextConfiguration클래스는 DispatcherServlet의 기본설정외에 개발자가 다른 설정을 해주고 싶을때 상속받아서 자바클래스파일을 만들고 web.xml에 init-param으로 설정해서 사용할수 있도록 할 수 있다.


WebMvcContextConfiguration클래스를 만들고 Java config파일임을 알려주기위해 @Configuration을 추가해줘야하고, @EnableWebMvc는 DispatcherServlet의 RequestMappingHandlerMapping, RequestMappinghandlerAdapter, ExceptionHandlerExceptiononResolver, MessageConverter 등 Web에 필요한 빈들을 대부분 자동으로 설정해 준다. xml로 설정의 <mvc:annotation-driven/>와 동일하다. 기본 설정 이외의 설정이 필요하다면 위처럼 WebMvcConfigurerAdapter를 상속 받도록 Java config class를 작성한 후, 필요한 메소드를 오버라이딩 하도록 한다. @ComponentScan애노테이션도 추가해서 controller패키지안에있는 controller클래스를 찾아 스프링 컨테이너가 관리해주게 한다.


여기에 몇개의 메소드를 추가해 줬다. 

addResourceHandler메소드는 요청중에는 컨트롤러의 URL이 매핑되어있는 요청만 들어오는게 아니라 css파일, 이미지파일, js파일의 요청을 다 받아버리기 때문에 addResourceHandler의 매개변수 부분인 /css/**이런 요청이 들어올때 /css경로에서 찾으라는 설정이다.


그 다음 메소드는 configureDefaultServletHandling이란느 것을 오버라이드 하고 있다. 이 메소드는 파라미터로 전달 받은 DefaultServletHandlerConfigurer객체의 enable이라는 메소드를 호출함으로써 DefaultServletHandler를 사용하도록 해준다. 매핑 정보가 없는 URL 요청은 Spring의 DefaultServletHttpRequestHandler가 처리하도록 해준다. DefaultServletHttpRequestHandler는 WAS의 DefaultServlet에게 해당 일을 넘기게 된다. 그러면 WAS는 DefaultServlet이 static 한 자원을 읽어서 보여주게 해준다.


그리고 다음에 addViewControllers메소드는 특정 URL에 대한 처리를 컨트롤러 클래스를 작성하지 않고 매핑할 수 있도록 해주는데 요청 자체가 "/" 하고 들어오면 main이라고 하는 이름의 뷰로 보여주도록 하게되는데 이 main은 어디서 찾아내게 되냐면 view name은 ViewResolver라는 객체를 이용해서 찾게되는데 실제 main이라는 이름만 가지고서는 뷰 정보를 찾아낼 수가 없다.


그래서 뷰 정보는 그 아래 getInternalResourceViewResolver라는 메소드에서 설정된 형태로 뷰를 사용하게 된다. InternalResourceViewResolver를 생성을 하고 있고 이 resolver한테 setPrefix, Suffix를 지정하고 있다. prefix는 앞에 suffix는 뒤에 붙여달라는 뜻이다. 결국 "/" 요청은 WEB-INF/views/main.jsp라는 파일을 찾아주게 된다.


참고자료: https://www.edwith.org/boostcourse-web/lecture/16764/ (부스트코스)