Spring Boot로 H2 사용하기

3 min read

이번 글에서는 Spring Boot와 함께 H2 데이터베이스를 사용하는 방법을 알아보겠습니다.
이 글에서 사용된 예제는 Github에서 확인할 수 있습니다.

의존성 설정

build.gradle 파일에 다음과 같은 의존성을 추가합니다.

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    runtimeOnly 'com.h2database:h2'
    // ...
}

프로퍼티 설정

application.yml 파일에 다음 프로퍼티를 추가합니다.

spring:
  jpa:
    show_sql: true # 쿼리 로그를 출력합니다.
  h2:
    console:
      enabled: true # H2 콘솔을 활성화 합니다.
      path: /h2-console # H2 콘솔 접속 주소를 지정합니다.
  • 중요: spring.h2.console.enabled 프로퍼티는 개발 환경에서만 사용해야 합니다.
  • spring.h2.console.path 프로퍼티로 콘솔 접속 주소를 변경할 수 있습니다. 기본값은 /h2-console 입니다.

Entity 설정

예제로 사용할 Product 엔티티를 추가합니다.

@Entity
@Getter
public class Product {

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;
  private String name;
  private String company;

}

애플리케이션 실행

앱을 실행시키면 다음과 같은 로그가 출력됩니다.

H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:0fa7d009-f105-426a-8eff-9ba5553bf5ed'
  • spring.datasource.url 프로퍼티가 존재하지 않을 경우, 스프링 부트는 임베디드 데이터베이스를 자동으로 설정합니다.
  • H2 데이터케이스가 메모리상에서 실행되었습니다.
  • 어플리케이션을 종료하면 기존 데이터베이스가 삭제됩니다.
  • 데이터베이스 주소는 어플리케이션을 실행할 때 임의로 지정됩니다.
  • http://localhost:8080/h2-console로 접속하면 H2 콘솔을 사용할 수 있습니다.

H2 콘솔 접속

/h2-console 경로로 접속하면 다음과 같은 화면이 보입니다.

null

JDBC URL을 로그에서 확인한 주소로 변경하고, 사용자는 sa로, 비밀번호는 비워둡니다.
Connect 버튼을 누르면 다음과 같은 화면이 보입니다.

null

Product 엔티티로 정의한 PRODUCT 테이블을 확인할 수 있습니다.

메모리 주소 고정

기본 설정을 사용하면, 어플리케이션을 실행할 때마다 데이터베이스 주소가 바뀌어서 불편합니다. 이를 해결하기 위해 application.ymlh2-mem 프로파일을 추가합니다.

spring:
  jpa:
    show_sql: true
  h2:
    console:
      enabled: true
      path: /h2-console
---
spring:
  profiles: h2-mem
  datasource:
    url: jdbc:h2:mem:test

Run/Debug Configurations에서 VM Optiions-Dspring.profiles.active를 설정하고 어플리케이션을 실행합니다.

null

프로퍼티에 설정한 jdbc:h2:mem:test 주소를 사용해서 데이터베이스에 접속할 수 있습니다.

파일 사용하기

H2 데이터베이스는 파일을 사용해서 데이터베이스를 생성하는 기능을 제공합니다. applicatioin.yml을 다음과 같이 변경합니다.

spring:
  jpa:
    show_sql: true
  h2:
    console:
      enabled: true
      path: /h2-console
---
spring:
  profiles: h2-mem
  datasource:
    url: jdbc:h2:mem:test
---
spring:
  profiles: h2-file
  datasource:
    url: jdbc:h2:file:./test
    username: sa
  jpa:
    hibernate:
      ddl-auto: update

spring.datasource.url :

  • jdbc:h2:file:./test를 데이터베이스 주소로 사용합니다.
  • 절대경로와 상대경로를 사용할 수 있습니다.
  • ./test: 프로젝트 루트 경로 밑에 test.mv.db 파일을 생성합니다.
  • ~/test: 사용자 홈에 파일을 생성합니다.

spring.datasource.username :

  • 사용자 이름을 sa로 지정합니다.
  • 파일을 사용할 경우 이 프로퍼티가 없으면 콘솔에 로그인 할 수 없습니다.

spring.jpa.hibernate.ddl-auto :

  • 스프링 부트에서 제공하는 DDL 기능은 H2 데이터베이스를 메모리에서 사용할 경우에 동작합니다.
  • 이 프로퍼티를 update로 설정해서 엔티티의 변경된 내용을 데이터베이스에 반영합니다.

참고: 프로젝트 루트에 파일을 생성할 경우, 해당 파일이 버전 관리 대상에 포함되지 않도록 설정해야 합니다.

h2-file 프로파일을 사용해서 어플리케이션을 실행하고 H2 콘솔에 접속합니다.

null

JDBC URLjdbc:h2:file:./test로 변경하고, 사용자는 sa로, 비밀번호는 입력하지 않고 Connect 버튼을 누릅니다.

null

Product 엔티티로 정의한 PRODUCT 테이블을 확인할 수 있습니다.

요약

이번 글에서는 다음과 같은 내용을 알아보았습니다.

  • H2를 스프링 부트 프로젝트에 설정하는 방법
  • H2를 메모리 모드로 실행하는 방법
  • H2를 파일 모드로 실행하는 방법
  • H2 콘솔을 사용해서 H2 데이터베이스에 접속하는 방법

© 2021 Raegon Kim