내장형 H2 데이터베이스를 모드에 따라 설정하는 방법을 포스팅하겠습니다 ~.~
H2 DB 사용 방식 3가지
- Server Mode
- 직접 엔진을 설치하여 사용하는 방식
- 애플리케이션과 상관 없는 외부에서 DB 엔진이 구동된다.
- 데이터가 애플리케이션 외부에 저장되므로 애플리케이션을 종료해도 데이터가 사라지지 않는다.
- In-memory Mode
- 엔진을 설치하지 않고 애플리케이션 내부의 엔진을 사용하는 방식
- `build.gradle` 및 `application.properties` 설정을 통해 실행 가능하다.
- 애플리케이션을 실행하면 DB 엔진이 함께 실행되고, 애플리케이션을 종료하면 DB 엔진이 함께 종료된다.
- 데이터가 애플리케이션의 메모리에 저장되기 때문에 애플리케이션을 종료하면 데이터가 사라진다.
- Embedded Mode
- 엔진을 설치하지 않고 애플리케니션 내부의 엔진을 사용하는 방식
- `build.gradle` 및 `application.properties` 설정을 통해 실행 가능하다.
- 애플리케이션을 실행하면 DB 엔진이 함께 실행되고 애플리케이션을 종료하면 DB 엔진이 함께 종료된다.
- 데이터가 애플리케이션의 외부에 저장되므로 애플리케이션을 종료해도 데이터가 사라지지 않는다.
Mode | H2 다운로드 여부 | 실행 주체 | DB 저장 위치 | 사용 용도 |
Server Mode | O | 외부 | 로컬(파일 시스템) | 배포 용도 |
In-memory Mode | X | 스프링 | 메모리 | 테스트 용도 |
Embedded Mode | X | 스프링 | 로컬(파일 시스템) | 개발 용도 |
1. Server Mode
현업에서 사용하는 모드
컴퓨터에 DB 엔진을 설치하고 엔진을 구동하여 사용하는 방식
애플리케이션과 DB가 분리되어있음 ➡️ 여러 애플리케이션에서 동일한 DB를 사용하기에 적합
H2 DBMS를 다운로드 받아 사용
2. In-memory Mode
데이터가 사라지는 휘발성의 특징
➡️ 단위 테스트 등에서 많이 사용됨
📌 Spring Boot 프로젝트에서 H2를 In-memory Mode로 사용하는 방법
스프링부트 프로젝트에서 H2를 인메모리 모드로 사용하려면 `application.yml` 또는 `application.properties`에서 아래와 같이 설정
# application.yml
spring:
datasource:
driver-class-name: org.h2.Driver
url: jdbc:h2:mem:{DB 이름}
username: sa
password:
# application.properties
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:{DB 이름}
spring.datasource.username=sa
spring.datasource.password=
💡 In-memory Mode에서 h2-console로 조회하기
애플리케이션이 생성하는 데이터베이스 인스턴스와 H2 콘솔이 접근하는 데이터베이스 인스턴스가 서로 다르면 H2 콘솔에서 데이터 조회가 안될 수 있다.
이 경우, 애플리케이션과 H2 콘솔이 같은 데이터베이스 인스턴스를 사용하도록 in-memory mode 상태에서 h2 설정을 아래와 같이 바꿔줍니다
url: 'jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE'`
DB_CLOSE_DELAY=-1: 이 옵션은 데이터베이스를 열린 상태로 유지.
DB_CLOSE_ON_EXIT=FALSE: 이 옵션은 애플리케이션이 종료될 때 데이터베이스의 자동 종료를 방지.
3. Embedded Mode
임베디드(내장) 모드는 인메모리 모드와 동일하게 애플리케이션에 DB 엔진이 내장되어 애플리케이션과 함께 실행되고 종료되는 방식이다.
인메모리 모드와 다른 점은 데이터를 로컬에 저장하기 때문에 데이터 휘발에서 자유롭다.
➡️ 간단한 애플리케이션에서 사용하기 좋다.
📌 Spring Boot 프로젝트에서 H2를 Embedded Mode로 사용하는 방법
# application.yml
spring:
datasource:
driver-class-name: org.h2.Driver
url: jdbc:h2:{DB가 저장될 경로}
username: sa
password:
# application.properties
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:{DB가 저장될 경로}
spring.datasource.username=sa
spring.datasource.password=
💡 인메모리 모드와 차이점
mem이 사라지고 jdbc:h2:이후에 바로 DB가 저장될 경로를 입력
url: jdbc:h2:~/test
사용자의 홈 디렉토리(`~`) 아래에 `test.mv.db` 파일로 저장
윈도우의 경우 `C:\Users\user\test.mv.db`
url: jdbc:h2:file:D:/workspace/db/test
`file:저장할 경로` 지정한 경로에 `test.mv.db` 파일 저장
H2 콘솔
application에 위와 같이 H2 Console 설정을 하면,
애플리케이션을 실행한 다음 설정한 경로로 브라우저에서 H2 콘솔에 접속 가능하다.
콘솔 로그인 정보를 application 설정과 동일하게 입력하고 Connect를 하면
이렇게 H2 콘솔에 접속할 수 있다.
'Java Study > Frameworks' 카테고리의 다른 글
Spring Security를 활용한 JWT 인증 | Stateless하게 제대로 적용하기! (0) | 2025.03.21 |
---|---|
H2 콘솔 접속 시 Whitelabel Error Page (400 Bad Request) 해결 과정 + spring boot에서 active profile 선택하기 (IntelliJ) (0) | 2025.03.12 |
Spring Security를 활용한 JWT 인증 적용해보기 🖥️🔑 (0) | 2025.02.27 |
Interceptor와 AOP 개념 정리 및 API 로깅 예시 ✍️ (0) | 2025.02.26 |
Spring JWT 인증 과정 뜯어보기 🔑 | Spring Security 없이 구현하는 방법 (0) | 2025.02.25 |