spring boot h2 memtestdb not found 문제

이동빈·2021년 8월 23일
0

h2 console 접근 에러

  • gradle이나 maven으로 h2 라이브러리를 추가하고 별도의 설정없이 Spring 프로젝트를 실행하면 인메모리 기반의 h2 db가 생성되어 동작합니다.
  • 그러나 DB 관리를 위해 콘솔을 접속하여 로그인하면 아래와 같이 에러가 발생합니다.

image

  • JDBC URL의 기본 값으로 mem:testdb 라고 되어있는데, Connect 버튼을 누르면 mem:testdb를 찾을 수 없다는 에러가 발생합니다.
  • 예전에는 자동으로 testdb가 자동으로 생성되었지만, 버전이 바뀌면서 자동으로 생성되지 않도록 수정되었다는 것을 짐작할 수 있습니다.

h2 db 버전 히스토리

  • 테스트 당시 gradle에 h2 버전을 명시하지 않았기 때문에, 최신 버전을 사용했습니다.
    (2021.08월 기준, 2019.10월에 릴리즈된 1.4.2 버전이 최신입니다.)
  • h2 보안 문제로 testdb를 자동 생성 하지 않도록 수정된 버전은 1.4.198(2019년 2월 릴리즈) 입니다.
  • TCP Server and H2 Console do not allow creation of new databases by default. (릴리즈노트 참고)

문제 해결방법

  • 해결 방법은 2 가지가 있습니다.

    1. 1.4.198 이전 버전으로 되돌리는 방법
    2. 설정을 통해 데이터베이스를 생성하는 방법 (최신버전에서 권장하는 방식)
  • 첫번째 방법은 1.4.198 이전 버전을 사용하는 것이고,

  • 두번째 방법은 설정파일에 데이터베이스를 설정하는 것입니다.

    • 사실 단순히 테스트용으로 개발하는 용도라 굳이 보안에 신경을 쓰지 않아도 되지만, 설정을 통해 직접 db를 생성하는 방식이 권장됩니다.

application.yml 설정

  • 간단하게 아래와 같이 url와 계정정보를 설정해주면 됩니다.
  • username과 password를 설정하지 않으면 디폴트 값으로 비밀번호 없이 sa 계정으로 접속 가능합니다.
spring:
  h2:
    console:
      enabled: true
      
  datasource:
    driver-class-name: org.h2.Driver
    url: jdbc:h2:mem:testdb;DB_CLOSE_ON_EXIT=FALSE
    #username: sa
    #password: 1234
  • 설정 후 프로젝트를 재실행한 후 콘솔에 접속하여 설정한 정보로 입력하면 로그인에 성공합니다. image image
profile
호기심 많은 개발자

0개의 댓글