[H2 DB] JDBC URL 초기화 하기(or 다른 URL로 변경하기)
스프링 부트에서 인메모리 db로 많이 사용하는 H2 db는 설정이 간편하고 사용이 쉽다.
일반적으로 로컬 개발시 테스트용도로 많이 사용하는데,
데이터를 확인하고자 할 때 콘솔에 직접 접속하여 데이터가 정상적으로 저장되었는지 등의 확인을 해보고 싶을 때가 있다.
일반적으로 그런경우
setting값을 Generic H2(Server) 로 맞추어서 h2 DB를 별도로 실행시켜서 작업을 한다.
하지만 스프링 부트를 통해 실행시킨 상태(Embedded 모드) 라면
(일반적으로 다른것을 변경하지 않았을때) localhost:8080/h2-console로 접속하면
다음과 같이 h2 db의 콘솔창을 확인할 수가 있다.
여기서 문제가 되는 부분은
기존에 다른 프로젝트 작업을 위해 맞추어둔 JDBC URL값이 있다고 하면 해당 값이 고정되어 있어서
새로운 값을 넣어도 connect가 오류가 나면서 더이상 진행이 되지 않는다.
이제 그 방법을 찾아서
JDBC URL 부분을 변경해보도록 하자
(여기에서는 h2 데이터베이스를 별도로 설치해서 진행하는 방식이 아니라 스프링 부트에서 의존성만 받아서 실행하는 방식으로 설명한다. 아래 의존성만 build.gradle에 있으면 준비는 끝이다.)
dependencies {
...
runtimeOnly('com.h2database:h2')
...
}
위의 의존성만 추가가 되면 테스트나
스프링 부트를 실행시키기만 하면
이와 같이 인메모리 db(h2 db)를 사용하는 것을 확인할 수 있다.
문제는 위에서 언급한대로 localhost:8080/h2-console에 접속했을 때 JDBC URL값을 기존에 다른 프로젝트에서 설정한 값이 있다면, 그 값 외에 다른 값을 아무리 넣어도 접속은 불가하다는 것을 확인할 수 있다.
이럴 때 url값을 변경하기 위해서는 application.properties (혹은 yml 파일) 에서 내가 사용하고자 하는
url 값을 변경해주면 된다.
기존에는 위의 그림처럼 123123 으로만 접속이 되고 url값이 변경되지 않았다고 하면,
application.properties 의 내용에 다음과 같이 url을 설정해보자
spring.datasource.url=jdbc:h2:mem:testdb;MODE=mysql;
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.platform=h2
나머지 부분은 일반적인 설정부분이라 url부분만 보면 된다.
위처럼 작성 후에 스프링 부트를 다시 재기동 후 localhost:8080/h2-console에 다시 접속해보자
그리고 이제는 url값을 변경하여 다음과 같이 application.properties에 설정한 url과 같이 작성한다.
그리고 Connect 버튼을 누르면...!
정상적으로 접속이 가능한 것을 확인할 수 있다.
<번외> file 저장 방식으로 변경해보기
h2 다음에 mem이라는 옵션이 포함되어 있는 건 인메모리 방식으로 접속하는 것인데,
이건 스프링 부트가 기동되고 있는 중에만 데이터가 유지되고 서버가 내려가면 데이터가 소실되는 말 그대로 휘발성의 메모리 방식의 데이터 베이스 저장 방식이다.
영구저장을 위해 파일 저장 방식을 사용해보자
mem 부분을 file로 변경하고 testdb로 작성되어 있는 부분에
db내용을 저장할 경로를 입력한다.
ex) 다음과 같이 변경해본다
spring.datasource.url=jdbc:h2:file:C:/Users/Documents/memoryData;MODE=mysql;
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.platform=h2
그리고 콘솔에서도 인메모리 방식과 동일하게
다음과 같이 그대로 file방식의 url 값을 넣어주면 접속이 가능하다.