H2 데이터베이스 설치 및 사용하기

H2 데이터베이스는 테스트용으로 가볍게 사용하기 좋은 데이터베이스 중 하나이다. H2는 Java를 위한 데이터베이스이고, 특히 스프링 부트 환경에서 테스트를 위한 메모리용 데이터베이스로 많이 사용된다.

H2 데이터베이스 공식 홈페이지에 들어가면 메인 화면에 다음과 같이 H2 데이터베이스의 특징이 깔끔하게 정리되어있다.

Welcome to H2, the Java SQL database. The main features of H2 are:

  • Very fast, open source, JDBC API
  • Embedded and server modes; in-memory databases
  • Browser based Console application
  • Small footprint: around 2 MB jar file size

이 글은 스프링 부트 환경에서 테스트용 메모리 데이터베이스 사용에 대한 것이 아니다. 이는 설정으로 간단히 사용할 수 있다. 여기서 알아볼 것은 H2 데이터베이스를 직접 설치하여, 데이터를 로컬에 저장해놓고 사용해보는 것이다. 따라서 메모리 데이터베이스가 아니므로, 서버가 종료되도 내부에 쌓인 데이터를 지우지 않고 유지한다.(로컬에 저장해놓고 사용한다.)

이와 같이 사용하면, H2 콘솔에서 SQL을 직접 사용하여 데이터를 제어할 수 있고 이에 대한 데이터가 로컬에 저장된다. 이 방법 역시 대부분 테스트를 위함이지만, 데이터베이스를 다루는 학습을 할 때 좀 더 유용하여 사용하게 되었다. 그리고 설치과정에서 몇 가지 삽질을 하게 되어 정리하게 되었다. 데이터베이스 관련 학습을 할 때 여러 번 사용해보기도 하여 더 정리를 할 필요성을 느끼게 되었다.

0. 설치환경

macOS Catalina 10.15.4

1. H2 데이터베이스 설치

설치 파일은 이 링크에서 다운로드받을 수 있다.

참고로 설치 버전은 Version 1.4.199 (2019-03-13), Last Stable 이다.

2. H2 데이터베이스 실행

설치 파일은 압축 파일이며, 다운로드받은 압축 파일을 해제한다. 그리고 터미널 기준으로 다음과 같은 명령어를 수행한다.

cd h2/bin
  • h2 실행파일은 /bin 디렉토리 내부에 있다.
chmod +x h2.sh
  • 실행 파일 h2.sh 을 실행가능한 권한으로 변경한다.
./h2.sh
  • H2 데이터베이스를 실행한다.

3. H2 데이터베이스 콘솔 접속

2 번 과정에서 H2 데이터베이스를 실행하면 웹 페이지가 열리고 해당 페이지는 무한 로딩이 발생할 것이다. 이 때 URL의 IP 부분을 localhost 로 변경하자.(데이터베이스를 로컬에 저장할 것이기 때문) 그리고 다시 엔터를 눌러 접속하면, 다음과 같은 H2 데이터베이스 콘솔 화면을 볼 수 있다.

여기서 만약 예를 들어, H2 데이터베이스 URL을 jdbc:h2:tcp://localhost/~/test 와 같이 정하여 접속하면 다음과 같은 에러를 볼 수 있을 것이다.

Database "/User/.../test" not found, either pre-create it or allow remote database creation
(not recommaneded in secure enviroments)
Database "/User/.../test" not found, and IFEXISTS=true, so we cant auto-create it

등...

이는 아직 위 URL의 경로에 H2 데이터베이스 파일이 만들어지지 않았기 때문이다. 이를 만들어보자.

4. H2 데이터베이스 로컬에 생성하기

jdbc:h2:tcp://localhost/~/test 이 URL로 접속할 수 있도록 로컬 환경에 해당 데이터베이스를 생성해보자.

여기서 TCP로 연결하는 이유는 로컬이나 외부 프로그램 등에서 동시에 정상적으로 접속가능하게 하기 위함이다. 그리고 스프링 부트 기준으로 DB URL은 서버 모드를 사용해야 한다.

위 콘솔에서 다음과 같이 정보를 입력하자.

  • 저장한 설정: Generic H2 (Embedded)
  • 설정 이름: Generic H2 (Embedded)
  • 드라이버 클래스: org.h2.Driver
  • JDBC URL: jdbc:h2:~/test
  • 사용자명: sa
  • 비밀번호: [입력하지 않음]

로컬에서 테스트용이므로 Embedded 모드로 생성했지만, 웹 애플리케이션의 DB URL은 위처럼 TCP를 사용한 서버 모드용 URL을 사용해야 한다.

H2 데이터베이스의 모드 및 URL은 이 링크에서 확인할 수 있다.

위 정보를 입력 후 연결을 클릭하면 아래와 같은 화면으로 넘어간다. (구글링을 해보면 생성시에 연결 시험 버튼을 클릭하면 에러가 발생하여 정상적으로 생성되지 않는다는 말도 있다. 하지만, 직접 실험해본 결과 연결 시험 후 연결을 해도 정상적으로 생성되었다.)

(위 MEMBER 테이블은 이전에 사용하던 것이므로, 처음 생성시에는 없는 것이 정상이다.)

그리고 실제로 로컬의 ~/ 경로에 가보면 test.mv.db 이름의 파일이 생성된 것 역시 확인해볼 수 있다.

5. H2 데이터베이스 접속하기

생성된 H2 데이터베이스는 생성될 때의 정보 그대로를 입력하면 정상적으로 접속 가능하다. (Embedded 모드, Server 모드 둘 다 콘솔에서는 관계없이 접속가능했다.)

해당 H2 데이터베이스를 스프링 부트로 개발한 웹 애플리케이션에서 연결하여 사용하려면 Server 모드의 URL을 사용해야 한다. Embedded 모드 URL인 jdbc:h2:~/test 이 아닌, jdbc:h2:tcp://localhost/~/test 이 Server 모드 URL로 설정해야 정상적으로 접속이 가능했다.

참고자료


좋은 웹페이지 즐겨찾기