Search

H2 Embedded Mode 초기 셋팅

Created time
2022/05/01 06:43
Modified
2022/11/14 12:54
Tags
spring
h2

H2 연결 모드

총 3가지 방식으로 연결 모드를 활용합니다.
1.
Embedded mode (local connections using JDBC)
a.
In-Memory
b.
File
2.
Server mode (remote connections using JDBC or ODBC over TCP/IP)
3.
Mixed mode (local and remote connections at the same time)

H2 연결 모드 장단점

Embedded Mode

임베디드 모드에서 애플리케이션은 JDBC를 사용하여 동일한 JVM 내에서 데이터베이스를 엽니다. 가장 빠르고 쉬운 연결 모드입니다.
단점은 데이터베이스가 한 번에 하나의 가상 머신(및 클래스 로더)에서만 열릴 수 있습니다.
모든 모드에서와 마찬가지로 영구 데이터베이스와 메모리 내 데이터베이스가 모두 지원됩니다.
동시에 열려 있는 데이터베이스 수 또는 열려 있는 연결 수에는 제한이 없습니다.
임베디드 모드에서 I/O 작업은 SQL 명령을 실행하는 애플리케이션의 스레드에 의해 수행될 수 있습니다. 응용 프로그램은 이러한 스레드를 인터럽트하지 않을 수 있습니다.
JVM이 스레드 인터럽트 동안 I/O 핸들을 닫기 때문에 데이터베이스 손상으로 이어질 수 있습니다. 애플리케이션 실행을 제어하는 다른 방법을 고려해야합니다.
인터럽트가 가능한 경우 async: 파일 시스템을 해결 방법으로 사용할 수 있지만 완전한 안전은 보장되지 않습니다. 대신 클라이언트-서버 모델을 사용하는 것이 좋습니다. 클라이언트 측에서 자체 스레드를 중단할 수 있습니다.

Server Mode

서버 모드(원격 모드 또는 클라이언트/서버 모드라고도 함)를 사용할 때 응용 프로그램은 JDBC 또는 ODBC API를 사용하여 원격으로 데이터베이스를 엽니다.
서버는 동일하거나 다른 가상 머신 또는 다른 컴퓨터에서 시작해야 합니다. 이 서버에 연결하면 많은 애플리케이션이 동시에 동일한 데이터베이스에 연결할 수 있습니다. 내부적으로 서버 프로세스는 내장 모드에서 데이터베이스를 엽니다.
서버 모드는 모든 데이터가 TCP/IP를 통해 전송되기 때문에 내장 모드보다 느립니다. 모든 모드에서와 마찬가지로 영구 데이터베이스와 메모리 내 데이터베이스가 모두 지원됩니다. 서버당 동시에 열리는 데이터베이스 수 또는 열린 연결 수에 제한이 없습니다.
여기서는 Embedded mode 활용을 설명합니다.

Embedded mode : H2 In-Memory

application.yml

spring: datasource: url: jdbc:h2:mem:testdb # DB 접속 URL username: sa # DB 접속 username password: password # DB 접속 password, 없음 driver-class-name: org.h2.Driver # DB 접속 드라이버 h2.console: enabled: true # 콘솔 사용 여부, 로컬에서 웹 브라우저로도 접속 가능
YAML
복사

IntelliJ Datasource 설정

Embedded mode : H2 File

Lock이 적용된 H2 File 방식

의존성 추가

dependencies { runtimeOnly 'com.h2database:h2' }
Java
복사

application.yml

spring: datasource: url: jdbc:h2:file:./h2/testdb # DB 접속 URL username: sa # DB 접속 username password: password # DB 접속 password, 없음 driverClassName: org.h2.Driver # DB 접속 드라이버 h2.console: enabled: true # 콘솔 사용 여부, 로컬에서 웹 브라우저로도 접속 가능
YAML
복사

IntelliJ Datasource 설정

: 파일 모드로 기본 설정은 최초 접근 시, Lock을 실행한다. 그래서 다음과 같은 실패를 겪을 수 있습니다.
설정에서 성공한다면, 문제가 없습니다.
DB가 이미 사용중이고 DB 파일에 lock이 걸려있다는 내용입니다.
애플리케이션 프로세스를 중지시키고, 접속을 재시도하면 정상적으로 DB 사용이 가능합니다.
하지만 로컬에서 개발하려면, 애플리케이션과 DB Tool를 통해서 동시에 접근해야하는 경우가 생깁니다.
이 경우에는 아래 방식으로 설정을 진행합니다.

Lock을 사용하지 않는 H2 File 방식

의존성 추가

dependencies { runtimeOnly 'com.h2database:h2' }
Java
복사

application.yml

spring: datasource: url: jdbc:h2:file:./h2/testdb;DB_CLOSE_ON_EXIT=FALSE;AUTO_SERVER=TRUE # DB 접속 URL username: sa # DB 접속 username password: password # DB 접속 password, 없음 driver-class-name: org.h2.Driver # DB 접속 드라이버 h2.console: enabled: true # 콘솔 사용 여부, 로컬에서 웹 브라우저로도 접속 가능
YAML
복사

IntelliJ Datasource 설정

참고 자료