테스트코드에서는 H2 DB를 사용하자!
H2 데이터베이스란?
H2는 자바 기반 오픈소스 RDBMS입니다.
주로 인 메모리 데이터베이스로 사용되며 기능 테스트할 때 유용합니다.
인 메모리 데이터베이스는 휘발성 데이터베이스이기 때문에 컴퓨터를 종료하면 모든 데이터가 삭제됩니다.
스프링 부트에서 dependency를 추가하면 약 2MB 크기의 라이브러리로 H2 DB를 사용할 수 있습니다.
H2 데이터베이스를 사용하는 이유는?
- 실제 서비스용 DB는 따로두고 테스트 코드용 DB와 분리하여 이용할 수 있습니다.
- 또한 휘발성 데이터베이스이기 때문에 테스트코드의 매번 DB를 지워주는 작업 없이 테스트 코드의 재사용성을 높일 수 있게 합니다.
- 인 메모리 데이터베이스이기 때문에 빠른 실행속도를 보여줍니다.
사용법
build.gradle에 다음과 같은 의존성을 추가합니다.
dependencies{
....
runtimeOnly 'com.h2database:h2'
....
}
test -> resources -> application.properties에 다음과 같은 설정을 합니다.
# Datasource
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:db;DB_CLOSE_DELAY=-1
spring.datasource.username=h2test
spring.datasource.password=h2test
# JPA
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.open-in-view=false
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect
위의 application.properties의 경로는 다음 그림에서 자세하게 설명하겠습니다.
프로젝트는 main폴더와 test폴더로 나뉘게됩니다.
그리고 테스트 코드는 test폴더에 작성됩니다.
여기서 main과 test폴더에 각각 resources를 두고 application.properties를 관리하게 되면 실제 서비스는 main에 있는 설정 파일을 사용하고 테스트코드는 test폴더에 있는 설정파일을 사용하게 됩니다.
이렇게 하면 설정이 마무리됩니다.
만약 에러가 발생한다면 다음 글을 참고하세요!
Spring Boot H2 db for testing throws "Table not found" and "SQL syntax error"
I develop simple Store app with Spring boot. My app uses MySQL database deployed in the docker container and it works fine. Now I want to test my app and I came to the conclusion that H2 in-memory db
stackoverflow.com
출처
https://mangkyu.tistory.com/183
[Spring] TDD 연습문제 소개와 요구사항 분석 및 SpringBoot 프로젝트 설정 - (2/5)
이번에는 TDD로 구현해볼 연습 문제에 대해 소개하고, 프로젝트 생성까지 한 후에 마무리하도록 하겠습니다. 1. TDD 연습문제 소개와 요구사항 분석 [ 문제 설명 ] 이번 연습 문제의 주제는 멤버
mangkyu.tistory.com