H2 Database ์ค์น, ์๋ฒ ์คํ, ์ ์ ๋ฐฉ๋ฒ (Windows, MacOS)
H2 ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ค์น๊ฐ ํ์ ์๊ณ ์ฉ๋์ด ๋งค์ฐ ๊ฐ๋ฒผ์ฐ๋ฉฐ ์น์ฉ ์ฝ์(์ฟผ๋ฆฌํด)์ ์ ๊ณตํ์ฌ ๊ฐ๋ฐ์ฉ ๋ก์ปฌ DB๋ก ์ฌ์ฉํ๊ธฐ ์ข์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ด๋ค. H2์ ํน์ง์ ์ ๋ฆฌํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
- Java๋ก ์์ฑ๋ ์คํ์์ค RDBMS
- ์คํ๋ง ๋ถํธ๊ฐ ์ง์ํ๋ ์ธ๋ฉ๋ชจ๋ฆฌ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ด๋ค.
- ์ธ๋ฉ๋ชจ๋ฆฌ๋ก ๋์ฐ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์์ํ ๋๋ง๋ค ์ด๊ธฐํ๋๋ค.
- ๋ณ๋์ ์ค์น๊ฐ ํ์ ์๋ค.
- ๋ก์ปฌ ํ๊ฒฝ, ํ ์คํธ ํ๊ฒฝ์์ ๋ง์ด ์ฌ์ฉ๋๋ค.
1. H2 ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ค์ด๋ก๋
http://h2database.com์ ๋ค์ด๊ฐ์ All Platforms๋ฅผ ํด๋ฆญํ๋ค.
์ฆ์ ๋ค์ด๋ก๋๊ฐ ์์๋๋ค.
ํด๋น ๋งํฌ๋ก ๋ฐ์์ง๋ ๋ฒ์ ์ 2020๋ 3์ ๊ธฐ์ค์ผ๋ก 1.4.2 ๋ฒ์ ์ด๋ค.
2. H2 ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ ์คํ
์์ถ์ ํ๊ณ bin ๋๋ ํ ๋ฆฌ ์๋์ h2.bat ๋๋ h2w.bat์ ์คํํ๋ฉด H2 ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์๋ฒ ๋ชจ๋๋ก ์คํ๋๋ค.
Unix ๊ณ์ด์ h2.sh๋ฅผ ์คํํ๋ค.
h2 ์๋ฒ๋ฅผ ์คํํ๋ฉด ์๋์ผ๋ก ์์ ๊ฐ์ ํ๋ฉด์ h2 ์ฝ์ ๋ก๊ทธ์ธ ํ๋ฉด์ด ๋์จ๋ค.
์๋์ผ๋ก ์คํ๋์ง ์์ผ๋ฉด ์น๋ธ๋ผ์ฐ์ ์ http://localhost:8082 ๋๋ http://127.0.0.1:8082๋ฅผ ์ ๋ ฅํ๊ฑฐ๋ ์๋์ฐ ์์คํ ํธ๋ ์ด์์ H2 ์์ด์ฝ์ ํ ๋ฒ ํด๋ฆญํ๋ฉด ์ด๋ฆฐ๋ค.
3. H2 ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฑ
๊ทธ๋ฅ ์ฐ๊ฒฐํ๋ ค๊ณ ํ๋ฉด Database not found, either pre-create it or allow remote database creation (not recommended in secure environments) [90149-200] 90149/90149 ์๋ฌ๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ์ฐ๊ฒฐ ์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์์ฑํด์ผ ํ๋ค.
โ๏ธ ์ฐธ๊ณ
h2 1.4.198 ์ดํ ๋ฒ์ ๋ถํฐ๋ ๋ณด์ ๋ฌธ์ ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์๋์ผ๋ก ์์ฑ๋์ง ์๊ธฐ ๋๋ฌธ์ ๋ณธ ํฌ์คํ ์ ์ด์ด์ ๋์ค๋ ๋ด์ฉ๊ณผ ๊ฐ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ง์ ์์ฑํด์ผ ํ๋ค.
๊ฐ๋จํ ๋ก์ปฌ ํ ์คํธ์ฉ์ด๋ผ๋ฉด ๋ฒ์ ์ 1.3๋๋ก ๋ฎ์ถฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ ์์ฑ ๊ธฐ๋ฅ์ ์ฌ์ฉํด๋ ๋๋ค.
H2 ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ค์๊ณผ ๊ฐ์ด ๋ง๋ค๋ฉด ๋๋ค.
Generic H2 (Embedded)๋ฅผ ์ ํํ๊ณ JDBC URL์ jdbc:h2:~/test๋ฅผ ์ ๋ ฅํ๊ณ ์ฐ๊ฒฐ์ ํด๋ฆญํ๋ค.
test๋ผ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์์ฑ๋๋ฉฐ, ์์ฑํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด๋ฆ์ ๋ค๋ฅธ๊ฑธ๋ก ํ๊ณ ์ถ์ผ๋ฉด test ๋ง๊ณ ๋ค๋ฅธ ์ด๋ฆ์ ์ ๋ ฅํ๋ฉด ๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์๋์ผ๋ก ์์ฑ๋๊ณ , ์ฝ์์ ์ฐ๊ฒฐ๋๋ค.
์ด๋ ๊ฒ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์์ฑํ๋ฉด ์ฌ์ฉ์ ๊ณ์ ๋๋ ํ ๋ฆฌ์ test.mv.db ํ์ผ์ด ์์ฑ๋๋ค.
4. H2 ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์
๋ค์ ์ฒซํ๋ฉด์ผ๋ก ๊ฐ์
์ ์ฅํ ์ค์ : Generic H2 (Server)
JDBC URL: jdbc:h2:tcp://localhost/~/test
๋ฅผ ์ ๋ ฅํ๊ณ ์ฐ๊ฒฐ์ ํด๋ฆญํ๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์ผ์ ์์ฑํ ๋ค์์ JDBC URL์ ์ ๋ ๊ฒ ๋ณ๊ฒฝํ๋ ์ด์ ๋ ํ์ผ ์ง์ ์ ๊ทผ์ด ์๋ TCP ์์ผ์ ํตํด ์ ์ํด์ผ ์ดํ๋ฆฌ์ผ์ด์ ๊ณผ ์ฝ์์ด ๋์์ ์ ๊ทผํ์ ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
H2 ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ ๋ชจ๋ ์ค๋น๊ฐ ์๋ฃ๋์๋ค.
ํ์ํ ์์ญ์ SQL์ ์ ๋ ฅํ๊ณ ์คํ์ ํด๋ฆญํ๋ฉด SQL์ ์คํํ ์ ์๋ค.
์ถ๊ฐ - Mac์์ brew๋ก H2 Database ์ค์นํ๊ธฐ
ํฐ๋ฏธ๋์์ ๋ค์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ค.
$ brew install h2
์ค์น๊ฐ ์๋ฃ๋๋ฉด h2 ๋ช ๋ น์ด๋ก ์๋ฒ๋ฅผ ์คํํ๋ค.
์คํ ์ -webAllowOthers ์ต์ ์ ๋ฃ์ด ์คํํ๋ค.
๊ทธ๋ ์ง ์์ผ๋ฉด ์ฟผ๋ฆฌ ์คํ ์ 'Sorry, remote connections ('webAllowOthers') are disabled on this server.' ์๋ฌ ๋ฉ์์ง๊ฐ ๋ฐ์ํ๋ค.
$ h2 -webAllowOthers
์๋ฒ๋ฅผ ์คํํ๋ฉด ๋ฐ๋ก ์น ์ฝ์์ด ์คํ๋๋ค.
๋๋จธ์ง DB ์์ฑ, ์ ์์ ์ ๋ด์ฉ๊ณผ ๋์ผํ๋ฏ๋ก Generic H2 (Embedded)๋ฅผ ์ ํํ๊ณ JDBC URL์ jdbc:h2:~/test๋ฅผ ์ ๋ ฅํ๊ณ ์ฐ๊ฒฐ์ ํด๋ฆญํ๋ค.
์ถ๊ฐ - ์ ๋ฐฉ๋ฒ์ผ๋ก ํด๊ฒฐ์ด ์๋๋ ๊ฒฝ์ฐ
๋ค๋ฅธ PC์์ brew๋ก H2 1.4.200 ๋ฒ์ ์ ์ค์นํ ๋ค ์์ ์ ์ ๋ฐฉ๋ฒ์ผ๋ก๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์ผ ์์ฑ์ด ๋์ง ์์์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ถ๊ฐํ๋ค.
Database ... not found, either pre-create it or allow remote database creation (not recommended in secure environments) [90149-200] 90149/90149
H2๋ฅผ -web ์ต์ ์ ๋ฃ๊ณ ์คํํ๋ฉด ํฐ๋ฏธ๋์ ์๋์ ๊ฐ์ ์น ์ฝ์ url์ด ์ถ๋ ฅ๋๋ค.
$ h2 -web
Web Console server running at http://localhost:8082?key=5a2cbb4701528a42716722624fb5aa241f7f36c94fe2753a4dac92b06399a86c (only local connections)
์ ์ฒด url์ ๋ณต์ฌํ์ฌ ๋ธ๋ผ์ฐ์ ๋ก ์ ์ํ๋ค.
- ์ ์ฅํ ์ค์ (Saved Settings): Generic H2 (Server)
- JDBC URL: jdbc:h2:~/test
๋ก ์ค์ ํ๊ณ ์ฐ๊ฒฐ(Connect)๋ฅผ ํด๋ฆญํ๋ฉด ์ ์์ ์ผ๋ก test.mv.db ํ์ผ์ด ์์ฑ๋๋ค.
์ดํ ์ฌ์ฉํ ๋๋ -web ์ต์ ์ผ๋ก ์คํ์ค์ธ h2๋ฅผ ์ข ๋ฃํ๊ณ ๋ค์ ๋ช ๋ น์ด๋ก h2๋ฅผ ๋ค์ ์คํํ๋ค.
$ brew services start h2
๊ทธ ๋ค์ http://localhost:8082๋ก ์น ์ฝ์์ ์ ์ํ๊ณ , TCP ์์ผ์ ํตํด ์์ฑ๋ DB์ ์ ์ํ๋๋ก JDBC URL์ ๋ณ๊ฒฝํ์ฌ ์ฌ์ฉํ๋ค.
- JDBC URL: jdbc:h2:tcp://localhost/~/test
์ฐธ๊ณ ๋ก brew services ๋ช ๋ น์ด๋ก ์คํํ h2๋ ๋ค์๊ณผ ๊ฐ์ด ์ข ๋ฃํ๋ค.
$ brew services stop h2
๋๊ธ