H2 Database란?
H2DB는 자바 기반의 오픈소스 관계형 데이터 베이스 관리 시스템(RDBMS)이다.
H2DB는 서버(Server) 모드와 임베디드(Embedded) 모드의 인메모리 DB 기능을 지원하고 디스크 기반 테이블을 또한 생성할 수 있다.
또한 브라우저 기반의 콘솔모드를 이용할 수 있으며, 별도의 설치과정이 없고 용량도 2MB(압축버전) 이하로 매우 저용량 이므로 매우 가볍고 빠르며, JDBC API 또한 지원하고 있다. SQL 문법은 다른 DBMS들과 마찬가지로 표준 SQL의 대부분이 지원된다.
In-memory Database란?
데이터를 디스크에 저장하는 Mysql이나 Oracle과 같은 DBMS와는 다르게 데이터 스토리지의 메인 메모리에 설치되어 운영되는 방식의 데이터베이스 관리 시스템이다.
디스크 접근이 메모리 접근보다 느리기 때문에 인메모리 데이터베이스가 DBMS 보다 더 빠르다.
하지만 인메모리 데이터의 주의점은 휘발성이다. 데이터가 날라가기 때문에 계속해서 저장할 데이터는 저장할 수 없다.
이러한 휘발성 때문에 테스트 DB로 많이 사용된다.
어떠한 상황에 사용하나?
나는 보통 Spring boot에서 실제로 DB에 접근하는 Repository 테스트나 QueryDSL 테스트에 사용한다.
테스트시 저장하는 데이터는 삭제되어야 하기 때문에 인메모리 데이터베이스로 접근해 저장한다.
Service, Controller에 경우에는 Mock을 사용해 따로 데이터를 저장하지 않는다.
나는 yml파일에 profiles를 설정하고 테스트할 부분에 @ActiveProfiles 어노테이션을 사용해서 필요한 부분에만 H2 Database로 접속한다.
Spring Boot H2 In-memory Database 설정 방법
H2 Database dependency를 추가한다.
dependencies {
...
// H2 Database
implementation 'com.h2database:h2'
}
application.yml에 H2 In-memory Database 정보를 설정한다. profiles를 test로 설정하였다.
spring:
profiles: test
datasource:
driver-class-name: org.h2.Driver
url: jdbc:h2:mem:testdb;MODE=MySQL;
username: sa
password:
h2:
console:
enabled: true
jpa:
database: h2
database-platform: com.ss.camper.config.CustomMySQL5Dialect
generate-ddl: false
open-in-view: false
hibernate:
ddl-auto: create-drop
H2 In-memory Database를 사용할 test 클래스에 @ActiveProfiles 어노테이션을 사용해 위에서 설정한 profiles를 활성화 한다.
@ActiveProfiles("test")
@SpringBootTest
class UserRepositoryTest {
...
}
해당 테스트 코드를 실행해보면 h2 testdb에 연동된 것을 확인할 수 있다.
'Spring' 카테고리의 다른 글
스프링 배치(Spring Batch) 메타 데이터(Meta-Data) 살펴보기 (0) | 2022.02.22 |
---|---|
스프링 배치(Spring Batch)란? 소개 및 예제 (0) | 2022.02.22 |
Spring Boot 유효성 검증 어노테이션 만들기 (0) | 2022.01.28 |
Junit 테스트 시 테스트 목록 보이게 하기(IntelliJ IDEA) (0) | 2021.12.19 |
Spring Boot + Prometheus + Grafana를 이용한 모니터링(3/3) (0) | 2021.12.14 |