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 로 접속하게 된다면 아래와 같은 화면을 볼 수 있다.

반응형

+ Recent posts