Recent Posts
Recent Comments
Link
06-30 12:53
Today
Total
관리 메뉴

삶 가운데 남긴 기록 AACII.TISTORY.COM

Spring MVC maven jdk11 tomcat9 mysql5 mybatis3 설정 본문

DEV&OPS/Java

Spring MVC maven jdk11 tomcat9 mysql5 mybatis3 설정

ALEPH.GEM 2023. 1. 17. 23:07

 

Spring MVC 구조
Spring MVC 시퀀스 다이어그램

 

 

 

JDK 설치

오라클 사이트에서 JDK를 다운받아서 설치합니다.

여기서는 JDK11을 기준으로 합니다.

설치한 후에는 환경 변수에서 JAVA_HOME 을 등록하고 JDK가 설치된 경로를 지정해줍니다.

환경변수의 PATH에는 %JAVA_HOME%bin 으로 저장합니다.

설정이 완료된 뒤에는 명령프롬프트(cmd)에서 javac 명령어를 입력해서 컴파일러가 정상 실행되는지 확인합니다.

 

 

이클립스(STS, 전자정부프레임워크) 설정

Lombok 라이브러리의 안정성 때문에 이클립스를 JRE환경이 아닌 JDK환경에서 구동되도록 설정을 변경합니다. eclipse.ini(혹은 sts.ini) 파일의 상단에 아래와 같은 내용을 추가합니다. (윈도우 경로 기준)

-vm
JDK설치경로\bin\javaw.exe

이클립스 한글 인코딩(UTF-8) 확인

메뉴> Window > Preferences > General > Workspace
메뉴> Window > Preferences > Web > HTML, CSS, JSP 등 확인.

 

 

프로젝트 생성

이클립스에서 spring legacy 프로젝트를 선택하고 spring mvc 프로젝트를 생성합니다.

 

 

프로젝트 JDK 버전 변경

여기서는 JDK11 과 tomcat9 을 기준으로 작성합니다.

Project > Properties > Project Facets 에서 설치된 JDK버전으로 변경합니다.
Project > Properties > Java Compiler 에서 설치된 JDK버전으로 변경합니다.

 

 

 

Maven 빌드 도구

maven은 프로젝트에 필요한 의존적인 라이브러리들을 자동으로 관리합니다.

STS나 전자정부프레임워크는 maven을 내장하고 있습니다.

pom.xml 파일을 통해서 maven 설정을 변경 할 수 있습니다.

 

 

Spring 및 라이브러리 버전 변경

pom.xml의 수정을 통해 spring의 버전을 변경 할 수 있습니다.

Spring legacy프로젝트로 생성하게 되면 spring3가 기본값이지만 여기서는 jdk11, spring4 을 기준으로 합니다.

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

 

maven-compiler-plugin 의 JDK버전을 수정 합니다.

JDK11을 사용하는 경우 maven-compiler-plugins 버전을 3.7 이상으로 해주어야 합니다.

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <source>11</source>
                    <target>11</target>
                    <compilerArgument>-Xlint:all</compilerArgument>
                    <showWarnings>true</showWarnings>
                    <showDeprecation>true</showDeprecation>
                </configuration>
            </plugin>

 

테스트를 위한 spring-test, DB연결을 위한 spring-jdbc, spring-tx, AOP를 위한 spring-aop 를 추가합니다.

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>

 

테스트를 위한 junit  라이브러리의 버전을 변경합니다.

        <!-- Test -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

 

controller test를 위한 기능을 사용하기 위해 servlet 버전을 2.5에서 3.1.0 으로 버전을 변경 합니다. 

servlet 패키지 명이 2.5는 java로 시작하지만 3.1에서는 javax 로 시작하는 것을 유의 하십시오.

더불어 jstl, json등 필요한 라이브러리도 추가합니다.

<!-- Servlet --> 
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>
<!-- JSTL -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>
<!-- JSON -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.6</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-xml</artifactId>
    <version>2.9.6</version>
</dependency>
<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.2</version>
</dependency>

※ 변경된 프로젝트 pom.xml 설정을 적용하려면 프로젝트를 우클릭 후 Maven > Update Project 를 실행합니다.

 

 

Lombok 라이브러리 설치

https://projectlombok.org 에서 jar 파일을 다운 받을 수 있습니다. 

Lombok은 bean객체로 쓰이는 클래스들을 @Data 어노테이션 등으로 손쉽게 관리해줍니다.
명령프롬프트에서 java -jar lombok.jar 으로 실행합니다.
이클립스 실행파일 경로를 지정해주면 해당 경로에 lombok.jar 가 설치된 것을 확인 할 수 있습니다.
기존 이클립스 바로가기를 삭제 후 바로가기를 다시 생성하십시오.
그리고 pom.xml에 아래와 같이 추가합니다.

        <!-- Lombok -->    
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.24</version>
            <scope>provided</scope>
        </dependency>

lombok.jar 를 이클립스 프로젝트의 build path에 libraries 에 추가하고 (Web) Deployment Assembly 항목에도 해당 jar 파일을 추가합니다. 그래야 WAS에 배포시에도 적용이 됩니다.

pom.xml에서 기존 log4j라이브러리가 1.2.15로 설정되어 있지만 기존 버전을 삭제하고 아래처럼 1.2.17 버전을 추가합니다. lombok사용시 문제가 생길 수 있기 때문입니다.

		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.17</version>
		</dependency>

 

 

Tomcat 설치

http://tomcat.apache.org 에서 다운 받을 수 있습니다. 

여기서는 Tomcat 9 버전을 기준으로 합니다.
이클립스 메뉴에서 windows > preferences > server > Runtime Evironments 에서 해당 tomcat이 설치된 폴더를 지정합니다.

 

 

Database 연결 세팅

여기서는 MySQL 5를 기준으로 합니다.
그리고 Database 스키마의 문자셋 UTF-8 등과 프로젝트의 문자셋을 확인하십시오.

        <dependency>
        	<groupId>mysql</groupId>
        	<artifactId>mysql-connector-java</artifactId>
        	<version>5.1.36</version>
        </dependency>

 

 

커넥션 풀(DataSource) 설정

여기서는 spring-jdbc 를 이용하여 커넥션 풀 설정을 해보겠습니다.

src/main/webapp/WEB-INF/spring/root-context.xml 수정합니다.

eclipse에서 source 화면 하단 namespace 탭을 열고 aop, beans, context, jdbc, mybatis-spring, tx, mvc 항목에 체크해서 xmlns 항목에 자동 추가되도록 합니다.

DB연결 정보는 자신의 설정에 맞도록 수정합니다.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:jdbc="http://www.springframework.org/schema/jdbc"
	xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.3.xsd
		http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
		http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd
		http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
	
	<!-- Root Context: defines shared resources visible to all other web components -->
	<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy"></property>
		<property name="url" value="jdbc:log4jdbc:mysql://서버주소:3306/db이름?useUnicode=yes&amp;characterEncoding=utf8"></property>
		<property name="username" value="testuser"></property>
		<property name="password" value="testpassword"></property>
	</bean>	
</beans>
?useUnicode=yes&amp;characterEncoding=utf8

는 한글 인코딩을 위해 추가한 부분입니다.

 

 

MyBatis 설정

pom.xml에 MyBatis 와 log4jdbc 라이브러리를 추가합니다.

        <!-- Mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.5</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.2</version>
        </dependency>
        <!-- log4jdbc mybatis 로깅 -->
        <dependency>
            <groupId>org.bgee.log4jdbc-log4j2</groupId>
            <artifactId>log4jdbc-log4j2-jdbc4</artifactId>
            <version>1.16</version>
        </dependency>

 

SQLSessionFactory 설정: root-context.xml 을 수정합니다. dataSource bean 다음에 추가하면 됩니다.

<!-- Mybatis Session Factory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"></property>
    <property name="configLocation" value="classpath:/mybatis-config.xml"></property>
    <property name="mapperLocations" value="classpath:/mappers/**/*Mapper.xml"></property> <!-- mappers 폴더 내 Mapper.xml로 끝나는 모든 파일 인식 -->
</bean>

 

SQLSession templete 설정: root-context.xml 을 수정합니다.  위 bean 태그 아래 바로 이어서 추가하면 됩니다.

<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate" destroy-method="clearCache">
    <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"></constructor-arg>
</bean>

 

root-context.xml 에 위 내용 바로 아래에 이어서 spring에서 스캔할 dao 객체, 서비스 객체들이 있는 패키지를 지정합니다.

<!--  @Repository로 등록된 DAO 클래스(컴포넌트)들을 스캔 -->
<context:component-scan base-package="com.example.dao"></context:component-scan>
<!-- 서비스 컴포넌트 스캔 -->
<context:component-scan base-package="com.example.service"></context:component-scan>

 

src/main/resources 경로에 mybatis-config.xml 파일을 추가해놓고 나중에 프로젝트를 코딩하면서 내용을 추가 합니다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <typeAliases>
        <package name="com.example.vo" /> <!--해당 패키지에 java vo(DTO) 객체 클래스가 있어야 함 -->
    </typeAliases>
</configuration>

 

src/main/resources 폴더에 log4jdbc.log4j2.properties 파일과 logback.xml 파일을 추가합니다.

log4jdbc.log4j2.properties

log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
#SQL 로그의 자동 줄바꿈을 위해 아래 설정을 해줄 필요가 있음
log4jdbc.dump.sql.maxlinelength=0

logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<include resource="org/springframework/boot/logging/logback/base.xml"/>
	
	<!-- log4jdbc-log4j2 -->
	<logger name="jdbc.sqlonly"			level="DEBUG" />
	<logger name="jdbc.sqltiming"		level="INFO" />
	<logger name="jdbc.audit"			level="WARN" />
	<logger name="jdbc.resultset"		level="ERROR" />
	<logger name="jdbc.resultsettable"	level="ERROR" />
	<logger name="jdbc.connection"		level="INFO" />
</configuration>

log4j.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

	<!-- Appenders -->
	<appender name="console" class="org.apache.log4j.ConsoleAppender">
		<param name="Target" value="System.out" />
		<layout class="org.apache.log4j.PatternLayout">
			<!-- <param name="ConversionPattern" value="%-5p: %c - %m%n" /> -->
			<param name="ConversionPattern" value="[%d] [%-5p] (%F:%L) [%c{1}] %m%n" />
		</layout>
	</appender>
	<appender name="FILE" class="org.apache.log4j.DailyRollingFileAppender">
		<param name="File" value="MetaWeb.log"/>
		<param name="datePattern" value="'.'yyyy-MM-dd" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="[%d LV:%5p CL:%c] %m%n"/>
		</layout>     
	</appender>
	
	<!-- Application Loggers -->
	<logger name="어플리케이션의 패키지 경로(예: com.aacii)">
		<level value="info" />
	</logger>
	
	<!-- 3rdparty Loggers -->
	<logger name="org.springframework.core">
		<level value="warn" />
	</logger>
	
	<logger name="org.springframework.beans">
		<level value="warn" />
	</logger>
	
	<logger name="org.springframework.context">
		<level value="warn" />
	</logger>

	<logger name="org.springframework.web">
		<level value="warn" />
	</logger>
	
	<!-- SQL Logger -->
	<logger name="jdbc.connection" additivity="false">
		<level value="warn" />
		<appender-ref ref="console"/> 
	</logger>
	
	<logger name="jdbc.audit" additivity="false"> 
		<level value="warn"/>  
		<appender-ref ref="console"/> 
	</logger> 
    
	<logger name="jdbc.resultset" additivity="false">
		<level value="warn" />
		<appender-ref ref="console"/> 
	</logger>
	
	<logger name="jdbc.sqlonly" additivity="false"> 
		<level value="info"/> 
		<appender-ref ref="console"/> 
	</logger>
     
	<logger name="jdbc.resultsettable" additivity="false"> 
		<level value="debug"/>  
		<appender-ref ref="console"/> 
	</logger> 
	
	<logger name="jdbc.sqltiming" additivity="false">
		<level value="warn" />
		<appender-ref ref="console"/> 
	</logger>

	<!-- Root Logger -->
	<root>
		<priority value="warn" />
		<appender-ref ref="console" />
	</root>
	
</log4j:configuration>

위 항목중에 <!-- SQL Logger --> 항목 부분을 추가해서 SQL 로그를 볼수 있도록 설정합니다.

모든 로그를 info 레벨로 하면 너무 많은 로그가 출력되기 때문에 sqlonly 부분과 resultsettable 부분만 info 레벨로 설정해 줍니다. 

 

 

 

 

한글 (UTF-8) 인코딩 필터

src/main/webapp/WEB-INF/web.xml 에 아래와 같이 한글 처리 필터를 추가합니다.

    <filter>
        <filter-name>encoding</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>encoding</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

 

JSP 한글 설정

<%@ page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>

<html>
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

</head>
</html>

 

 

server.xml  URI 인코딩 설정

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>

 

 

 

 

 

 

 
 
728x90

'DEV&OPS > Java' 카테고리의 다른 글

Spring MVC 다국어 처리  (0) 2023.01.18
Spring Web Project 한글 설정  (0) 2023.01.18
Spring AOP  (0) 2023.01.16
Spring 어노테이션  (0) 2023.01.13
Spring 의존성 주입과 제어의 역전  (0) 2023.01.13