이클립스에서 Spring Legacy Project를 생성하고 초기 설정을 완료하는 과정을 기록한다.
이클립스에 Spring Tools 3(Add-on for Spring Tools 4..) 이상 버전을 설치한 뒤 진행한다.
스프링 프로젝트에 이용할 도구들의 버전을 설정한다.
web.xml 파일의 기본설정을 진행한다.
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
https://java.sun.com/xml/ns/javaee/web-app_3_1.xsd">
</servlet-mapping>
아래에 다음 코드를 추가한다.<!-- UTF-8 관련 파라미터 설정 -->
<filter>
<filter-name>encodingFilterUTF8</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>encodingFilterUTF8</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- beans 관련 설정 -->
<context-param>
<param-name>spring.profiles.active</param-name>
<param-value>dev</param-value>
</context-param>
<context-param>
<param-name>spring.profiles.default</param-name>
<param-value>dev</param-value>
</context-param>
<context-param>
<param-name>spring.liveBeansView.mbeanDomain</param-name>
<param-value>dev</param-value>
</context-param>
프로젝트 루트의 pom.xml 파일을 열고 maven 관련 설정을 진행한다.
<properties>
태그 내에 적절한 버전을 입력해 준다.<properties>
<java-version>1.8</java-version>
<org.springframework-version>5.2.8.RELEASE</org.springframework-version>
<org.aspectj-version>1.9.6</org.aspectj-version>
<org.slf4j-version>1.7.30</org.slf4j-version>
</properties>
<plugins>
에서, maven-eclipse-plugin
버전을 수정해 준다.<plugin>
<artifactId>maven-eclipse-plugin</artifactId>
<version>2.10</version> ...
maven-compiler-plugin
버전과 configuration 설정을 수정해 준다.<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>${java-version}</source>
<target>${java-version}</target> ...
exec-maven-plugin
버전을 수정해 준다.<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>3.0.0</version> ...
자바 서블릿 관련 의존성을 다시 설정한다.
<!-- Servlet --> <dependency> <groupId>javax.servlet</groupId>
... </dependency>
부분을 삭제한다.
삭제한 부분에 Maven Repository를 검색하여 다음 도구들을 추가한다.
※ 예시 코드
<!-- java servlet 관련 -->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context-support -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.3</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.glassfish.web/javax.servlet.jsp.jstl -->
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>javax.servlet.jsp.jstl</artifactId>
<version>1.2.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.taglibs/taglibs-standard-impl -->
<dependency>
<groupId>org.apache.taglibs</groupId>
<artifactId>taglibs-standard-impl</artifactId>
<version>1.2.5</version>
</dependency>
<!-- lombok -->
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
<!-- MySQL connector, MyBatis -->
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.bgee.log4jdbc-log4j2/log4jdbc-log4j2-jdbc4.1 -->
<dependency>
<groupId>org.bgee.log4jdbc-log4j2</groupId>
<artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>
<version>1.16</version>
</dependency>
<!-- Spring JDBC, MyBatis -->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.3</version>
</dependency>
<!--Logging -->
부분을 찾도록 하자.)<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
<!-- Test -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${org.springframework-version}</version>
</dependency>
log4j와 Slf4j 관련 설정을 진행한다.
src/main/resources/log4j.xml 파일을 연다.
로그 출력 형식과 출력될 로그 종류를 설정한다.
※ 예시 코드
(logger 중에, 기본 패키지 이름을 설정해야 하는 부분은 직접 수정한다.)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<!-- 콘솔 출력 -->
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out" />
<!-- 로그 출력 패턴 -->
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss.SSS}][%-5p] %C{1}.%M(%F:%L) %m%n" />
</layout>
</appender>
<!-- 파일로 기록되는 로그 -->
<appender name="rollingFile" class="org.apache.log4j.RollingFileAppender">
<!-- 생성위치 -->
<param name="file" value="log/web.log" />
<param name="Append" value="true" />
<!-- 로그 파일 사이즈 -->
<param name="MaxFileSize" value="20mb" />
<!-- 최대 생성 파일수 -->
<param name="MaxBackupIndex" value="10" />
<!-- 로그 출력 패턴 -->
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss.SSS}][%-5p] %C{1}.%M(%F:%L) %m%n" />
</layout>
</appender>
<!-- 날짜별 에러 로그 -->
<appender name="errorFile" class="org.apache.log4j.DailyRollingFileAppender">
<!-- 에러 로그만 기록 -->
<param name="Threshold" value="ERROR" />
<!-- 생성위치 -->
<param name="File" value="log/error.log" />
<!-- 하루에 하나씩 날짜 이름으로 생성됨 -->
<param name="Append" value="true" />
<param name="DatePattern" value="'.'yyMMdd" />
<!-- 로그 출력 패턴 -->
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss.SSS}][%-5p] %C{1}.%M(%F:%L) %m%n" />
</layout>
</appender>
<!-- Application Loggers -->
<!-- 기본 패키지 하위의 모든 로그 출력 -->
<!-- <logger name="이곳에 기본 패키지 이름을 설정하고 주석을 제거합니다.">
<level value="debug" />
</logger>
-->
<!-- DATABASE 연동 관련 로그 설정 시작 -->
<logger name="org.apache.ibatis">
<level value="DEBUG" />
</logger>
<logger name="jdbc.sqlonly">
<level value="INFO" />
</logger>
<logger name="jdbc.sqltiming">
<level value="OFF" />
</logger>
<logger name="jdbc.audit">
<level value="OFF" />
</logger>
<logger name="jdbc.resultset">
<level value="OFF" />
</logger>
<logger name="jdbc.resultsettable">
<level value="DEBUG" />
</logger>
<logger name="jdbc.connection">
<level value="ERROR" />
</logger>
<logger name="log4jdbc.debug">
<level value="ERROR" />
</logger>
<!-- DATABASE 연동 관련 로그 설정 끝 -->
<!-- Root Logger -->
<root>
<appender-ref ref="console" />
<appender-ref ref="rollingFile" />
<appender-ref ref="errorFile" />
</root>
</log4j:configuration>
jdbc 관련 로그 기록을 위한 설정 파일을 추가한다.
log4jdbc.log4j2.properties
파일을 생성한다.log4jdbc.auto.load.popular.drivers=false
log4jdbc.drivers=com.mysql.cj.jdbc.Driver
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
log4jdbc.dump.sql.maxlinelength=0
log4jdbc.debug.stack.prefix=sql
log4jdbc.sqltiming.warn.threshold=0
log4jdbc.sqltiming.error.threshold=0
log4jdbc.dump.booleanastruefalse=false
log4jdbc.dump.fulldebugstacktrace=false
log4jdbc.statement.warn=false
log4jdbc.dump.sql.select=true
log4jdbc.dump.sql.insert=true
log4jdbc.dump.sql.update=true
log4jdbc.dump.sql.delete=true
log4jdbc.dump.sql.create=true
log4jdbc.dump.sql.addsemicolon=false
log4jdbc.trim.sql=true
log4jdbc.trim.sql.extrablanklines=true
log4jdbc.suppress.generated.keys.exception=false
상단 메뉴의 Window 클릭 - Preferences 열기
좌측 트리에서 Web-JSP files-Editor-Templates 선택
템플릿 목록에서 New JSP File(html 5)를 선택하고, Edit을 클릭한다.
아래의 코드를 붙여넣기한다.
※ JSP 파일 상단에 자바 코드 블록을 넣었을 때 공백이 생기는 것을 방지, 인코딩을 UTF-8로 설정하는 소스코드.
<%@ page language="java" contentType="text/html; charset=${encoding}"
pageEncoding="${encoding}"%>
<%@ page trimDirectiveWhitespaces="true" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="${encoding}">
<title>JSP Title</title>
</head>
<body>
${cursor}
</body>
</html>
Apply and Close.
src/main/webapp/WEB-INF/views/home.jsp
파일 내용도 수정해 준다.
※ 예시 코드
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ page trimDirectiveWhitespaces="true" %>
<html>
<head>
<title>Home</title>
<meta charset="utf-8" />
</head>
<body>
<h1>
Hello world!
</h1>
<P> The time on the server is ${serverTime}. </P>
</body>
</html>
프로젝트 이름에 우클릭, Run as - Run on Server 선택.
(※ 개별 파일을 선택한 채 Run을 시도하면, 경로 문제로 404 에러가 뜨니 주의.)
설정 중간중간에 파일을 저장할 때마다 프로젝트를 실행해 보는 것을 추천한다.
(에러 발생 위치를 쉽게 파악하기 위해서이다.)
웹브라우저에 다음과 같은 화면이 나온다면 성공.
필요한 경우 src/main/webapp/WEB-INF/appServlet/servlet-context.xml
파일을 수정한다.
모든 수정 코드는 </beans:beans>
앞에 위치하도록 한다. (=beans:beans 태그 안에 있으면 OK)
<!-- <resources mapping="/resources/**" location="/resources/" /> -->
<resources mapping="/assets/**" location="/WEB-INF/views/assets/" />
<!-- 스케줄링 어노테이션 선언 -->
<task:annotation-driven />
<!-- 스케줄러로 동작할 객체 생성 -->
<beans:bean id="scheduleJob" class="기본 패키지 경로.scheduler.Scheduler" />
<!-- 생성한 스케줄러 객체에 대한 작업 스케줄 지정 -->
<!-- method 이름을 지정하고 cron값을 수정하여 원하는 타이밍에 스케줄러를 동작시킨다.-->
<!-- task:scheduled 태그를 여러 개 생성하여 여러 개의 스케줄러를 동시에 지정할 수도 있다.-->
<task:scheduled-tasks>
<task:scheduled ref="scheduleJob" method="everySeconds" cron="* * * * * ?" />
</task:scheduled-tasks>
<!-- 인터셉터 -->
<interceptors>
<interceptor>
<mapping path="/**" />
<beans:bean id="appInterceptor" class="기본 패키지 경로.interceptor.AppInterceptor" />
</interceptor>
</interceptors>
<!-- 컨트롤러나 서비스의 구현체가 포함되어 있는 패키지 -->
<context:component-scan base-package="기본 패키지 경로.controllers" />
<context:component-scan base-package="기본 패키지 경로.service.impl" />
정리 잘 해놓으셨네요! 제 프로젝트 셋팅 하면서 velog 작성하는데 참고 했습니다. 그래서 글 하단에 링크 넣었습니다 :) 혹시 싫으시다면 말씀해주세요! 잘 보고 갑니다.