๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Database·SQL

H2 Database ์„ค์น˜, ์„œ๋ฒ„ ์‹คํ–‰, ์ ‘์† ๋ฐฉ๋ฒ• (Windows, MacOS with homebrew)

by Leica 2020. 3. 18.
๋ฐ˜์‘ํ˜•

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 ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์ž๋™์œผ๋กœ ์œ„์™€ ๊ฐ™์€ ํ™”๋ฉด์˜ h2 ์ฝ˜์†” ๋กœ๊ทธ์ธ ํ™”๋ฉด์ด ๋‚˜์˜จ๋‹ค.

์ž๋™์œผ๋กœ ์‹คํ–‰๋˜์ง€ ์•Š์œผ๋ฉด ์›น๋ธŒ๋ผ์šฐ์ €์— http://localhost:8082 ๋˜๋Š” http://127.0.0.1:8082๋ฅผ ์ž…๋ ฅํ•˜๊ฑฐ๋‚˜ ์œˆ๋„์šฐ ์‹œ์Šคํ…œ ํŠธ๋ ˆ์ด์—์„œ H2 ์•„์ด์ฝ˜์„ ํ•œ ๋ฒˆ ํด๋ฆญํ•˜๋ฉด ์—ด๋ฆฐ๋‹ค.

 

์‹œ์Šคํ…œ ํŠธ๋ ˆ์ด 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 ๋ง๊ณ  ๋‹ค๋ฅธ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

 

๋ฐ˜์‘ํ˜•

 

H2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ƒ์„ฑ๋œ ํ™”๋ฉด

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜๊ณ , ์ฝ˜์†”์— ์—ฐ๊ฒฐ๋œ๋‹ค.

 

์ด๋ ‡๊ฒŒ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ์‚ฌ์šฉ์ž ๊ณ„์ • ๋””๋ ‰ํ† ๋ฆฌ์— 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๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ์—ฐ๊ฒฐ์„ ํด๋ฆญํ•œ๋‹ค.

 

์‚ฌ์šฉ์ž ๋””๋ ‰ํ† ๋ฆฌ์— ์ƒ์„ฑ๋œ test.mv.db

 

์ถ”๊ฐ€ - ์œ„ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๊ฒฐ์ด ์•ˆ๋˜๋Š” ๊ฒฝ์šฐ

๋‹ค๋ฅธ 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

 

References

https://h2database.com/html/tutorial.html

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€