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 한 번 써주면 된다.
'코딩 도구 > 개발 도구 & 환경 (Dev Tools & Environment)' 카테고리의 다른 글
[Spring 모니터링] Micrometer + Prometheus + Grafana 실전 연동 (1) | 2025.06.11 |
---|---|
[IntelliJ] 테스트 결과를 계단식, 가장 이상적인 설정 방법 (0) | 2025.04.29 |
[GitHub]여러 React 프로젝트를 하나의 레포지토리로 합치는 방법 (0) | 2025.04.08 |
[Oracle] MacOS에서 오라클 실행하기 (feat.Docker) (0) | 2025.03.08 |
[IntelliJ] MacOS 단축키 (0) | 2025.02.07 |