Spring boot + H2 데이터 베이스 활용
Dependency( Gradle )
implementation 'com.h2database:h2'
H2 embedded 모드
spring:
datasource:
url: jdbc:h2:mem:testdb
username: sa
driver-class-name: org.h2.Driver
h2:
console:
enabled: true
H2 file 모드
Test 코드에서는 file에 데이터가 남지 않는다.
그냥 앱 실행을 하면, file에 데이터가 남아 있다.
그리고 Test 코드에서 ddl-auto를 create 로 했는데, 실제 테스트 돌아갈때 drop table을 하는데도 기존 데이터가 날아가지 않고 있다
앱 실행 시에는 drop 해서 파일에 있는 것이 다 날아감.
테스트 모드에서 실행하면, 임베디드 상태로 돌아가는것 처럼 보임.
H2 Server 모드
서버모드로 동작 하기 위해서는 H2 데이터베이스를 별도로 띄워주어야 합니다.
아래 방법을 따라서 먼저 설치 및 H2 데이터베이스를 수행해줍니다.
최신 버전 설치( Mac 기준 )
터미널에서 아래 명령어로 h2를 설치하고 실행합니다.
# h2 설치
$ brew install h2
# h2 실행
$ h2
브라우저에서 localhost:8082로 접속하면, 아래와 같은 접속 화면이 뜹니다.
Connect를 눌러 연결합니다.( test 라는 데이터 베이스가 생성되며 접속이 됩니다. )
연결하면 데이터베이스를 조회하고 쿼리를 수행할 수 있는 화면이 나옵니다.
Generic H2 (Embedded) 로 먼저 데이터베이스를 생성해 두지 않으면, Generic H2 (Server)나 외부 애플리케이션에서 서버모드로 접속시 아래 콘솔화면 같이 에러가 나거나 애플리케이션에서도 비슷한 문구의 에러가 발생하게 됩니다.
org.h2.jdbc.JdbcSQLNonTransientConnectionException: Database "/Users/xxxx/testdb" not found, either pre-create it or allow remote database creation (not recommended in secure environments) [90149-200]
Spring
아래와 같이 application.yml 을 설정해 어플리케이션을 실행해주면 됩니다.
spring:
datasource:
url: jdbc:h2:tcp://localhost/~/testdb
username: sa
driver-class-name: org.h2.Driver
그리고 H2 콘솔에서 데이터 베이스를 조회해보면 데이터가 잘 들어갔는지 확인이 가능합니다.
참고로, 현재 최신 버전은 1.4.200 이고, 최신 안전화 버전은 1.4.199 입니다.
해당 버전은 아래 링크로 접속하여 설치 가능합니다.
https://www.h2database.com/html/download.html