IntelliJ 에서 embedded H2에 연결하기
개요
SpringBoot를 사용하여 로컬에서 개발할 때 H2를 많이 사용하게 된다. h2는 일반적으로 h2-console이라는 웹 콘솔을 사용하여 데이터를 조회하고 조작할 수 있는데 기능적인 부족함과 편리성 때문에 IntelliJ Ultimate에 있는 Database도구를 사용해 연결할 수 있는 방법을 찾아보았다.
이번 포스팅에서는 설치형 H2가 아니라 SpringBoot에 의존성을 둔 H2 embedded DB를 사용하면서 IntelliJ에서 연결하는 방법을 알아본다.
목차
- 사용할 방법
- .properties 파일 설정
- IntelliJ 설정
사용할 방법
H2를 App에서 In-memory나 .db파일을 이용하여 내장 DB를 생성하면 JVM 내에 DB가 생성되기 때문에 외부의 다른 클라이언트(ex. IntelliJ)에서 App에서 생성한 DataSource에 접근할 수 있는 방법이 없다.
H2에서는 이러한 단점을 해결할 수 있는 방법으로 Automatic Mixed Mode를 제공한다. Mixed Mode란 DB를 App에 내장한 Embedded Mode와 H2 TCP 서버를 생성하고 그 안에 H2 DB를 생성하여 APP과 다른 클라이언트에서 모두 연결할 수 있도록 하는 Server Mode를 혼합한 방식이다. 그림으로 나타내면 다음과 같다.
즉, H2 TCP 서버를 App에 내장시키고 다른 클라이언트에서도 접근할 수 있도록 하는 것이다. 진행 흐름은 다음과 같다.
- H2 DB에 대한 첫 연결을 시도하면 Embedded Mode로 수행된다.
- .lock.db파일에 H2 TCP Server의 IP주소와 Port, HostName, key 를 저장한다.
- 이후 DB에 대한 연결은 자동으로 Server Mode로 수행되며, 이때 URL은 처음 연결한 APP과 완전히 같은 URL로 수행한다.
- 연결을 시도한 클라이언트는 .lock.db파일에 적혀 있는 IP와 Port, HostName을 통해 Key값을 전달하여 매핑된 DB에 연결한다.
이 방법은 보다시피 In-memory 방식은 지원되지 않으며 .db파일을 이용한 방법만 가능하다. 또한 첫 연결은 자동으로 내장 모드로 수행되어 비교적 빠르게 연결되기 때문에 첫 연결은 어떤 앱에서 수행할지 고려해야 한다.
.properties 파일 설정
URL 형식은 jdbc:h2:~/{db이름};AUTO_SERVER=TRUE 로 한다. ;AUTO_SERVER=TRUE 옵션은 Automatic Mixed Mode를 사용하겠다는 의미이며 H2 서버를 자동으로 생성하게 해주는 옵션이다. 기본적으로 C:\Users\{사용자이름} 폴더에 .db 파일이 생성된다.
IntelliJ 설정
- Database 탭을 연다. 탭이 보이지 않는다면 쉬프트 키를 두번 눌러 Database를 입력하면 찾을 수 있다.
- '+'버튼을 누르고
- Data Source에서 H2를 찾아서 연다.
- 연결 타입을 Embedded로 설정하고
- username과 URL을 APP의 DataSource 설정과 같게 한다.
- Test Connection을 눌러 연결이 잘 시도되는지 확인한다.
Reference