이번 글에서는 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
경로로 접속하면 다음과 같은 화면이 보입니다.
JDBC URL
을 로그에서 확인한 주소로 변경하고, 사용자는 sa
로, 비밀번호는 비워둡니다.
Connect 버튼을 누르면 다음과 같은 화면이 보입니다.
Product
엔티티로 정의한 PRODUCT
테이블을 확인할 수 있습니다.
메모리 주소 고정
기본 설정을 사용하면, 어플리케이션을 실행할 때마다 데이터베이스 주소가 바뀌어서 불편합니다. 이를 해결하기 위해 application.yml
에 h2-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
를 설정하고 어플리케이션을 실행합니다.
프로퍼티에 설정한 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 콘솔에 접속합니다.
JDBC URL
을 jdbc:h2:file:./test
로 변경하고, 사용자는 sa
로, 비밀번호는 입력하지 않고 Connect 버튼을 누릅니다.
Product
엔티티로 정의한 PRODUCT
테이블을 확인할 수 있습니다.
요약
이번 글에서는 다음과 같은 내용을 알아보았습니다.
- H2를 스프링 부트 프로젝트에 설정하는 방법
- H2를 메모리 모드로 실행하는 방법
- H2를 파일 모드로 실행하는 방법
- H2 콘솔을 사용해서 H2 데이터베이스에 접속하는 방법