반응형
H2 데이터베이스는?
- 빠르고, 오픈소스이며, JDBC API 를 지원
- 자바로 작성된 관계형 (relational) 데이터베이스
- 인메모리 테이블 또는 디스크 기반 테이블 둘 다 지원
- 인메모리 (In-memory): 어플리케이션이 종료될 때 DB 가 초기화 됨
- 디스크 기반 (Disk): 어플리케이션이 종료되어도 데이터가 디스크에 저장되어 재사용 가능
- 브라우저 기반 콘솔 지원 (브라우저에서 쿼리를 날릴 수 있음)
- 표준 SQL 대부분 지원
- 주로 로컬 또는 테스트 환경에서 사용
- 다양한 기능 지원: 트랜잭션, Fulltext search, 암호화된 테이블 등
자세한 내용은 공식 홈페이지를 참고하자.
의존성
implementation("org.springframework.boot:spring-boot-starter-jdbc")
runtimeOnly("com.h2database:h2")
// 로컬에서 콘솔창을 띄울 수 없다면
implementation("org.springframework.boot:spring-boot-devtools")
설정
- spring.jpa.show-sql=true 실행되는 SQL 문을 콘솔에 노출하기 위함
- spring.h2.console.enabled=true h2 콘솔 사용 여부
- spring.sql.init.mode=always h2 데이터베이스가 실행될 때 항상 db/migration/V1__init.sql 파일로 테이블 생성
spring:
jpa:
show-sql: true
h2:
console:
enabled: true
path: /h2-console
datasource:
url: jdbc:h2:mem:blog;MODE=MYSQL
driver-class-name: org.h2.Driver
username: sa
password:
platform: h2
sql:
init:
mode: always
schema-locations: classpath:db/migration/V1__init.sql
V1__init.sql
db/migration/V1__init.sql 파일은 아래와 같이 구성되어 있다.
DROP TABLE IF EXISTS blog_statistic;
CREATE TABLE blog_statistic
(
id BIGINT NOT NULL AUTO_INCREMENT,
keyword VARCHAR(500) NOT NULL,
count BIGINT NOT NULL,
created_at TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6),
created_by VARCHAR(50) DEFAULT NULL,
modified_at TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6),
modified_by VARCHAR(50) DEFAULT NULL,
PRIMARY KEY (id)
);
CREATE INDEX blog_statistic_keyword_idx ON blog_statistic (keyword);
CREATE INDEX blog_statistic_count_idx ON blog_statistic (count DESC);
콘솔에 접근하기
어플리케이션을 실행하고 브라우저에서 아래 경로로 접근해보자
http://localhost:8080/h2-console
아래와 같은 그림대로 노출되면 성공!
설정대로 입력하고 Connect 를 클릭하면 아래처럼 접근 가능하다.
초기 데이터는 따로 설정한 것이 없으니 당연히 없다.
초기 데이터 넣기
V2__init_data.sql 파일에 초기 데이터가 있다고 하면 아래처럼 설정할 수 있다.
spring:
sql:
init:
data-locations: classpath:db/migration/V2__init_data.sql
데이터베이스 초기화
schema-locations, data-locations 을 활용한 방법은 SQL 스크립트 기반 데이터베이스 초기화 하는 방법이었다. 또 다른 방법으로는 JPA, Hibernate 기반 데이터베이스 초기화를 할 수 있다. @Entity 어노테이션이 부여된 클래스를 스캔하여 자동으로 스키마를 생성해준다.
spring.jpa.generate-ddl=true | false
# JPA 에서 기본적으로 제공하는 스키마를 생성한다.
spring.jpa.hibernate.ddl-audo=create | create-drop | update | validate | none
# Hibernate 가 제공하는 스키마를 생성한다.
# - create: 기존 스키마 drop 후 다시 생성
# - none: 아무것도 하지 않음
반응형
'스프링' 카테고리의 다른 글
[스프링] @CircuitBreaker 적용하기 (0) | 2023.02.16 |
---|---|
[스프링] Executable jar 파일 만들어서 실행해보기 (0) | 2023.02.10 |
[스프링] 멀티 모듈 환경에서 application.yml 사용하기 (0) | 2023.02.09 |
[스프링] @Valid 사용과 테스트 케이스 작성하기 (0) | 2023.02.06 |
[스프링] REST Docs, asciidoctor 로 API 문서 관리하기 (0) | 2023.02.06 |
댓글