Spring- 테스트 코드 개념, 마이바티스 세팅

Hwawon_2·2022년 4월 4일

jsp에서는 db와 자바가 연결되었는지 확인하기 위해서는
반드시 DAO를 먼저 생성하고
서버를 돌려서 db와 접속하는 로직을 이용해서
콘솔창에 뜨는 메시지를 보고 연결여부를 확인했었습니다.
그러나 테스트 코드를 작성하면, 서버 작동 없이도 확인할 수 있습니다.

1.Pom.xml에서 junit을 찾아 버전 4.7-> 4.12로 변경하기

2. Mvnrepository에서 spring=test 검색해 스프링 버전과 동일하게 세팅



복사 붙여넣기

  1. Junit과 Spring-test가 제대로 들어갔는지 확인


    버전 변경



    롬봄 1.1822버전 입력


    SpringBoard - 우클릭 maven - Update Project - 체크하고 ok누르면
    JavaSE-1.6 -> JavaSE-1.8 로 변경


  2. Test코드를 작성하는 src/test/java 하단에 테스트용 파일 생성
    com.ict.controller/ 우클릭 package / com.ict.dao 생성

    (dao - db연결체크할려고 만드는것)
    com.ict.dao / 우클릭 class / OjdbcConnectionTest 생성


롬복의 Log4j기능을 이용한 로깅을 위해 클래스명 위에 @Log4j입력
Class.forName = 너가 연결하는 DB는 오라클이다.


테스트 코드는 @Test가 붙은 메서드를 메인메서드처럼 간주합니다.

(Oracle 11g버전기준은 jdbc:oracle:thin:@localhost:1521:XE
Oracle 18c버전기준은 jdbc:oracle:thin:@localhost:1521:XEPDB1) -DB주소 설정
mytest
mytest - DB내 계정 설정
@Test코드 작성

  • @Test가 붙은 메서드를 테스트 코드 실행시 실제로 실행합니다.
  • 자바 1.7이후로 JDBC 코드는 반드시 try~catch구문을 사용해야합니다.
    -File()은 따로 import를 해야하고, 연결 실패시 사유를 보여줍니다.

실행 해보면
우클릭 run as / Junit Test 실행

초록불이 나오면 db연결이 잘된겁니다.
(빨간불은 오류)

커넥션 풀 도입

커넥션 풀은 DAO가 하나인 경우 접속자가 여럿 몰렷을 때 하나의 DAO가 모든 요청을 처리할 수 없어
지연이 발생하거나 서버가 터지는 것을 방지하기 위해
DAO를 요청량에 따라 가변적으로 생성하여
많은 요청도 여러 개의DAO러 대응 할수 있도록 도와줌

스프링에서는 Hikari-cp를 씀
Mvnrepository 에서 Hikari-cp를 복사해서 붙여줍니다.

root-context.xml 내부에 bean설정을 합니다.
hikariCP에 접속정보를 입력한 다음

커넥션풀을 담당하는 DataSource 객체에 집어 넣어줍니다

com.ict.dao / 우클릭 new / class /OracleConnectionPoolTest 생성
커넥션풀 연결은 @RunWitch어노테이션과
빈 컨테이너 내부에 생성된 요소를 클래스로 가져오는 @ContextConfiguration("경로")가 같이 적어야 합니다.
커넥션 풀을 하기 위해 필요한 요소 3개

데이터 소스라는 타입이 있는데
데이터 소스를 맞춰서 오토와이어로 주입

file:src/main/webapp/WEB-INF/spring/root-context.xml 여기 주소에
DataSource 만들었던걸 여기에 @Autowired 이용해서 여기에 껴달라

(실행했을때 녹색이 나오면 성공)

마이바티스 연결하기

마이바티스는?
자바 코드 내에 SQL 구문을 String 형태로 작성해서 쿼리문을 완성시켜 전달하는 방식이었습니다.
이 방식의 최대 단점은 자바 코드와 SQl 구문이라는 이질적인 두 개의 구문이 하나의 로직에 섞어서 가독성을 채니는 문제가 있었고 이를 해결하기 위해 자바 로직과 SQl 구문을 분리할 목적으로 마이바티스를 사용합니다.

마이바티스 세팅
Mvnrepository 에서 mybatis-spring , Mybatis를 복사해서 붙여줍니다.

Mybatis-spring이 스프링의 실팽문을 받아 mybatis에 전달하는 역할을 합니다.

Mvnrepository 에서 Spring-tx, spring-jdbc를 5.0.7버전에 맞게 세팅

데이터소스를 입력받은 sqlSessionFactory를 만들어 줍니다.
root-context.xml

테스트 코드는 아까 썻던 MySQLConnectionPoolTest.java를 재활용합니다.
위와 같이 SqlSessionFactory를 이용해 마이바티스에 명령이 들어가는지 체크합니다.
@Autowired 새로 선언하고 (빈컨테이너에 있는걸 가지고온것)

새로 작성합니다.

샐행후 콘솔창에 ibatis가 나와야 맞음


추가해주고 다시 돌려보면

둘다 나왔습니다 이 말은 둘다 실행됐다는 뜻 입니다.
테스트 수행시 @Test가 붙은 메서드 하나하나를 전부 실행함 그래서 보통 하나의 테스트가 끝나면 주석처리해서 언제든 실행은 가능하지만
현재는 실행이 안 되게 조치함

src/main/java 우클릭 new package com.ict.mapper 생성
com.ict.mapper / 우클릭 new / interpace / TimeMapper 생성
-> 마이바디스는 메서드 선언을 특이하게 인터페이스로 만듦
선언된 메서드의 구현은 xml파일로 진행

= 겟타임을 호출하면 db에 이 쿼리문을 날려라 SELECT SYSDATE from dual

Root-context.xml 하단의 namespace탭으로 가 mybatis-spring을 체크 합니다.
그리고 내부에는 아까 작성한 com.ict.mapper 패키지를 스캔하도록 합니다.

source로 와서 <mybatis-spring:scan base-package="com.ict.mapper"/>
작성해줍니다.

테스트 코드 작성을 위해 src/test/java 하위에 com.ict.persistence를 생성하고
테스트 코드를 작성합니다 .
com.ict.persistence / 우클릭 new / interpace / TimeMapperTests 생성

실행하면

시간이 나옵니다.

profile
코딩 일기장

0개의 댓글