spring
spring
spring
  • README
  • Spring
    • IoC
    • Is Spring Bean Thread-Safe?
    • Spring Singleton
    • Component Scan
    • Spring Annotation
    • 의존 관계 주입(DI)
    • Lombok 활용하기
    • Bean 생명주기와 콜백
    • Bean Scope
    • AOP(1) - AOP란
    • AOP(2) - Aop Proxy
    • AOP(3) - Dynamic Proxy
    • AOP(4) - AspectJ
    • POJO
    • Spring 서비스 구조
    • Transaction
    • JPA란?
      • 영속성 관리
      • JPA Entity
      • Spring Data JPA
      • Spring Data Specification
    • Model Mapping
    • Cache
    • restTemplate
    • YAML 파일 설정
    • Spring Boot
      • H2 DB 설정
      • 다중 데이터베이스 설정
      • Mybatis 연동하기
    • Spring Batch
      • Batch 시작해보기
      • Batch Job Flow
      • Job
      • Step
      • Batch Scope & Job Parameter
      • JobRepository와 메타테이블
      • Chunk 지향 프로그래밍
      • ItemReader
      • ItemProcessor
      • ItemWriter
      • Batch Schedular
      • Job별 Bean등록하기
      • Batch 구현시 발생한 오류 정리
      • Spring Batch Scaling
        • Multithread Job구현시 이슈사항
      • Spring test
        • Junit5
          • 테스트 이름 표기
          • 테스트 그룹 사이의 관계
          • 태그와 필터링
          • 동적 테스트
          • 테스트 LifeCycle
          • 테스트 메서드
          • 테스트 순서
          • AssertJ
          • 테스트 병렬 실행
          • AssertJ
          • Mock
        • Spring Boot Test DB 분리
        • Spring Batch Test
Powered by GitBook
On this page
  • Dependency
  • Gradle
  • Maven
  • 스프링 부트 자동 설정
  • 프로퍼티 값 설정(application.yml)
  • 테이블, 데이터 생성
  • 참고

Was this helpful?

  1. Spring
  2. Spring Boot

H2 DB 설정

PreviousSpring BootNext다중 데이터베이스 설정

Last updated 3 years ago

Was this helpful?

H2 DB는 컴퓨터에 내장된 램(RAM) 메모리에 의존하는 자바 기반의 RDBMS이다. 용량이 적고, 브라우저 기반의 콘솔 등을 지원해 장점이 많다. 또한, SpringBoot에서 별도 DB를 설치하지 않고 바로 사용할 수 있는 것도 장점이다. 메모리 데이터베이스로 보통 테스트용으로만 쓰인다.

Dependency

Gradle

runtimeOnly 'com.h2database:h2'

H2 의존성을 build.gradle에 추가해준다. runtimeOnly 로 런타임시점에만 의존하도록 변경해 주었다.

Maven

# pom.xml
<dependency>
	<groupId>com.h2database</groupId>
  <artifactId>h2</artifactId>
  <scope>runtime</scope>
</dependency>

스프링 부트 자동 설정

빈을 등록해 H2 콘솔을 사용할 수 있으나, 스프링 부트 자동설정으로 H2를 설정할 수 있다.

스프링 부트 자동 설정 프로퍼티 문서를 살펴보면 다음과 같은 값이 있다.

spring.h2.console.enabled는 콘솔 사용여부 값으로 false가 디폴트 값이며, 이 값을 true로만 변경하면 별도 빈 설정을 해주지 않아도 된다.

프로퍼티 값 설정(application.yml)

spring:
  h2:
    console:
      enabled: true							# h2 콘솔 사용
      path: /h2									# localhost:port/h2 로 접근 가능
      settings:
        trace: false						# Print additional trace information 
        web-allow-others: true	# 브라우저로 접근가능하게 하기
  profiles:
    active: local
  # H2 메모리 DB를 위한 설정
  datasource:
    driver-class-name: org.h2.Driver
    url: jdbc:h2:mem:userdb;DB_CLOSE_DELAY=-1 # userdb 스키마에 mem인 메모리 데이터 베이스로 동작
    username: sa
    password:
    sql-script-encoding: utf-8

테이블, 데이터 생성

spring은 기본값으로 classpath 루트에 schema.sql과 data.sql 파일이 있다면 서버 시작 시 스크립트를 실행한다.

  • src/main/java/resources/schema.sql : 테이블 스키마(DDL)

    --
    -- 회원
    --
    DROP TABLE IF EXISTS MEMBER;
    
    CREATE TABLE MEMBER COMMENT '회원' (
        MBR_ID      VARCHAR(10)     NOT NULL    COMMENT '회원ID'
      , NAME        VARCHAR(100)                COMMENT '회원명'
      , PRIMARY KEY (MBR_ID)
    );
  • src/main/java/resources/data.sql : DML

    INSERT INTO MEMBER
        (MBR_ID, NAME)
    VALUES ('0000000010', '회원_0010')
         , ('0000000098', '회원_0098')
         , ('0000000101', '회원_0101')
    ;

위 두개 파일을 생성후 다시 서버를 재시작하면 schema.sql의 MEMBER 테이블이 생성되었고, data.sql에 선언된 데이터들도 추가된 것을 확인할 수 있다.

특정 환경에 맞는 SQL을 실행시키고 싶은 경우에는 프로퍼티 설정을 추가해주면된다.

spring.datasource.platfrom={platform}

그런후 플랫폼에 맞게 schema-{platform}.sql , data-{platform}.sql 을 생성하면 해당 플랫폼 스크립트가 실행된다. 기본적으로는 메모리 DB가 아닌경우 스크립드 문을 실행시키지 않는다.

메모리 DB가 아닌 경우에도 실행시키고 싶다면 아래 프로퍼티를 always로 설정해주면 된다.

spring.datasource.initialization-mode=always

초기화 설정을 하고싶지 않은 경우에는 never 설정을 하면된다.

spring.datasource.initialization-mode=never

참고

로 들어가면 아래 창이 뜨고, 위에서 설정한 프로퍼티 값으로 로그인을 할 수 있다.

https://www.h2database.com
http://localhost:8080/h2-console
wan-blog | Spring 데이터베이스 Schema 및 Data 초기설정하기
image-20210216215948595
image-20210216220557491
image-20210216221529671