728x90
🚨 Error :

스프링 부트에 H2를 연결하여 테스트 코드를 작성하던 중에 애플리케이션 실행이 되지 않으면서 Database "디렉터리 경로" not found, either pre-create it or allow remote database creation라는 에러가 떴다.
🤓 원인 :
이 에러는 말 그대로 프로젝트와 연결된 데이터베이스를 찾을 수 없어서 생기는 문제로 프로젝트에 사용하는 데이터베이스를 먼저 생성해줘야 한다. 나의 경우에는 과거에 실수로 db를 지우고, 한참 뒤에 프로젝트를 열고 실행하다가 문제가 발생한 것이다.
🚒 해결 :
- 반드시 순서대로 진행하자.
- h2 콘솔에 들어가 만지다가 잘 안되었다면 h2를 끄고 다시 킨 다음 아래 방법을 따라하면 된다.
- 이것저것 연결을 누른 것 때문에 충돌이 생겨 아래 설명할 방법이 안 먹힐 수 있기 때문이다.
- 먼저 h2 경로로 들어가 h2를 실행시킨다.
- 맥 사용자라면 아마 ~/h2/bin 경로로 들어가면 있을 것이다.
- 터미널에서 ./h2.sh를 입력하여 h2를 실행시킨다.

- h2 콘솔에 접속하여 아래와 같이
- jdbc:h2:/원하는 경로/사용할 데이터베이스 이름
- 으로 경로를 설정한 후 연결을 누른다.(연결 시험이 아니다)
- 연결이 되면 db가 생성된 것이다.
- 만약 Server Mode 사용을 하려고 하는데 저장한 설정이 server로 되어있지 않다면 server로 바꾸면 된다.
- 확실하지는 않지만 Embedded Mode는 application.yml에 설정하고 애플리케이션을 실행하면 db를 생성하지 않아도 자동 생성이 되는 것 같은데 Server Mode는 안 되는 거 같다.
- 나 같은 경우는 Server Mode로 사용하려고 할 때 에러가 났기 때문에 나와 같이 Server Mode로 사용하려고 하다가 같은 에러를 만난 경우에는 저장한 설정을 Server로 변경하면 된다.
- 혹시 어떤 모드가 있는지 모르고 뭐를 사용해야 좋을지 모르겠다면 링크를 참고하면 된다.

- 접속이 확인되었으면 맨 왼쪽에 모서리 버튼을 클릭하여 연결을 끊는다.
- 만약 위 방법이 되지 않은 경우 h2를 끄고 재시작하면 정상적으로 db가 만들어진다.

- 해당 경로에 들어가 보면 db가 생성되었음을 확인할 수 있다.
<주의!>

- application.yml에
- jdbc:h2:~/원하는 경로/ 사용할 데이터베이스 이름
- 으로 경로를 설정하고 애플리케이션을 실행하면 Embedded Mode로 실행되는 것이므로
- Database may be already in use라는 에러가 발생할 것이다. 따라서
spring:
datasource:
url: jdbc:h2:tcp://localhost/~/jpashop;
username: sa
password:
driver-class-name: org.h2.Driver
- 위와 같이 jdbc:h2:tcp://localhost/~/(h2 콘솔로 생성한 db 경로)/(h2 콘솔)로 생성한 데이터베이스 이름;
- Server Mode로 실행하는 url이다.
- 을 적어주고 애플리케이션을 실행하면 정상적으로 실행된다.

- 이후 Server Mode url로 H2 콘솔에 들어가면 JPA에 의해 데이터베이스의 테이블이 만들어진 것을 확인할 수 있다.
🤔 의문점 :
없음!
참고
728x90