Spring에서 h2 데이터를 파일에 저장하여 사용하기

less than 1 minute read

h2 데이터베이스의 기본 설정이 메모리에 데이터를 저장하는 것이다 보니 디버깅할때 꽤 불편하다.
애플리케이션 실행이 끝나자마자 모든 데이터가 없어져버리기 때문에 실행중 데이터가 제대로 저장하고 있는지 확인하기 어렵기 때문이다.
그래서 h2 대신 MySQL 이나 PostgreSQL 의 개발환경(Docker로 구동 중인)을 사용하고 있었는데, h2 를 메모리가 아닌 파일에 저장하도록 하는 것도 괜찮겠다 싶었다.

설정 자체는 간단하다.
Spring 의 application.propertiesspring.datasource.url 프로퍼티에서 mem 대신 파일 경로로 대체하면 된다.
아래 예의 경우 프로젝트 내 ‘resource’ 폴더 밑에 ‘data’ 란 디렉토리를 만들어 DB 파일을 저장했다.

// spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.url=jdbc:h2:file:Z:/lab_ext/java-spring/sb3d/src/main/resources/data/testdb;AUTO_SERVER=true;


(늘 그렇듯이) 주의할 사항이 몇가지 있는데,

  • h2 를 브라우저에서 볼 수도 있고 IntelliJ 의 Database Tool 윈도우에서 볼 수도 있다. 이 경우 ‘Automatic Mixed Mode‘로 구성해야 한다.
    AUTO_SERVER=true;를 파일 경로 뒤에 추가하면 된다.

  • IntelliJ 에서는 아래와 같이 구성한다.
    즉 URL 은 앞서 application.properties에 지정한대로, Path 의 경우 [DB명].mv.db로 지정한다.
    Password 는 지정하지 않는다.

IntelliJ - h2 config

  • 기존에 h2 를 IntelliJ 내 구성해서 사용하고 있었으면 삭제하고 다시 구성해야 한다.
    그렇지 않고 기존 내역에 Path, URL 등만 파일 경로로 바꿔 업데이트 할 경우 반영이 되지 않는다.

  • Spring Boot version >= 2.4.x 의 경우 spring.datasource.username=sa 라인을 application.properties꼭 지정해야 한다.

참고