IntelliJ

IntelliJ 에서 embedded H2에 연결하기

자바니또 2021. 10. 12. 14:59

개요

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에 접근할 수 있는 방법이 없다.

Embedded Mode

H2에서는 이러한 단점을 해결할 수 있는 방법으로 Automatic Mixed Mode를 제공한다. Mixed Mode란 DB를 App에 내장한 Embedded Mode와 H2 TCP 서버를 생성하고 그 안에 H2 DB를 생성하여 APP과 다른 클라이언트에서 모두 연결할 수 있도록 하는 Server Mode를 혼합한 방식이다. 그림으로 나타내면 다음과 같다.

Mixed Mode

즉, H2 TCP 서버를 App에 내장시키고 다른 클라이언트에서도 접근할 수 있도록 하는 것이다. 진행 흐름은 다음과 같다.

  1. H2 DB에 대한 첫 연결을 시도하면 Embedded Mode로 수행된다.
  2. .lock.db파일에 H2 TCP Server의 IP주소와 Port, HostName, key 를 저장한다.
  3. 이후 DB에 대한 연결은 자동으로 Server Mode로 수행되며, 이때 URL은 처음 연결한 APP과 완전히 같은 URL로 수행한다.
  4. 연결을 시도한 클라이언트는 .lock.db파일에 적혀 있는 IP와 Port, HostName을 통해 Key값을 전달하여 매핑된 DB에 연결한다. 

.lock.db 파일

이 방법은 보다시피 In-memory 방식은 지원되지 않으며 .db파일을 이용한 방법만 가능하다. 또한 첫 연결은 자동으로 내장 모드로 수행되어 비교적 빠르게 연결되기 때문에 첫 연결은 어떤 앱에서 수행할지 고려해야 한다.

.properties 파일 설정

URL 형식은 jdbc:h2:~/{db이름};AUTO_SERVER=TRUE 로 한다. ;AUTO_SERVER=TRUE 옵션은 Automatic Mixed Mode를 사용하겠다는 의미이며 H2 서버를 자동으로 생성하게 해주는 옵션이다. 기본적으로 C:\Users\{사용자이름} 폴더에 .db 파일이 생성된다.

IntelliJ 설정

  1. Database 탭을 연다. 탭이 보이지 않는다면 쉬프트 키를 두번 눌러 Database를 입력하면 찾을 수 있다.
  2. '+'버튼을 누르고
  3. Data Source에서 H2를 찾아서 연다.
  4. 연결 타입을 Embedded로 설정하고
  5. username과 URL을 APP의 DataSource 설정과 같게 한다.
  6. Test Connection을 눌러 연결이 잘 시도되는지 확인한다.

Reference