[B -2-3] Java 기반 스프링 환경 설정

2019. 9. 27. 20:49Project B (SPMS)/Project B 파트1

반응형

자바 기반 스프링 환경설정

기본적으로 스프링 레거시 프로젝트의 경우 XML 기반으로 스프링 관련 설정을 하도록 되어있는데, 스프링 버전 3 이후에는 Java 기반 클래스파일을 사용하도록 지원한다.

본 블로그의 프로젝트 A는 XML 기반 스프링 프로젝트지만, 프로젝트 B는 JAVA 기반 스프링 프로젝트로 진행한다.


프로젝트 생성 후 JAVA 기반화 전환

  • web.xml의 파일 삭제 및 스프링 관련 파일 삭제
  • pom.xml의 수정 및 스프링 버전 변경
  • Java 설정 관련 패키지 설정

 


파일 삭제 목록

  1. web.xml
  2. spring/servlet-context.xml
  3. spring/root-context.xml

※  2번과 3번은 spring 이라는 폴더 내에 존재하므로, spring 폴더 통채로 삭제하면 된다.

 


자바 기반 스프링 라이브러리 다운로드

위의 파일 항목 3개를 삭제를 하게되면, pom.xml 에 에러가 발생하는데, 이유는 레거시 프로젝트는 기본적으로 web.xml 을 사용하기때문이다.

따라서 자바 기반화 스프링 환경을 설정해야한다.

 

pom.xml 에 maven-war-plugin플러그인 추가 후 메이븐 업데이트

(*) 업데이트했는데도 pom.xml에 문제가 있을 경우, C:\Users\사용자명 폴더\.m2\ 삭제 후 다시 업데이트 실시

...더보기
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.spms</groupId>
	<artifactId>controller</artifactId>
	<name>SPMS_B</name>
	<packaging>war</packaging>
	<version>1.0.0-BUILD-SNAPSHOT</version>
	<properties>
		<!-- <java-version>1.6</java-version> : 1.8 갱신 -->
		<java-version>1.8</java-version>
		<!-- <org.springframework-version>3.1.1.RELEASE</org.springframework-version> : 5.0.7 갱신-->
		<org.springframework-version>5.0.7.RELEASE</org.springframework-version>
		<org.aspectj-version>1.6.10</org.aspectj-version>
		<org.slf4j-version>1.6.6</org.slf4j-version>
	</properties>
	<dependencies>
		<!-- Spring -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${org.springframework-version}</version>
			<exclusions>
				<!-- Exclude Commons Logging in favor of SLF4j -->
				<exclusion>
					<groupId>commons-logging</groupId>
					<artifactId>commons-logging</artifactId>
				 </exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>
		
		<!-- Spring-test 추가 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>
		
		<!-- Spring-jdbc 추가 -->								
		<dependency>								
			<groupId>org.springframework</groupId>							
			<artifactId>spring-jdbc</artifactId>							
			<version>${org.springframework-version}</version>							
		</dependency>								

		<!-- Spring-tx 추가 -->								
		<dependency>								
			<groupId>org.springframework</groupId>							
			<artifactId>spring-tx</artifactId>			
			<version>${org.springframework-version}</version>							
		</dependency>								

		<!-- Hikari CP 추가 -->								
		<dependency>								
			<groupId>com.zaxxer</groupId>							
			<artifactId>HikariCP</artifactId>							
			<version>2.7.8</version>							
		</dependency>								

		<!-- MyBatis 추가 -->								
		<dependency>								
			<groupId>org.mybatis</groupId>							
			<artifactId>mybatis</artifactId>							
			<version>3.4.6</version>							
		</dependency>								

		<!-- MyBatis-spring 추가 -->								
		<dependency>								
			<groupId>org.mybatis</groupId>							
			<artifactId>mybatis-spring</artifactId>							
			<version>1.3.2</version>							
		</dependency>								

		<!-- Log4jdbc 추가 -->								
		<dependency>								
			<groupId>org.bgee.log4jdbc-log4j2</groupId>							
			<artifactId>log4jdbc-log4j2-jdbc4</artifactId>							
			<version>1.16</version>							
		</dependency>
				
		<!-- AspectJ -->
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjrt</artifactId>
			<version>${org.aspectj-version}</version>
		</dependency>	
		
		<!-- Logging -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>${org.slf4j-version}</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>jcl-over-slf4j</artifactId>
			<version>${org.slf4j-version}</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>${org.slf4j-version}</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.17</version>
			<exclusions>
				<exclusion>
					<groupId>javax.mail</groupId>
					<artifactId>mail</artifactId>
				</exclusion>
				<exclusion>
					<groupId>javax.jms</groupId>
					<artifactId>jms</artifactId>
				</exclusion>
				<exclusion>
					<groupId>com.sun.jdmk</groupId>
					<artifactId>jmxtools</artifactId>
				</exclusion>
				<exclusion>
					<groupId>com.sun.jmx</groupId>
					<artifactId>jmxri</artifactId>
				</exclusion>
			</exclusions>
			<!-- Log4j 컴파일 에러 대책으로 인해 코멘트 처리 -->					
			<!-- <scope>runtime</scope> -->	
		</dependency>

		<!-- @Inject -->
		<dependency>
			<groupId>javax.inject</groupId>
			<artifactId>javax.inject</artifactId>
			<version>1</version>
		</dependency>
				
		<!-- Servlet (servlet-api 버전 갱신) -->								
		<dependency>								
			<groupId>javax.servlet</groupId>							
			<artifactId>javax.servlet-api</artifactId>							
			<version>3.1.0</version>							
			<scope>provided</scope>							
		</dependency>								
		<dependency>		
			<groupId>javax.servlet.jsp</groupId>							
			<artifactId>jsp-api</artifactId>							
			<version>2.1</version>							
			<scope>provided</scope>							
		</dependency>								
		<dependency>								
			<groupId>javax.servlet</groupId>							
			<artifactId>jstl</artifactId>							
			<version>1.2</version>							
		</dependency>
	
		<!-- Test -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<scope>test</scope>
		</dependency> 
		
		<!-- Lombok 추가 -->								
		<dependency>								
			<groupId>org.projectlombok</groupId>							
			<artifactId>lombok</artifactId>							
			<version>1.18.0</version>							
			<scope>provided</scope>		
		</dependency>       
	</dependencies>
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-eclipse-plugin</artifactId>
                <version>2.9</version>
                <configuration>
                    <additionalProjectnatures>
                        <projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
                    </additionalProjectnatures>
                    <additionalBuildcommands>
                        <buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand>
                    </additionalBuildcommands>
                    <downloadSources>true</downloadSources>
                    <downloadJavadocs>true</downloadJavadocs>
                </configuration>
            </plugin>
            <plugin>
            	<!-- maven-compiler-plugin java 버전 갱신 -->
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.5.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <compilerArgument>-Xlint:all</compilerArgument>
                    <showWarnings>true</showWarnings>
                    <showDeprecation>true</showDeprecation>
                </configuration>
            </plugin>
            <!-- 메이븐 플러그인 추가 : 자바 기반 스프링 프로젝트용 -->
            <plugin>
            	<groupId>org.apache.maven.plugins</groupId>
            	<artifactId>maven-war-plugin</artifactId>
            	<version>3.2.0</version>
            	<configuration>
            		<failOnMissingWebXml>false</failOnMissingWebXml>
            	</configuration>
            </plugin>
            
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.2.1</version>
                <configuration>
                    <mainClass>org.test.int1.Main</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

 

 


src/main/java

com.spms.config

RootConfig.java

 

자바 설정 기반 스프링에서는 XML 대신 설정 파일을 작성해야하며 @Configuration 이라는 어노테이션을 이용해서 해당 클래스의 인스턴스를 이용해 설정 파일을 대신한다.

...더보기
package com.spms.config;

import org.springframework.context.annotation.Configuration;

@Configuration
public class RootConfig {

}

 


src/main/java

com.spms.config

WebConfig.java

 

web.xml 를 대신하는 클래스로 AbstractAnnotationConfigDispatcherServletInitializer 라는 추상 클래스를 상속한다.

상속받은 추상메서드들 중 getRootConfig() 클래스는 root-context.xml 을 대신하는 클래스를 지정한다.

...더보기
package com.spms.config;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class WebConfig extends AbstractAnnotationConfigDispatcherServletInitializer   {

	@Override
	protected Class<?>[] getRootConfigClasses() {
	    return new Class[] {RootConfig.class};
	}

	@Override
	protected Class<?>[] getServletConfigClasses() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	protected String[] getServletMappings() {
		// TODO Auto-generated method stub
		return null;
	}

}

톰캣 서버를 기동하면 간단하게 스프링 관련 로그가 기록된다.

...더보기
9월 28, 2019 5:32:24 오후 org.apache.catalina.startup.VersionLoggerListener log
정보: 서버 버전 이름:        Apache Tomcat/9.0.24
9월 28, 2019 5:32:24 오후 org.apache.catalina.startup.VersionLoggerListener log
정보: Server 빌드 시각:          Aug 14 2019 21:16:42 UTC
9월 28, 2019 5:32:24 오후 org.apache.catalina.startup.VersionLoggerListener log
정보: Server 버전 번호:         9.0.24.0
9월 28, 2019 5:32:24 오후 org.apache.catalina.startup.VersionLoggerListener log
정보: 운영체제 이름:               Windows 10
9월 28, 2019 5:32:24 오후 org.apache.catalina.startup.VersionLoggerListener log
정보: 운영체제 버전:            10.0
9월 28, 2019 5:32:24 오후 org.apache.catalina.startup.VersionLoggerListener log
정보: 아키텍처:          amd64
9월 28, 2019 5:32:24 오후 org.apache.catalina.startup.VersionLoggerListener log
정보: 자바 홈:             C:\Program Files\Java\jdk1.8.0_221\jre
9월 28, 2019 5:32:24 오후 org.apache.catalina.startup.VersionLoggerListener log
정보: JVM 버전:           1.8.0_221-b11
9월 28, 2019 5:32:24 오후 org.apache.catalina.startup.VersionLoggerListener log
정보: JVM 벤더:            Oracle Corporation
9월 28, 2019 5:32:24 오후 org.apache.catalina.startup.VersionLoggerListener log
정보: CATALINA_BASE:         C:\dev\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0
9월 28, 2019 5:32:24 오후 org.apache.catalina.startup.VersionLoggerListener log
정보: CATALINA_HOME:         C:\dev\apache-tomcat-9.0.24
9월 28, 2019 5:32:24 오후 org.apache.catalina.startup.VersionLoggerListener log
정보: 명령 행 아규먼트: -Dcatalina.base=C:\dev\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0
9월 28, 2019 5:32:24 오후 org.apache.catalina.startup.VersionLoggerListener log
정보: 명령 행 아규먼트: -Dcatalina.home=C:\dev\apache-tomcat-9.0.24
9월 28, 2019 5:32:24 오후 org.apache.catalina.startup.VersionLoggerListener log
정보: 명령 행 아규먼트: -Dwtp.deploy=C:\dev\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps
9월 28, 2019 5:32:24 오후 org.apache.catalina.startup.VersionLoggerListener log
정보: 명령 행 아규먼트: -Djava.endorsed.dirs=C:\dev\apache-tomcat-9.0.24\endorsed
9월 28, 2019 5:32:24 오후 org.apache.catalina.startup.VersionLoggerListener log
정보: 명령 행 아규먼트: -Dfile.encoding=UTF-8
9월 28, 2019 5:32:24 오후 org.apache.catalina.core.AprLifecycleListener lifecycleEvent
정보: APR 버전 [1.7.0]을(를) 사용한, APR 기반 Apache Tomcat Native 라이브러리 [1.2.23]을(를) 로드했습니다.
9월 28, 2019 5:32:24 오후 org.apache.catalina.core.AprLifecycleListener lifecycleEvent
정보: APR 용량정보들: IPv6 [true], sendfile [true], accept filters [false], random [true].
9월 28, 2019 5:32:24 오후 org.apache.catalina.core.AprLifecycleListener lifecycleEvent
정보: APR/OpenSSL 설정: useAprConnector [false], useOpenSSL [true]
9월 28, 2019 5:32:24 오후 org.apache.catalina.core.AprLifecycleListener initializeSSL
정보: OpenSSL이 성공적으로 초기화되었습니다: [OpenSSL 1.1.1c  28 May 2019]
9월 28, 2019 5:32:25 오후 org.apache.coyote.AbstractProtocol init
정보: 프로토콜 핸들러 ["http-nio-80"]을(를) 초기화합니다.
9월 28, 2019 5:32:25 오후 org.apache.coyote.AbstractProtocol init
정보: 프로토콜 핸들러 ["ajp-nio-8009"]을(를) 초기화합니다.
9월 28, 2019 5:32:25 오후 org.apache.catalina.startup.Catalina load
정보: [845] 밀리초 내에 서버가 초기화되었습니다.
9월 28, 2019 5:32:25 오후 org.apache.catalina.core.StandardService startInternal
정보: 서비스 [Catalina]을(를) 시작합니다.
9월 28, 2019 5:32:25 오후 org.apache.catalina.core.StandardEngine startInternal
정보: 서버 엔진을 시작합니다: [Apache Tomcat/9.0.24]
9월 28, 2019 5:32:27 오후 org.apache.catalina.core.ApplicationContext log
정보: 1 Spring WebApplicationInitializers detected on classpath
9월 28, 2019 5:32:27 오후 org.apache.jasper.servlet.TldScanner scanJars
정보: 적어도 하나의 JAR가 TLD들을 찾기 위해 스캔되었으나 아무 것도 찾지 못했습니다. 스캔했으나 TLD가 없는 JAR들의 전체 목록을 보시려면, 로그 레벨을 디버그 레벨로 설정하십시오. 스캔 과정에서 불필요한 JAR들을 건너뛰면, 시스템 시작 시간과 JSP 컴파일 시간을 단축시킬 수 있습니다.
9월 28, 2019 5:32:27 오후 org.apache.catalina.core.ApplicationContext log
정보: Initializing Spring root WebApplicationContext
INFO : org.springframework.web.context.ContextLoader - Root WebApplicationContext: initialization started
INFO : org.springframework.web.context.support.AnnotationConfigWebApplicationContext - Refreshing Root WebApplicationContext: startup date [Sat Sep 28 17:32:27 JST 2019]; root of context hierarchy
INFO : org.springframework.web.context.support.AnnotationConfigWebApplicationContext - Registering annotated classes: [class com.spms.config.RootConfig]
INFO : org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor - JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
INFO : org.springframework.web.context.ContextLoader - Root WebApplicationContext: initialization completed in 898 ms
9월 28, 2019 5:32:28 오후 org.apache.catalina.core.ApplicationContext log
정보: Initializing Spring FrameworkServlet 'dispatcher'
INFO : org.springframework.web.servlet.DispatcherServlet - FrameworkServlet 'dispatcher': initialization started
INFO : org.springframework.web.context.support.AnnotationConfigWebApplicationContext - Refreshing WebApplicationContext for namespace 'dispatcher-servlet': startup date [Sat Sep 28 17:32:28 JST 2019]; parent: Root WebApplicationContext
INFO : org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor - JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
INFO : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter - Looking for @ControllerAdvice: WebApplicationContext for namespace 'dispatcher-servlet': startup date [Sat Sep 28 17:32:28 JST 2019]; parent: Root WebApplicationContext
INFO : org.springframework.web.servlet.DispatcherServlet - FrameworkServlet 'dispatcher': initialization completed in 486 ms
9월 28, 2019 5:32:28 오후 org.apache.coyote.AbstractProtocol start
정보: 프로토콜 핸들러 ["http-nio-80"]을(를) 시작합니다.
9월 28, 2019 5:32:28 오후 org.apache.coyote.AbstractProtocol start
정보: 프로토콜 핸들러 ["ajp-nio-8009"]을(를) 시작합니다.
9월 28, 2019 5:32:28 오후 org.apache.catalina.startup.Catalina start
정보: 서버가 [3,513] 밀리초 내에 시작되었습니다.
반응형