본문 바로가기

DevelopNote/기타

intellij - spring boot, h2 database 연동

H2?

 H2는 오픈 소스 데이터베이스로, 자바로 작성된 관계형 데이터베이스 관리 시스템이다. 인 메모리와 파일 기반의 데이터베이스 설정이 가능해서 별로도 sql설치 없이도 사용할 수 있는 장점이 있다.

 

 H2를 intellij에서 사용해 보자

1) h2 의존성 추가

 

h2를 사용하기 앞서, 사용하기 위한 의존성을 추가해야 줘야 한다.

 

ㅁ h2 - maven

<dependency>
  <groupId>com.h2database</groupId>
      <artifactId>h2</artifactId>
      <version>1.4.197</version>
    <scope>runtime</scope>
</dependency>

 

ㅁ h2- gradle

runtimeOnly 'com.h2database:h2'

 

의존성 버전은 spring reference에서 spring 버전에 맞는 종속성을 맞춰서 해주자.

https://docs.spring.io/spring-boot/docs/current/reference/html/dependency-versions.html#dependency-versions

 

Dependency Versions

 

docs.spring.io

 

프로젝트의 설정 파일 작성 

resources 아래 properties 설정 파일에 아래의 내용을 등록한다.

spring.h2.console.enabled=true
spring.h2.console.path=/h2-console

spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

 

-  h2.console.enable : 웹 콘솔 사용

-  h2.console.path : 콘솔의 경로

-  spring.datasource.url : 접속 url, 위의 경우 인메모리 접속 방식이다. 파일을 사용하려면 아래와 같은 형식으로 선언해 설정한 파일 경로에서 사용하면 된다.(=spring.datasource.url=jdbc:h2:file:~/localdb/db)

 

               

 

실행해보자.

로컬 포트 주소와, 설정해놓은 h2.console.path인 h2-console로 접속을 하면 해당 h2 콘솔 창으로 접속된다. (http://localhost:8080/h2-console)

 

Database "mem:testdb" not found, either pre-create it or allow remote database creation (not recommended in secure environments) [90149-200] 90149/90149 (Help)

 

다음과 같은 오류가 뜬다면, version 설정이 잘 안되었기 때문이다. 의존성에서 버전 설정을 잘해줬는지 확인해볼 것!

 

 

h2 자동으로 스키마 생성하기

- h2는 인메모리로, 서버 재실행 시, 등록한 스키마 정보와 데이터들이 모두 사라진다!

- 스키마를 재설정하기는 귀찮으니 서버가 올라올 때 자동으로 스키마가 생성되게 만들어보자

 

resources 아래 schema~로 시작하는 sql문을 만들어 넣는다

- schema.sql

- 생성하고자 하는 스키마 정보

CREATE TABLE users(
    seq bigint NOT NULL AUTO_INCREMENT,
    email varchar(50) NOT NULL,
    passwd varchar(80) NOT NULL,
    login_count int NOT NULL DEFAULT 0,
    last_login_at datetime DEFAULT NULL,
    create_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP(),
    PRIMARY KEY (seq),
    CONSTRAINT unq_user_email UNIQUE(email)
);

 

데이터도 미리 넣어놓고 싶다면  resources 아래 data~로 시작하는 sql문을 만들어 놓으면 된다.

INSERT INTO users(seq,email,passwd) VALUES (null,'test@co.kr','1234');

 

서버를 재구동하면 자동으로 데이터가 생성된다.

 

300x250