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 서버를 실행 해야 스프링에서 접속할 수 있습니다.
[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 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
'ETC' 카테고리의 다른 글
오버헤드, 스택 오버 플로우 (1) | 2023.05.12 |
---|---|
[SQL] 일단 시작해보기 - 가장 자주 쓰는 DML 위주 (0) | 2023.04.29 |
[기타] 비즈니스 매너 (0) | 2023.04.20 |
웹 개발 시 유용한 사이트 모음 - 2 : Flask (0) | 2023.03.29 |
.idea는 .gitignore에 포함시켜야할까? (0) | 2023.03.29 |