본문 바로가기

ETC

[스프링 데이터베이스] H2와 두루두루 설정하기

0. 개요

H2란? 

- 자바로 작성된 관계형 데이터베이스 관리 시스템 (RDBMS)

- 스프링 부트가 지원하는 인메모리 관계형 데이터베이스

- 인 메모리이기 때문에 애플리케이션을 재기동 때마다 초기화

- 로컬 환경과 테스트 환경에서 주로 쓰임

 

 

H2의 장점  

- 추가적 설치 없이 사용할 수 있다.

- 용량이 가볍다.

- 웹 콘솔을 제공해 개발용 로컬 DB로 사용하기 용이하다.

 

 

 

1. H2DB의 3 가지 모드

외부 터미널로 h2.sh를 싱행 또는 h2.jar를 실행 시켜야 하는 Server Mode와 달리 Embedded Mode와 In-Memory Mode는 공식 사이트로부터 h2를 다운로드 하지 않아도 스프링 부트 내에서 의존성을 추가해주는 것 만으로도 간편하게 사용할 수 있습니다.

 

1) Embedded Mode

스프링 부트가 실행할 때 H2를 띄웁니다. H2 DB 데이터를 로컬에 저장됩니다.

 

2) In-Memory Mode

스프링 부트가 실행할 때 H2를 띄웁니다. H2 DB 데이터를 메모리에 저장하며 휘발됩니다.

 

3) Server Mode

H2 공식 사이트로부터 Platform-Independent 버전을 다운로드 한 뒤 "h2/bin/h2.sh" 를 터미널로 실행하면 h2가 TCP 통신을 하는 서버 버전을 실행합니다. 외부에서 H2 서버를 실행 해야 스프링에서 접속할 수 있습니다. 

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8

 

[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., - 강의 소개 | 인프런

www.inflearn.com

 

 

2. H2DB 설정 

1) build.gradle에 h2의존성 추가하기 : implementation의 경우 컴파일 시간에 종속된 모듈이 노출되지 않기 때문에 디비 초기화 시 실행할 .sql 파일을 명시해 주어야 합니다. 반면 runtimeOnly는 런 타임 중에 종속성이 추가되어 초기화 파일 경로를 명시하지 않아도 됩니다. 

dependencies {
   // 생략
   testImplementation 'org.springframework.boot:spring-boot-starter-test'
   // 생략
   // 아래 두개 추가
   implementation 'org.springframework.boot:spring-boot-starter-jdbc' // Jdbc, Driver
   implementation 'com.h2database:h2'
   // runtimeOnly 'com.h2database:h2'
}

 

2) application.properties 설정하기

- 웹 콘솔 설정하기 : "localhost:8080/h2-console"로 H2 DB에 접속할 수 있습니다. 

# h2 database web으로 확인
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console

 

- Spring에 h2 연결하기 :  "spring.datasource.url" : 데이터를 저장할 위치를 설정합니다. 이 위치에 따라 Embedded Mode, In-Memory Mode가 정해집니다. 

# spring - h2 연결
spring.datasource.driverClassName=org.h2.Driver # 드라이버설정
spring.datasource.url=jdbc:h2:~/springdb
# Embedded Mode : spring.datasource.url=jdbc:h2:file./springdb 
# file db 데이터 저장 위치 ./springdb
# In-Memory mode : spring.datasource.url=jdbc:h2:mem:test
# Server Mode : spring.datasource.url=jdbc:h2:tcp://localhost/~/test
spring.datasource.username=sa
spring.datasource.password=
 

Features

  Features Feature List H2 in Use Connection Modes Database URL Overview Connecting to an Embedded (Local) Database In-Memory Databases Database Files Encryption Database File Locking Opening a Database Only if it Already Exists Closing a Database Ignore

www.h2database.com

 

- sql 초기화 : H2가 실행될 때마다 테이블과 더미 데이터를 생성할 수 있습니다. 의존성이 Implementation인 경우 초기화할 schema.sql, data.sql의 경로를 입력해 주어야 합니다. 이 때의 classpath는 src/main/reources 입니다. 만약 의존성을runtimeOnly로 설정한 경우 자동으로 resources 폴더 내 schema.sql 과 data.sql 파일을 자동으로 읽어 H2DB를 초기화 합니다.

spring.sql.init.mode=always
spring.sql.init.schema-locations=classpath:schema.sql
spring.sql.init.data-locations=classpath:data.sql

 

3) 배포 환경에서 h2 접속하기 :

spring.h2.console.settings.web-allow-others = true