SpringBoot에서 H2 데이터베이스 설정하는 방법

devdo·2021년 11월 7일
1

SpringBoot

목록 보기
3/34
post-thumbnail

H2 데이터베이스란?

이번에는 h2 DB 연결방법을 포스팅해 본다.

h2 DB는 RDBMS 지만 in-memory 방식이다.

즉, 인 메모리(in-memory) 데이터베이스의 경우, 데이터는 시스템 메모리에 저장되며 프로그램을 끄면 데이터가 없어져 버린다. 일반적으로 Test 용도로 빠르게 개발하기 위해, 쓰이는 데이터베이스로 많이 알려져 있다.

참고)
H2 데이터베이스의 GenerationType은 SEQUENCE이다.
@GeneratedValue(strategy = GenerationType.SEQUENCE)

  • 데이터베이스 시퀀스는 유일한 값을 순서대로 생성하는 특별한 데이터베이스 오브젝트이다. SEQUENCE 전략은 이 시퀀스를 사용하여 기본키를 생성한다. 주로 오라클, PostgreSQL, DB2, H2 데이터베이스에서 사용할 수 있다.

https://hyeonic.tistory.com/m/196


설정

build.gradle 설정

runtimeOnly 'com.h2database:h2'

// test에서 lombok 사용
testCompileOnly 'org.projectlombok:lombok'
testAnnotationProcessor 'org.projectlombok:lombok'

appication.yml


spring:
  h2:
    console:
      enabled: true  # H2 Console을 사용할지 여부 (H2 Console은 H2 Database를 UI로 제공해주는 기능)
      path: /h2-console  # H2 Console의 Path


  datasource:
    driver-class-name: org.h2.Driver
    url: jdbc:h2:~/test;MODE=MySQL;
    username: sa
    password:

https://www.h2database.com

Download > All Downloads > Archive Downloads 에 들어간다.

h2 데이터베이스 버전은 스프링 부트 버전에 맞춘다. - 현재 1.4.200 버전을 다운로드 받으면 된다.

다음 링크에 가면 다양한 H2 다운로드 버전을 확인할 수 있다.
https://www.h2database.com/html/download-archive.html

들어가는 방법은 설치완료후, Window 검색창에 H2-console에 치면 들어가진다.

사용자명은 sa 입력
JDBC URL에 다음 입력,
jdbc:h2:~/test (최초 한번) 이 경우 연결 시험 을 호출하면 오류가 발생한다. 연결 을 직접 눌러주어야 한다.
~/test.mv.db 파일 생성 확인
이후부터는 jdbc:h2:tcp://localhost/~/test 이렇게 접속할 수 있다.

오류문제

⚠️ Connection 안될시, 직접 진행하시길!

  1. h2.bat 직접 실행

  2. 트레이 아이콘에서 두번 클릭

test.mv.db 생성됨을 확인할 때는,
C:\Users\{사용자계정이름} 폴더에 있을 것이다.

⚠️ Security 문제

1) console localhost 연결 거부

해결방안)
Security Config 에 다음을 추가 (Security6버전)

       // h2-console, 해당 페이지가 동일한 출처에서만 XFrame으로 로드될 수 있도록 설정
        http
                .headers(headers -> {
                    headers.addHeaderWriter(
                            new XFrameOptionsHeaderWriter(
                                    XFrameOptionsHeaderWriter.XFrameOptionsMode.SAMEORIGIN
                            )
                    );
//        // X-Content-Type-Options 헤더 추가
//        headers.contentTypeOptions();
//        // X-XSS-Protection 헤더 추가
//        headers.xssProtection();
                });

참고)
https://velog.io/@jangcoding/BackOffice-Project-SpringSecurity-사용-중-H2-console-localhost-연결-거부-TroubleShooting



SpringBoot 내 설정들


스프링부트에서 application yml을 통해 간단하게 설정하는 방법
은 다음과 같다.

application yml 설정

spring:
  h2:
    console:
      enabled: true

  jpa:
    database-platform: org.hibernate.dialect.H2Dialect
    open-in-view: false
    hibernate:
      ddl-auto: create
      properties:
        hibernate:
          show_sql: true
          format_sql: true
  • 초기 설정
spring:
  h2:
    console:
      enabled: true
  • /h2-console 디폴트 설정
  datasource:
    driver-class-name: org.h2.Driver
    url: jdbc:h2:~/test;MODE=MySQL;
    username: sa
    password:
  • h2 - jpa 연결 설정
  jpa:
    database-platform: org.hibernate.dialect.H2Dialect
    open-in-view: false
    hibernate:
      ddl-auto: create
      properties:
        hibernate:
          show_sql: true
          format_sql: true

프로젝트를 실행시 Run console에 JDBC URL이 나오게 되있다.

H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:26b18340-687a-410e-9653-c8c5acf95356'

그리고
http://localhost:8080/h2-console 접속
Run console에 나온 JDBC URL을 입력한다.

드디어 h2 웹콘솔로 들어가진다.



참고

https://www.youtube.com/watch?v=2M8BQE4awRU

profile
배운 것을 기록합니다.

0개의 댓글