[H2, JPA] 연결 오류: Database not found, either pre-create it or allow remote database creation

2025. 6. 13. 13:50코딩 도구/개발 도구 & 환경 (Dev Tools & Environment)

반응형

이번엔 H2 데이터베이스를 JPA랑 연결해서 제대로 돌려보는 과정에서 겪은 실패와 성공의 기록이다.

 

처음에 내가 설정한 JDBC URL은 이거였다.

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

그리고 persistence.xml에는 hibernate.hbm2ddl.auto=create까지 넣어줬다.

이 상태에서 JpaMain을 실행했더니 바로 터졌다. 에러 로그엔 이런 말이 있었다.

Database "/Users/moonki/jpashop" not found, either pre-create it or allow remote database creation

결국 Hibernate가 DB에 연결하려 했는데, DB 파일 자체가 없어서 실패한 거다.

그럼 콘솔에서 직접 DB를 만들어보자 싶어서 H2 웹 콘솔에 접속했다.
서버는 이미 org.h2.tools.Server로 잘 띄워둔 상태였고, 브라우저로 http://localhost:8082에 들어가서 로그인 시도.
이번엔 JDBC URL을 똑같이 써봤다.

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

 

에러

또 똑같은 에러가 뜬다. DB 파일 없다고.

그래서 이번엔 URL을 바꿔봤다.
Embedded 모드로 DB를 만들면 파일이 생기겠지 싶어서 다음으로 바꿨다.

jdbc:h2:~/jpashop;IFEXISTS=FALSE

하지만 역시 실패. 여전히 DB를 찾을 수 없다고 나왔다.
이건 IFEXISTS=FALSE가 웹 콘솔에서 잘 안 먹히는 경우가 있어서 그런 듯하다.

그래서 마지막으로 시도한 게 바로 이거다.

java -cp h2-2.3.232.jar org.h2.tools.Shell -url "jdbc:h2:~/jpashop" -user sa

이걸 터미널에서 실행하고 들어가서 딱 한 줄 쳤다.

java -cp h2-2.3.232.jar는 H2 라이브러리를 클래스패스로 지정해서 실행하는 명령이다.
org.h2.tools.Shell은 H2가 제공하는 SQL 콘솔 도구로, JDBC URL을 통해 DB에 접속한다.
-url, -user 옵션은 접속할 DB 위치와 사용자 정보를 지정해 직접 쿼리를 입력할 수 있게 한다.

CREATE TABLE dummy (id INT);

이 한 줄로 /Users/moonki/jpashop.mv.db 파일이 드디어 생성됐다. 

~/jpashop.mv.db라는 실제 DB 파일을 생성하기 위한 트리거 역할

 

이제 다시 H2 웹 콘솔에 들어가서 다음과 같이 입력하니까 연결이 됐다.

jdbc:h2:~/jpashop

DB가 생성되었기 때문에 이번엔 아무 문제 없이 접속에 성공했다.
게다가 테이블도 잘 보이고 Hibernate가 create 옵션으로 만든 테이블들도 쫙 뜬다.
ITEM, MEMBER, ORDERS까지 확인 완료.

결론은 이거다.

  • H2를 tcp:// 또는 ~/ 경로로 사용할 땐 DB 파일이 먼저 있어야 한다
  • IFEXISTS=FALSE는 생각보다 안정적이지 않다 (특히 콘솔에선)
  • 차라리 Shell 모드로 한 줄 쿼리 날려서 DB 생성시키는 게 깔끔하다

결국 시행착오 다 겪고 나서야 드디어 DB 생성부터 Hibernate 연동까지 성공했다.
이제부터는 H2 초기 설정할 때 겁먹지 말고 그냥 Shell 한 번 써주면 된다.

반응형