H2 DB (공식문서)
주요 특징
- 매우 빠른 데이터베이스 엔진
- 오픈 소스
- 자바로 작성
- 표준 SQL, JDBC API 지원
- 임베디드 및 서버 모드, 클러스터링 지원
- 강력한 보안 기능
- PostgreSQL ODBC 드라이버를 사용.
- 다중 버전 동시성
사용에 대한 고찰
외부에 물리DB를 생성하기 어려울 때나, 사이드 프로젝트를 하고 싶은데 물리 DB를 생성하기 부담 스러울때 간단히 내부 DB를 사용하고자 인메모리DB인 h2 를 사용한다.
Spring Boot에 H2 DB 사용법
H2 DB는 두가지 모드인 Embedded Mode 와 Server Mode가 존재하며 각 특징으로는
- Embedded mode(내장모드) : Application 서버 실행 종료시 데이터 모두 휘발
- H2를 Application과 동일한 JVM을 이용하여 구동, Application이 종료되면 Data가 휘발
- Server mode(서버모드) : Application 서버 종료시에도 데이터가 휘발 되지 않는다.
- 별도의 JVM을 이용하여 구동
- 여러 Application이 해당 H2에 동시 접근 가능
두 가지 모드 중 어떤 걸 선택하느냐에 따라 SpringBoot의 application.yml 의 설정이 다르며 아래는 Embedded Mode에서의 사용 방법에 대해 서술하는 내용이다.
bulid.gradle에 JPA 와 h2에 관한 의존성을 추가한다. JPA 의존성을 추가하는 이유는 H2:1.4.198 버전부터 보안상의 문제로 자동 데이터베이스 생성을 막아 두어 DB 파일이 생성되지 않고 있기 때문에 더미 Entity 생성으로 DB 생성을 유도해야하기 때문이다. 또는 h2의 버전을 1.4.198 보다 낮은 버전으로 설정해야한다.
// build.gradle
dependencies {
...
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'com.h2database:h2'
// runtimeOnly 'com.h2database:h2:1.4.197'
...
}
# application.yml
datasource:
hikari:
jdbc-url: jdbc:h2:mem:testdb
username: sa # 필수로 입력해야만 한다.
password:
driver-class-name: org.h2.Driver
h2:
console:
enabled: true
settings:
web-allow-others: true
jpa:
hibernate:
ddl-auto: create-drop # 시작할 때 새로 생성 하고 세션을 마칠 때 스키마를 소멸 시킵니다.
properties:
hibernate:
show_sql: true
format_sql: true
application.yml에서 해당 h2.console.enabled: true 설정한 후 console창을 보게 되면
H2 console available at 이라는 문구를 확인할 수 있으며
localhost:8080/h2-console 로 접속하게 된다면 아래와 같은 화면을 볼 수 있다.
반응형