스프링 레거시 프로젝트에서 MVC프로젝트를 생성하고 시작한다.
필요 의존-
<!-- MySQL -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.11</version>
</dependency>
<!-- MyBatis 3.4.1 -->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.1</version>
</dependency>
<!-- MyBatis-Spring -->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
<!-- Spring-jdbc -->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- Spring-test -->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${org.springframework-version}</version>
</dependency>
mysql-connector-java 의 버전이 8.0.11인데 이는 JUnit의 테스트 과정에서 사용하는 커넥터 자바의 버전이 8.0.11이기 때문이다. 설정하지 않는다면 RunAs -> JUnitTest으로 실행해볼 경우
Unknown system variable 'query_cache_size' 라는 에러문구가 콘솔에 띄워질 것이다.
이후에는 webapp -> WEB-INF -> spring -> root-context.xml 파일을 건드리는데 이것은 view단 과 관련되지 않은 설정을 정의해두는 곳으로 DataBase정보에 대한 Bean 객체를 등록할 것이다.
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/스키마명?useSSL=false&serverTimezone=UTC" ></property>
<property name="username" value="유저명"></property>
<property name="password" value="패스워드"></property>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
</bean>
</beans>
MySql 의 버전 업에 따라 dataSource의 프로퍼티의 driverClassName의 Value가
com.mysql.jdbc.Driver 나 com.mysql.cj.jdbc.Driver 로 왔다갔다 할 수 있다.
또한 url 프로퍼티도 "jdbc:mysql://127.0.0.1:3306/spring5fs?useSSL=false&;serverTimezone=UTC 를 주의해야하는데
-----밑의 에러가 도출된다.
Could not load the Tomcat server configuration at \Servers\Tomcat v7.0 Server at localhost-config. The configuration may be corrupt or incomplete.
"serverTimezone" 엔티티에 대한 참조는 ';' 구분자로 끝나야 합니다.
즉 각 엔티티에 대한 참조 값의 종료는 &; 로 끝나야한다는 뜻이다. 서버타임존을 사용하는 경우 & 로 마무리 해줘야한다.
jdbc:mysql://127.0.0.1:3306/스키마명?useSSL=false&characterEncoding=UTF-8&serverTimezone=UTC"로 마무리 되겠다.
------또한 테스트 과정 중 다른 에러도 도출 되는데
WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
getConnection 메서드에 useSSL 옵션과 서버타임존 옵션을 설정해주어야 된다는 이야기라고 한다.
SSL로 접속하려면 인증서가 필요한데, 발급받으려면 오픈소스인 openSSL를 다운받으셔서 발급받을 수 있다고 한다.
ssl를 통하지 않는다면 스니핑 공격을 통해서 전송되는 데이터나 로그인정보까지 탈취될 수 있다고하는데..
https://www.lesstif.com/system-admin/openssl-root-ca-ssl-6979614.html 이곳을 참조해보아야한다.
자 이제 테스트를 한다.
src/test/java에 MySQLConnectionTest클래스와 MyBatisTest클래스 를 만들어준다.
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "file:src/main/webapp/WEB-INF/spring/**/root-context.xml" })
public class MySQLConnectionTest {
@Autowired
private DataSource ds;
@Test
public void testConnection() {
try (Connection con = ds.getConnection()) {
System.out.println("\n >>>> Connection 출력 : " + con + "\n");
} catch (Exception e) {
e.printStackTrace();
}
}
}
@RunWith(SpringJUnit4ClassRunner.class)-> @RunWith에 Runner클래스를 설정하면 JUnit에 내장된 Runner대신 그 클래스를 실행한다.
@Test -> 테스트 메서드 지정, Exception 등으로 조건을 걸어 테스트 확인가능
@ContextConfiguration -> @ContextConfiguration의 locations 속성에는 xml형태의 애플리케이션 컨텍스트만 로딩 가능
@SpringApplicationConfiguration은 Spring Boot에서 class형태의 애플리케이션 컨텍스트를 로딩
출력 값을 받아보고 커넥션을 확인하고 다음 단계를 진행한다.
이번에는 Mybatis 의 주요 Component인 SqlSessionFactoryBean 과 SqlSession의 커넥팅을 확인해 볼 것이다.
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "file:src/main/webapp/WEB-INF/spring/**/root-context.xml" })
public class MyBatisTest {
@Autowired
private SqlSessionFactory sqlFactory;
@Test
public void testFactory() {
System.out.println("\n >>>>>> sqlFactory 출력: " + sqlFactory);
}
@Test
public void testSession() throws Exception {
try (SqlSession session = sqlFactory.openSession()) {
System.out.println(" >>>>> session 출력 : " + session + "\n");
} catch (Exception e) {
e.printStackTrace();
}
}
}
Spring frame work 에서는 하나하나 확인하며 Test하는 과정을 겪으며 개발을 해야하는 버릇이 필요하다고 한다.
'MyBatis' 카테고리의 다른 글
log4j.xml (0) | 2020.07.18 |
---|---|
Mybatis, 테이블 연동과 기본적인 DML 조작 (0) | 2020.07.18 |
4.Java 에노테이션으로 MyBatis 연동 및 테스트 (0) | 2020.07.13 |
3.MyBatis를 이용한 데이터 조회와 연동-log (0) | 2020.07.11 |
0.Basic.개발의 주요 구조. (0) | 2020.07.11 |