Post

H2 데이터베이스 연결

환경

  • m1 macos
    • Sonoma 14.1.1

목표

  • 도커 컨테이너로 H2 데이터 베이스 실행
  • 스프링부트 프로젝트와 연결
1
2
3
4
5
6
7
8
9
# 도커 run 명령어로 이미지 다운로드
docker run -d -p 1521:1521 -p 81:81 \
-v /Users/jeongjin/Documents/h2:/opt/h2-data \
--name=h2 \
-e H2_OPTIONS="-ifNotExists" \
oscarfonts/h2
# 실행결과
CONTAINER ID   IMAGE                              COMMAND                   CREATED          STATUS                 PORTS                                        NAMES
63a250d87b70   oscarfonts/h2                      "/bin/sh -c 'java -c…"   33 seconds ago   Up 32 seconds          0.0.0.0:81->81/tcp, 0.0.0.0:1521->1521/tcp   h2

주의점은 -e H2_OPTIONS="-ifNotExists" 해당 옵션이 꼭! 필요하다. 그렇지 않고 실행하면, db 에 접속도 할 수 없고, 터미널에서 db 를 생성할 수 없다.

image

개발자는 무조건 터미널에서 작업하는 것이 미덕으로 느껴지지만, GUI 의 힘을 빌려 손쉽게 시작할 수 있다.

일단, docker run 커맨드가 아닌 docker pull 로 이미지만 다운로드 받고, 원하는 설정을 넣어서 실행시킬 수 있다. 터미널 사용이 강제되는 것이 아니라면 GUI 를 이용하는 것이 오타 등 휴먼에러를 줄일 수 있지 않나 싶다.

(각설) 설정을 바꾸지 않았다면, localhost:81 로 접속할 수 있다.

H2TCP 연결로 사용하기 위해서는 다음과 JDBC URL 을 다음과 같이 지정한다.

jdbc:h2:tcp://localhost:1521/${DB 이름}

처음엔 test 라는 db 가 생성되어 있다. 필요한 db 를 생성하는 방법은 2가지가 있다.

브라우저에서 생성

너무 간단한데, 연결을 Server 로 두고 jdbc:h2:tcp://localhost:1521/${DB 이름} 라고 하고 연결을 하면 db 가 생긴다.

가령, jdbc:h2:tcp://localhost:1521/db_fruit 이라고 입력해보자.

image

도커 컨테이너 내에서 확인해보면,

1
2
3
4
5
6
7
8
9
root@e203d58f5a06:/opt/h2-data# ls -al
total 112
drwxr-xr-x 6 root root   192 Nov 11 15:00 .
drwxr-xr-x 1 root root  4096 Apr 24  2023 ..
# 웹에서 입력한 db 가 생성되었다.
-rw-r--r-- 1 root root 16384 Nov 11 15:00 db_fruit.mv.db
-rw-r--r-- 1 root root 32768 Nov 11 14:56 db_order.mv.db
-rw-r--r-- 1 root root 32768 Nov 11 14:57 db_product.mv.db
-rw-r--r-- 1 root root 28672 Nov 11 14:57 test.mv.db

터미널에서 생성

/opt/h2/bin 경로에 h2-2.1.214.jar 파일을 실행한다.

java -cp h2-2.1.214.jar org.h2.tools.Shell

  • jdbc:h2:tcp://localhost:1521/${생성하고자 하는 db 이름}
  • org.h2.Driver
  • User (접속할 아이디)
  • Password (접속할 비밀번호)

값을 입력하면 db 가 생성된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
root@e203d58f5a06:/opt/h2/bin# java -cp h2-2.1.214.jar org.h2.tools.Shell

Welcome to H2 Shell 2.1.214 (2022-06-13)
Exit with Ctrl+C
[Enter]   jdbc:h2:tcp://localhost:1521/test
URL       jdbc:h2:tcp://localhost:1521/db_product
[Enter]   org.h2.Driver
Driver    org.h2.Driver
[Enter]   sa
User      sa
Password
Type the same password again to confirm database creation.
Password
Connected
Commands are case insensitive; SQL statements end with ';'
help or ?      Display this help
list           Toggle result list / stack trace mode
maxwidth       Set maximum column width (default is 100)
autocommit     Enable or disable autocommit
history        Show the last 20 statements
quit or exit   Close the connection and exit

sql> quit
This post is licensed under CC BY 4.0 by the author.