본문 바로가기

Spring&IntelliJ

h2 파일 생성 실패시, Database not found 애러 해결방법

 

 

Database "C:/Users/dhfle/jpashop2" not found, either pre-create it or allow remote database creation (not recommended in secure environments)

 

jdbc:h2:~/jpashopp;AUTO_SERVER=TRUE 를 입력했더니 해결되었어. 이것의 의미가 뭐야?

해결됐다니 다행이야.

AUTO_SERVER=TRUE는 H2의 자동 서버 모드(Auto Mixed Mode) 를 활성화하는 옵션이야.

네가 입력한 URL:

jdbc:h2:~/jpashopp;AUTO_SERVER=TRUE
 

의 의미를 분해하면:

1. jdbc:h2:~/jpashopp

~
=
C:\Users\dhfle
 

따라서 실제 DB 파일은

C:\Users\dhfle\jpashopp.mv.db
 

에 생성된다.


2. AUTO_SERVER=TRUE

원래 H2는 두 가지 방식으로 사용할 수 있다.

Embedded Mode

프로그램(JPA)
   ↓
 jpashopp.mv.db
 

현재 실행 중인 프로그램만 DB 파일을 사용할 수 있다.

따라서 JPA 프로그램이 DB를 잡고 있으면 H2 Console은 접근하지 못한다.


Server Mode

JPA
  ↓
H2 Server
  ↑
H2 Console
 

모든 클라이언트가 H2 서버를 통해 접속한다.


AUTO_SERVER=TRUE가 하는 일

처음 DB를 여는 프로세스가 자동으로 서버 역할도 수행한다.

JPA 실행
   ↓
DB 파일 생성
   ↓
자동으로 H2 서버도 생성
 

그래서 나중에

H2 Console
 

에서도 같은 DB에 접속할 수 있게 된다.


왜 네 경우에 해결되었을까?

원래는

jdbc:h2:~/jpashopp
 

로 접속했을 때

Database not found
 

가 발생했는데,

AUTO_SERVER=TRUE
 

를 붙이자 H2가

C:\Users\dhfle\jpashopp.mv.db
 

파일을 생성하면서 자동 서버도 띄운 것이다.

그래서 에러가 사라진 것이다.


김영한 JPA 강의에서는 보통

처음에는

jdbc:h2:~/jpashop
 

로 접속해서 DB를 생성하고,

그 다음부터

jdbc:h2:tcp://localhost/~/jpashop
 

를 사용한다.

하지만 H2 2.x 버전에서는 정책이 좀 더 엄격해져서 AUTO_SERVER=TRUE를 붙여야 잘 동작하는 경우가 많다.


현재 사용 중인 H2 버전이 2.2.224인데, 이 버전은 김영한 강의에서 사용한 H2 1.4.x 버전과 동작 방식이 조금 달라서 강의를 그대로 따라 하면 네가 본 것 같은 문제를 자주 만나게 된다.