참고만 하세요. 과정 기록용입니다.
챗 GPT에게 마이그레이션 방법을 물어보기로 했다.
기존 프로젝트는 삭제 후 새로 만들면서 myBatis Framework를 추가하지 않아서 나는 오류가 있어 기존 dependencie에 myBatis만 더 추가해 주었다.
<pom.properties>
#Generated by Maven Integration for Eclipse #Fri Jan 12 16:34:16 KST 2024 m2e.projectLocation=C\:\\Users\\ITWILL\\git\\Table_zzimkong\\Table_zzimkong m2e.projectName=Table_zzimkong groupId=com.table artifactId=zzimkong version=1.0.0-BUILD-SNAPSHOT
<application.properties>
# Application Configuration spring.application.name=Table_zzimkong # Maven Project Information project.groupId=com.table project.artifactId=zzimkong project.version=1.0.0-SNAPSHOT # Project Path (MacOS) project.location=/Users/ITWILL/git/Table_zzimkong/Table_zzimkong
- 여기서 모두 추가하면 안된다!! Maven 방식에서 gradle 방식으로 변환중이기 때문이다. Maven Project Information,Project Path 이두부분은 제거해준다.
# Application Configuration spring.application.name=Table_zzimkong
- 결과적으로 Application Configuration 한가지만 추가해주면 된다.
group = 'com.table' version = '1.0.0-SNAPSHOT'
- group 과 version은 build.gradle에 위의 방식으로 이미 추가되어 있다.
mybatis.config-location=classpath:/mybatis-config.xml
<log4j.xml>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "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/"> <!-- 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" /> </layout> </appender> <!-- Application Loggers --> <logger name="com.table.zzimkong"> <level value="info" /> </logger> <!-- 3rdparty Loggers --> <logger name="org.springframework.core"> <level value="info" /> </logger> <logger name="org.springframework.beans"> <level value="info" /> </logger> <logger name="org.springframework.context"> <level value="info" /> </logger> <logger name="org.springframework.web"> <level value="info" /> </logger> <!-- 이 부분부터 항목 추가 --> <!-- SQL Logger 추가 --> <!-- 1. jdbc.sqlonly : SQL 쿼리 문장에 대한 로그(전달인자 포함한 문장 표시) --> <logger name="jdbc.sqlonly" additivity="false"> <level value="info" /> <appender-ref ref="console" /> </logger> <!-- 2. jdbc.sqltiming : SQL 문장과 실행에 소요된 시간(밀리초)에 대한 로그 --> <logger name="jdbc.sqltiming" additivity="false"> <level value="info" /> <appender-ref ref="console" /> </logger> <!-- 3. jdbc.audit : JDBC 호출 정보에 대한 로그(ResultSet 결과값 제외) => 내용 많음 --> <!-- <logger name="jdbc.audit" additivity="false"> --> <!-- <level value="info" /> --> <!-- <appender-ref ref="console" /> --> <!-- </logger> --> <!-- 4. jdbc.result : ResultSet 객체 내용을 포함한 JDBC 호출 정보에 대한 로그 => 내용 많음 --> <!-- <logger name="jdbc.result" additivity="false"> --> <!-- <level value="info" /> --> <!-- <appender-ref ref="console" /> --> <!-- </logger> --> <!-- 5. jdbc.resultsettable : SELECT 실행 결과(데이터 테이블 = ResultSet 객체 내용) 에 대한 로그 --> <logger name="jdbc.resultsettable" additivity="false"> <level value="info" /> <appender-ref ref="console" /> </logger> <!-- 여기까지 항목 추가 --> <!-- Root Logger --> <root> <priority value="warn" /> <appender-ref ref="console" /> </root> </log4j:configuration>
<log4j2.xml>
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <!-- Appenders --> <Appenders> <!-- Console Appender --> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%-5p: %c - %m%n" /> </Console> </Appenders> <!-- Loggers --> <Loggers> <!-- Application Loggers --> <Logger name="com.table.zzimkong" level="info" additivity="false"> <AppenderRef ref="Console" /> </Logger> <!-- 3rd Party Loggers --> <Logger name="org.springframework.core" level="info" additivity="false"> <AppenderRef ref="Console" /> </Logger> <Logger name="org.springframework.beans" level="info" additivity="false"> <AppenderRef ref="Console" /> </Logger> <Logger name="org.springframework.context" level="info" additivity="false"> <AppenderRef ref="Console" /> </Logger> <Logger name="org.springframework.web" level="info" additivity="false"> <AppenderRef ref="Console" /> </Logger> <!-- SQL Loggers --> <!-- 1. jdbc.sqlonly : SQL 쿼리 문장에 대한 로그(전달인자 포함한 문장 표시) --> <Logger name="jdbc.sqlonly" level="info" additivity="false"> <AppenderRef ref="Console" /> </Logger> <!-- 2. jdbc.sqltiming : SQL 문장과 실행에 소요된 시간(밀리초)에 대한 로그 --> <Logger name="jdbc.sqltiming" level="info" additivity="false"> <AppenderRef ref="Console" /> </Logger> <!-- 3. jdbc.audit : JDBC 호출 정보에 대한 로그(ResultSet 결과값 제외) => 내용 많음 --> <!-- <Logger name="jdbc.audit" level="info" additivity="false"> <AppenderRef ref="Console" /> </Logger> <Logger name="jdbc.result" level="info" additivity="false"> <AppenderRef ref="Console" /> </Logger> --> <!-- 5. jdbc.resultsettable : SELECT 실행 결과(데이터 테이블 = ResultSet 객체 내용) 에 대한 로그 --> <Logger name="jdbc.resultsettable" level="info" additivity="false"> <AppenderRef ref="Console" /> </Logger> <!-- 여기까지 항목 추가 --> <!-- Root Logger --> <Root level="warn"> <AppenderRef ref="Console" /> </Root> </Loggers> </Configuration>
implementation 'org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16'
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator logging.level.net.sf.log4jdbc=DEBUG
Spring Boot에서 기본적으로 제공되어 제거가 가능한 요소들은 추가하지 않았다.
<web.xml>
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" 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_2_5.xsd"> <!-- The definition of the Root Spring Container shared by all Servlets and Filters --> <context-param> <!-- spring의 루트 애플리케이션 컨텍스트를 지정 --> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring/root-context.xml</param-value> </context-param> <!-- Creates the Spring Container shared by all Servlets and Filters --> <listener><!-- 루트 컨텍스트를 로드 --> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- Processes application requests --> <!-- Spring MVC의 DispatcherServlet을 설정하고, 해당 서블릿이 사용할 컨텍스트 파일 경로를 지정 --> <servlet><!-- 서블릿 이름(appServlet)과 서블릿 초기화 파라미터를 정의 --> <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><!-- DispatcherServlet이 처리할 URL 패턴(/)을 지정 --> <servlet-name>appServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!-- POST 방식 파라미터에 대한 한글 등의 인코딩 처리를 위한 필터 설정 --> <!-- CharacterEncodingFilter를 통해 POST 요청 시 UTF-8로 인코딩 --> <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> </web-app>
- Root Spring Container
- context-param : Spring의 루트 애플리케이션 컨텍스트를 지정
- listener : ContextLoaderListener를 통해 루트 컨텍스트를 로드
- DispatcherServlet
- Spring MVC의 DispatcherServlet을 설정하고, 해당 서블릿이 사용할 컨텍스트 파일 경로를 지정합니다.
- servlet : 서블릿 이름(appServlet)과 서블릿 초기화 파라미터를 정의
- servlet-mapping : DispatcherServlet이 처리할 URL 패턴(/)을 지정
- CharacterEncodingFilter
- filter : CharacterEncodingFilter를 통해 POST 요청 시 UTF-8로 인코딩
- filter-mapping : 필터가 모든 요청(/*)에 대해 동작하도록 설정
<application.properties>
# CharacterEncodingFilter spring.web.encoding.charset=UTF-8 spring.web.encoding.enabled=true spring.web.encoding.force=true
- Root Spring Container
- UTF-8인코딩 설정 추가해줌- DispatcherServlet / CharacterEncodingFilter
- DispatcherServlet : 자동으로 설정해줌
- CharacterEncodingFilter : 기본적으로 지원함
<root-context.xml>
<?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:mybatis-spring="http://mybatis.org/schema/mybatis-spring" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.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 --> <!-- HikariCP 라이브러리 사용을 위한 설정(커넥션풀 설정) --> <!-- 1. HikariCP 를 활용한 DB 접속 정보 설정 위해 HikariConfig 객체 설정(JDBC 기본 설정) --> <!-- com.zaxxer.hikari 패키지의 HikariConfig 클래스 지정 및 속성 설정 --> <!-- <bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig"> --> <!-- <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property> --> <!-- <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/study_spring5"></property> --> <!-- <property name="username" value="root"></property> --> <!-- <property name="password" value="1234"></property> --> <!-- </bean> --> <!-- SQL 로그를 위한 log4jdbc 라이브러리 관련 DBCP 정보 변경(driverClassName, jdbcUrl 속성만 변경) --> <bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig"> <property name="driverClassName" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy"></property> <property name="jdbcUrl" value="jdbc:log4jdbc:mysql://itwillbs.com:3306/c5d2308t2"></property> <property name="username" value="c5d2308t2"></property> <property name="password" value="1234"></property> </bean> <!-- 2. HikariCP 를 통해 커넥션을 관리하는 DataSource 객체(HikariDataSource) 설정 --> <!-- 생성자 파라미터(<constructor-arg ref="">)로 1번에서 생성한 HikariConfig 객체 전달 --> <!-- 주의! 1단계에서 입력한 정보가 일치하지 않을 경우 서버 실행 시점에 현재 단계에서 예외 발생 --> <bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource"> <constructor-arg ref="hikariConfig"></constructor-arg> </bean> <!-- 3. Connection 객체 생성, 쿼리 전달 및 결과 리턴 등의 작업을 수행할 SQLSessionFactory 객체 설정 --> <!-- MyBatis - Spring 연결을 담당하며, 내부적으로 SQLSession 객체를 통해 작업 수행 --> <!-- 주의! 1) 이전에 이미 DataSource 객체 설정이 완료되어 있어야 함 2) <bean> 태그의 id 값, class 값은 고정 3) <property> 태그의 name 속성의 dataSource, configLocation, mapperLocations 이름 고정 4) dataSource 속성의 ref 속성값은 2번에서 설정한 id 속성값 사용 5) configLocation, mapperLocations 속성(항목)에 지정된 각각의 파일(xml)이 실제 위치에 생성되어 있어야 함 (설정 항목 중 classpath 가 가리키는 기본 위치 : src/main/resources 패키지) --> <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:/com/table/zzimkong/mapper/*Mapper.xml"></property> </bean> <!-- >>>>>>>>>>>>>>>>>>>>> 트랜잭션 설정 추가 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> --> <!-- 내부 property 태그에 2번에서 설정한 datasource 객체지정 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> </bean> <!-- tx:anotation-driven 태그를 통해 생성한 트랜잭션 관리 객체 지정 --> <tx:annotation-driven transaction-manager="transactionManager"/> <!-- 4. MyBatis 연동에 사용될 객체(클래스)들의 패키지 위치 지정(기본 루트 패키지 지정) --> <mybatis-spring:scan base-package="com.table.zzimkong" /> </beans>
<application.properties>
# HikariConfig spring.datasource.driver-class-name=net.sf.log4jdbc.sql.jdbcapi.DriverSpy spring.datasource.url=jdbc:log4jdbc:mysql://itwillbs.com:3306/c5d2308t2 spring.datasource.username=c5d2308t2 spring.datasource.password=1234 # DataSource spring.datasource.type=com.zaxxer.hikari.HikariDataSource # SqlSessionFactory Bean mybatis.config-location=classpath:/mybatis-config.xml mybatis.mapper-locations=classpath:/com/table/zzimkong/mapper/*Mapper.xml
- Transaction Manager
- SpringBoot에서 기본적으로 제공된다.
<servlet-context.xml>
<?xml version="1.0" encoding="UTF-8"?> <beans:beans xmlns="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd"> <!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure --> <!-- Enables the Spring MVC @Controller programming model --> <annotation-driven /> <tx:annotation-driven/> <!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory --> <resources mapping="/resources/**" location="/resources/" /> <!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory --> <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> <!-- 폼에 파일 업로드 위해서 설정하면 그거 자동을 처리해주는놈 아이디값은 약속된거 써야됨--> <beans:bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <beans:property name="maxUploadSize" value="10485760"></beans:property> <beans:property name="defaultEncoding" value="UTF-8"></beans:property> </beans:bean> <context:component-scan base-package="com.table.zzimkong" /> </beans:beans>
<application.properties>
# View Resolver spring.mvc.view.prefix=/WEB-INF/views/ spring.mvc.view.suffix=.jsp # Multipart Resolver spring.servlet.multipart.max-file-size=10MB spring.servlet.multipart.max-request-size=10MB spring.servlet.multipart.default-encoding=UTF-8
- Annotation-driven / tx:annotation-driven
- SpringBoot에서 자동으로 활성화 된다.
- resources mapping
- SpringBoot에서 기본적으로 제공 된다.
- context:component-scan
- @SpringBootApplication을 통해 자동으로 처리된다.