본문 바로가기
개발/SpringBoot

SpringBoot InMemory DB(H2) 사용

by 궁즉변 변즉통 통즉구 2022. 5. 31.
반응형

SpringBoot 사용 시 간단히 기능 테스트 용도나 프로토타입 등으로 인메모리 DB를 쉽게 사용할 수 있다. 인메모리 DB로는 H2를 사용하는데 설정도 많이 간단하다. 매번 눈으로만 이런것이 가능하구나라고 봤는데 이번 기회에 한번 해보면서 정리 해본다.

 

1. H2 DB 의존성 추가

runtimeOnly 'com.h2database:h2'

H2 의존성을 추가하게 되면 기본적으로 SpringBoot는 H2를 기본 DB로 설정하여 어플리케이션을 실행한다. 

 

2. application.yml 설정 추가

spring:
  h2:
    console:
      enabled: true
      path: /h2-console
  datasource:
    driverClassName: org.h2.Driver
    url: jdbc:h2:mem:testdb
    username: sa

H2 콘솔에 접속 할 수 있는 설정 정보를 등록 한다.

 

3. 어플리케이션 실행

어플리케이션을 한번 실행해서 H2 콘솔에 접속 해본다. 일단 아래와 같은 에러가 뜨고 접속이 안된다.

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

찾아보니 H2가 보안상의 이유로 H2 console을 사용할 경우 database 자동 생성을 하지 않도록 1.4.198버전부터 막혀있다. 해결방법은 아래와 같이 2가지가 있다. 

 

1. H2의 버전을 낮추는 방법

runtimeOnly 'com.h2database:h2:1.4.197'

단순 테스트 용도로만 사용할꺼라서 일단 버전을 낮추니 잘 접속 된다.

 

2. JPA의존성을 설정하는 방법

implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'com.h2database:h2'

H2버전은 최신버전 상태로 원복하고 jpa의존성을 추가한다. 이것도 역시 접속 잘된다.

 

4. SQL init Script 추가

초기 데이터 생성 및 데이터 생성을 위한 init script 파일인 schema.sql과 data.sql을 resources 하위에 작성한다. 해당 파일들의 경로는 application.yml에서 변경이 가능하다.

schema.sql

CREATE TABLE USER
(
    USER_ID varchar(255) not null,
    USER_NM varchar(255) not null,
    primary key(USER_ID)
);

data.sql

INSERT INTO USER VALUES('user1', 'testuser');

 

 

5. 어플리케이션 재실행

어플리케이션을 실행하고 다시 H2 콘솔에 접속해보면 테이블과 데이터가 생성된 것을 확인할 수 있다.

 

반응형

댓글