개발/spingboot

H2 Datasource 설정 - File Based 방식

ikkison 2026. 2. 19. 11:50

1. 나의 Dev Pofile H2 설정

테스트한 데이터들이 삭제되지 않고 유지하기 위해 파일 저장 방식으로 테스트 환경 구성'

 

해당 내용은 나의 개발환경 설정으로 모든 사용법을 다루지는 않음.

 

spring:
  datasource:
    url: jdbc:h2:file:./data/testdb;AUTO_SERVER=TRUE;DB_CLOSE_DELAY=-1
    driver-class-name: org.h2.Driver
    username: sa
    password:

 

jdbc:h2:file:./data/testdb; ./data/ 디렉토리에 testdb.mv.db 라는 파일로 저장됨,
AUTO_SERVER=TRUE; 어플리케션, 외부H2콘솔 툴 등 여러 프로세스에서 동시에 해당파일에 접근할 수 있도록
DB_CLOSE_DELAY=-1; 커넥션이 잠시 끊겨도 DB 구조를 메모리에 계속 유지

 

 

2. 나의 Dev Pofile H2 콘솔

1. 접속 주소

- http:localhost:8080/h2-console

 

2. 설정값

- JDBC URL : jdbc:h2:file:./data/testdb

- User Name : sa

- Password: 

 

 


3. URL 옵션 설명

AUTO_SERVER 여러 프로세스에서 동시에 해당파일에 접근가능 여부 설정
어플리케션, 외부H2콘솔 툴 등등
DB_CLOSE_DELAY 접속이 끊겨도 DB를 즉시 닫지 않고 유지하도록 설정

> 1
영구 유지. 프로세스가 살아있는 동안 절대 닫지 않음

> 0
기본값, 즉시 종료. 마지막 연결이 닫히는 순간 DB도 닫힘
값이 0인 경우, 스프링 부트가 내부적으로 커넥션 풀을 비우거나 잠시 연결을 끊는 순간 메모리에 있던 데이터가 즉시 증발하는 현상이 발생함

> 양수 (n)
마지막 연결 종료 후 n초 동안 대기했다가 닫음
값이 양수 인 경우 n 초 만큼 대기 하였다가 이후 DB가 닫히고 인메모리 데이터가 증발하는 현상이 발생함. jdbc file 모드인 경우 파일은 남지만, 다시 열면 오버헤다가 발생할 수 있음.

DB_CLOSE_ON_EXIT 자바 가상 머신(JVM)이 종료될 때 H2가 자동으로 DB를 닫을지 여부를 결정

> TRUE (기본값)
JVM이 종료될 때(애플리케이션 종료 시) H2가 안전하게 데이터베이스를 닫음
이때 로그 파일(trace)을 정리하고 변경 사항을 파일에 최종 반영함


> FALSE
JVM이 종료되어도 H2가 스스로 닫히는 작업을 수행하지 않음

보통 스프링 부트 애플리케이션은 종료될 때 자체적인 Shutdown Hook을 실행함. 만약 H2가 먼저 종료되어 버리면, 스프링이 종료되면서 남기려는 로그나 마지막 DB 작업이 실패할 수 있으므로 스프링이 다 끝날 때까지 H2 네가 먼저 죽지 마(FALSE) 라고 설정하는 경우가 많음