본문 바로가기

BE/Spring

[Spring] Test ( JUnit ), DB 연동 ( MyBatis 세팅, HikariCP 세팅 )

 

 

 

 

 

DB 연동

 

파일 세팅

!!! MemberDAO 파일 Interface 파일로 만들어야 함 주의 !!!

pom.xml 버전 세팅

 

프로젝트 우측 클릭 > maven > update project 클릭

 

web.xml 인코딩 추가

 

파일 세팅 완료

 

일반 xml 파일 세팅

 

일반 class 파일 세팅

 

Spring Bean Configuration File 생성 ( xml 파일 )

 

 

 

 

 

스프링에서는 JUnit 을 사용하여 테스트를 진행

 

JUnit 기능

 

 

 

 

 

JUnit 패키지 다운로드 및 적용

메이븐 레파지토리 검색하여 페이지 접속 후 spring-test 검색 >> 아무 버전이나 클릭 ( 버전은 아래서 바꿔줄 것이기 때문 ) >> 코드 복사

 

pom.xml 에 dependencies 태그 안에 붙여넣기 >> pom.xml 상단의 버전 copy >> 붙여넣은 코드에 version 복사한 것으로 바꾸기

 

프로젝트 우클릭 >> properties >> Java Build Path >> Libraries >> Add Library >> JUnit 선택 >> Next >> JUnit 4 선택 >> Finish >> Apply and Close

 

설치 완료


 

 

 

 

 

JUnit 을 사용하여 Test

 

컨트롤러 빈에 등록 ( 테스트 해볼 것임 ) >> testMember.xml 파일에 com.care.root 부터 모든 빈 객체를 테스트할때 사용하겠다라고 설정

 

- testMember.xml 파일에 설정하는 부분 -

웹 구동 파일이 많아 서버를 재시작하며 테스트 하기에 시간이 오래걸리는 경우 서버는 켜둔 상태로 빈 객체만 가져와서 객체가 정상적으로 작동하는지 테스트하기 위해 해당 xml 파일에 사용할 빈 객체의 범위를 설정하여 사용한다

 

TestMember.java 에 테스트 코드 작성 후 메소드에 마우스 올려둔 뒤 Ctrl + F11 눌러 JUnit 선택 후 확인 >> 빈 객체가 정상적으로 생성된 것 확인

 

MemberServiceImpl.java 에 MemberService 를 상속받은 뒤 @Service 어노테이션을 사용하여 빈 객체로 등록 >> Test 코드를 작성하여 assertNotNull 를 사용해서 해당 빈 객체가 null 값이 아니라 정상적으로 생성 되었는지 확인 ( 메소드에 커서 놓고 Ctrl + F11 ) >> 빈 객체가 null 이 아니라 정상주입 되었다면 결과가 초록색 바로 출력된다

 

create table test_mybatis(
    id number(4),
    name varchar2(20)
);

Oracle DB 에 테이블 추가

 

테이블 추가 완료

 

1. 마이바티스 프레임워크를 사용할 것임

2. 히카리 cp 를 사용해서 connection pool 기능을 사용할 것임

connection pool - 미리 DB 에 연결해 놓은 객체를 생성한뒤 연결 객체를 호출되는 곳에 빌려준다.

 

라이브러리 추가

HikariCP 라이브러리 검색 ( 3.3.1 버전 사용할 것임 ) >> 코드 복사 >> pom.xml 에 추가

 

Spring JDBC 검색 >> 아무 버전이나 가져온 뒤 pom.xml 에 붙여넣기 >> 버전 교체

 

MyBatis 라이브러리 설치 ( 버전 확인 후 설치 )

 

Spring 용 마이 MyBatis 도 라이브러리 설치 ( 버전 확인 후 설치 )

 

내 피씨의 오라클DB 버전 확인

 

오라클 DB 버전 11 버전 : ojdbc6

오라클 DB 버전 19 버전 이상 : ojdbc8

 

내 오라클 DB 버전과 동일한 버전의 라이브러리 선택 후 설치

 

pom.xml 저장하면 Maven Dependencies 에 추가한 내용들이 저장된 것 확인할 수 있음

 

라이브러리 설치 끝

 


 

 

 

 

 

DB 연결 설정

 

HikariCP 설정

HikariConfig.class 열기 >> 패키지이름과 class 이름 복사

 

root-context.xml 에 아까 복사한 [패키지이름].[클래스명] 을 class 에 입력 후 property 추가하여 해당 클래스의 변수인 username, password, jdbcUrl, driverClassName 의 값을 자신의 오라클 DB 설정 값으로 넣어준다

 

위에서 설정한 hikariConfig 빈을 매개변수로 생성자에 넣어서 HikariDataSource 클래스 빈을 ds 라는 이름으로 생성

 

 

 

 

 

마이바티스 설정

SqlSessionFactoryBean.class 열어서 패키지이름, 클래스 이름 저장

 

root-context.xml 에 마이바티스 관련된 빈 객체 저장 ( property 를 사용하여 dataSourse 변수에 위에서 설정한 ds 빈을 넣고 mapperLocations 변수에 src/main/resources/mapper/ 폴더 하위의 모든 폴더 내에 있는 Mapper.xml 로 끝나는 파일들을 설정해준다

 

memberMapper.xml 파일에 생성한 MemberDAO 인터페이스 파일을 등록

 

root-context.xml 작성

 

 

 

세팅 완료....


728x90

 

 

 

 

DB 연결 테스트

 

DAO 빈 객체가 정상적으로 연결되는지 확인 ( 메소드에 커서 후 Ctrl + F11 ) >> 정상 연결

 

DTO, DAO 작성

 

memberMapper.xml 에 insert 작성

 

DAO 테스트 코드 작성 >> 메소드에 커서 두고 Ctrl + F11 >> 초록색 바 ( 성공 )

 

추가한 내용 잘 적용되는지 sql developer 에서도 확인

 

위에서는 DAO 만 실행해서 코드를 진행시켰는데 이번엔 Service 에서 DTO 객체를 DAO 로 넘겨서 실행시킬때도 문제가 없는지 확인해볼 것임

 

Service 에 dao 에 dto 객체 전달하는 코드 작성

 

테스트 코드 실행 >> 성공 >> sql developer 에서도 확인

 

데이터 삭제하는 코드 테스트 할 것임 >> DAO 작성 >> memberMapper.xml 에 deleteUser 메소드에 대한 쿼리문 작성

 

테스트 메소드에 커서 둔 뒤 Ctrl + F11 하여 테스트 >> 성공 >> result 로 1 반환 ( 성공 )

 

 

 

 

 

Controller 로 요청을 받아 실행이 되는지 테스트

Controller ( Mock ) > Service > DAO 순으로 전체적인 테스트를 진행

Controller 작성 >> TestMock 클래스 파일 생성하여 Controller 의 접속 경로와 데이터 까지 받아서 테스트 진행 ( MockMvc 는 수동으로 import 해줘야 하므로 아래의 코드 넣어줘야 함 ) >> 메소드 클릭 후 실행

 

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.*;

Mock import 코드

 

코드 실행 시 200 으로 나오면 성공적으로 연결되었다는 의미, 초록색 바 ( 성공 ) >> sql developer 에서도 확인

 

테스트 코드이기 때문에 코드 실행 후 롤백 시키는 기능 추가 >> 테스트 코드를 아무리 실행시켜도 이젠 데이터가 저장되지 않음 ( 저장 이후 롤백되게 때문, 즉 실행이 정상적으로 되는지 확인만 하고 실제 데이터는 저장되지 않음 )

 

 

 

 

 

위에서 테스트가 정상적으로 실행되는 것이 확인되었기 때문에 실제로 구현

실제 웹 작성하여 구동

 

정상 구동 확인

 

728x90