2 minute read

maven

소스코드를 컴퓨터에서 실행 가능한 가공물로 변환하는 과정 또는 결과물을 소스코드 빌드(Build)라 한다. 빌드를 수행하기 위해 프로젝트 생성, 테스트, 배포 등의 작업을 위한빌드 도구(Build tool)가 필요하며 대표적인 빌드 도구로는 Ant, Maven, Gradle이 있다.

Maven(메이븐)은 자바 프로젝트 관리 도구다. 필요한 라이브러리를 pom.xml 파일에 기술하면 자동 다운로드 및 Build path 추가까지 수행해준다. 간단한 설정만으로 배포 관리가 가능하다.

스프링 기본 설정 파일

  1. web.xml
    • 웹 서비스 요청 관련 기본 설정이 기록된다.
    • 스프링의 각 설정 파일(xml) 들의 위치 등을 설정한다.
    • 클라이언트 요청이 가장 먼저 도달하는 설정 파일이다.
  2. root-context.xml
    • 웹(JSP)과 무관한 자바빈 설정(Service, Repository 등)파일이다.
    • 비즈니스 로직 설정(서버를 운영하는데 필요한 설정 내용 등을 포함(DB 관련, 보안 관련))
      주로, database-context.xml 등의 별도의 xml 파일을 생성하여 DB 내용을 분리하는 등 각 역할에 맞는 xml 파일을 생성하여 분리하여 관리한다.
    • 외부 클래스(JDBC 라이브러리 등)에 접근 시 bean 태그를 사용한다.
      공통으로 사용할 자바빈 객체를 설정한다.
  3. servlet-context.xml
    • 웹(JSP)과 관련 있는 자바빈 설정(Controller, MultipartResolver 등) 내용들을 포함한다.
    • 화면 표시를 위해 필요한 설정 내용들을 포함(인코딩 등)한다.
    • 웹 상에서 클라이언트 요청을 받기 위한 설정을 포함한다.
    • URL 관련 설정을 한다.

클라이언트의 자원 접근

뷰페이지에서 사용되는 자원들은 webapp/resources 폴더 내에 위치시키고 뷰페이지에서 접근 시 “${pageContext.request.contextPath }/resources/” 경로를 통해 필요한 자원에 접근해야한다. 외부에선 절대 WEB-INF에 접근할 수 없기 때문이다.

pom.xml

properties 태그 버전 변경

<properties>
	<java-version>11</java-version>
	<org.springframework-version>5.3.24</org.springframework-version>
	<org.aspectj-version>1.6.10</org.aspectj-version>
	<org.slf4j-version>1.6.6</org.slf4j-version>
</properties>

자바 버전 변경

build -> plugins -> plugin 태그 중 artifactId 태그의 maven-compiler-plugin를 찾아 아래와 같이 변경.

<configuration>
	<source>${java-version}</source> <!-- 위에서 설정한 변수를 사용하면 된다. -->
   <target>${java-version}</target>
   <compilerArgument>-Xlint:all</compilerArgument>
   <showWarnings>true</showWarnings>
   <showDeprecation>true</showDeprecation>
</configuration>

라이브러리 추가 및 변경

변경 사항이 적용되면 Maven Dependencies 항목에 모든 라이브러리가 표시되나 만약, 적용되지 않은 사항이 있으면 프로젝트 우클릭 - Maven - Update project 클릭하여 업데이트를 수행하면 된다.
mvnrepository.com 의 Home » javax.servlet » javax.servlet-api » 4.0.0 을 찾아 라이브러리를 변경한다.

<!-- 기존 라이브러리 -->
<!-- Servlet -->
<dependency>
	<groupId>javax.servlet</groupId>
	<artifactId>servlet-api</artifactId>
	<version>2.5</version>
	<scope>provided</scope>
</dependency>

<!-- 변경 후 라이브러리 -->
<dependency>
	<groupId>javax.servlet</groupId>
	<artifactId>javax.servlet-api</artifactId>
	<version>4.0.0</version>
	<scope>provided</scope>
</dependency>

web.xml

<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>

servlet-mapping 태그가 루트(/)를 요청 받아 appServlet 이름의 servlet 태그 항목을 찾아 연결(= 매핑)한다. /WEB-INF/spring/appServlet/servlet-context.xml 파일에 지정된 파라미터를 사용한다.

	<filter>
		<filter-name>encodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
	</filter>
	
	<filter-mapping>
		<filter-name>encodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

post방식 한글 인코딩을 변경해준다. web-app 태그 내에 위치한다.

servlet-context.xml

<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <beans:property name="prefix" value="/WEB-INF/views/" />
  <beans:property name="suffix" value=".jsp" />
</beans:bean>

컨트롤러에서 return 문을 통해 Dispatch 방식으로 이동할 뷰페이지(파일명)를 이름만 지정하면 해당 이름 앞에 “prefix” 에 해당하는 문자열을, 해당 이름 뒤에 “suffix” 에 해당하는 문자열을 자동으로 결합하여 이동할 경로 문자열을 생성해 준다. DispatcherServlet 객체에 의해 자동으로 포워딩이 수행된다.

컨트롤러

@Controller
public class HomeController {
	@RequestMapping(value = "/", method = RequestMethod.GET) // 컨텍스트 루트 경로로 요청 시 매핑
	public String home(Locale locale, Model model) {
		return "index"; // "/WEB-INF/views/index.jsp"
	}
}

스프링 컨트롤러에서는 클래스 단위 매핑 대신 메서드 단위로 서블릿 주소를 매핑한다. @RequestMapping 어노테이션을 사용하여 매핑 정보를 설정하고 어노테이션 밑에 메서드를 정의하면 해당 주소 매핑 시 정의된 메서드를 자동으로 호출한다.
컨트롤러에서 return 문을 통해 Dispatch 방식으로 이동할 뷰페이지(파일명)를 이름만 지정하면 해당 이름 앞에 “prefix” 에 해당하는 문자열을, 해당 이름 뒤에 “suffix” 에 해당하는 문자열을 자동으로 결합하여 이동할 경로 문자열를 생성해 준다. servlet-context.xml 파일에 해당 설정 기록되어 있으며 DispatcherServlet 객체에 의해 자동으로 포워딩이 수행된다.

Leave a comment