[Database] H2 ์—ฐ๊ฒฐ ์˜ต์…˜

2023. 8. 1. 23:26ยทDataBase

 

๐ŸŽฏ Goals

  • SpringBoot - H2 DB ๊ฐ„ ์ ์ ˆํ•œ ์—ฐ๊ฒฐ ๋ฐฉ๋ฒ•์„ ์„ ํƒํ•  ์ค„ ์•ˆ๋‹ค.
  • SpringBoot - H2 DB Automatic mixed ์—ฐ๊ฒฐ์„ ์ง์ ‘ ์‹คํ–‰ํ•ด๋ณธ๋‹ค.

 

H2 DB ์—ฐ๊ฒฐ 3๊ฐ€์ง€ ๋ชจ๋“œ

1. Embedded Mode

์ด๋ฆ„ ๊ทธ๋Œ€๋กœ JVM App ๋‚ด์— DB๋ฅผ '๋‚ด์žฅ'ํ•˜๋Š” ๋ชจ๋“œ๋‹ค.

๋„คํŠธ์›Œํฌ IO๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€์žฅ ๋น ๋ฅธ ๋Œ€์‹  ์™ธ๋ถ€ ํด๋ผ์ด์–ธํŠธ๋กœ ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.
(์‹ฌ์ง€์–ด ๋กœ์ปฌ ํ˜ธ์ŠคํŠธ ๋‚ด์˜ ๋‹ค๋ฅธ ์•ฑ์ด๋ผ๋„ ๋ถˆ๊ฐ€ํ•˜๋‹ค.)

JVM ๋‚ด์— DB ๊ฐ€ ๋‚ด์žฅ๋œ๋‹ค.

 

2. Server - Client Mode

H2 DB ๊ณต์‹๋ฌธ์„œ์—์„œ ์ถ”์ฒœํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์™ธ๋ถ€์—์„œ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

๋Œ€์‹ , TCP/IP ๋„คํŠธ์›Œํฌ IO ๋กœ ๋ฐ์ดํ„ฐ ํ†ต์‹ ์ด ์ด๋ค„์ง€๊ธฐ ๋•Œ๋ฌธ์— Latency ๋ฐœ์ƒ์ด ๋ถˆ๊ฐ€ํ”ผํ•˜๋‹ค.

 

 It's recommended to use the client-server model instead,
the client side may interrupt own threads.

3. Mixed Mode

์ตœ์ดˆ DB Connectino ์„ ๋งบ์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„๋กœ DB๋ฅผ ๊ฐ์‹ธ๋Š” ๋งค์ปค๋‹ˆ์ฆ˜์ด๋‹ค.

์—ฌ๊ธฐ์„œ Mix ๋Š” Embedded + Server ๋ฅผ ํ˜ผํ•ฉํ–ˆ๋‹ค๋Š” ๋œป์ธ๋ฐ

์ตœ์ดˆ๋กœ DB๋ฅผ ์—ฐ๊ฒฐํ•œ ์•ฑ์ด ์ž์ฒด์ ์ธ Server ๋ฅผ ๋„์›Œ H2 DB ๋ฅผ Wrapping ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

 

 

์ตœ์ดˆ ํด๋ผ์ด์–ธํŠธ๋Š” Embedded DB๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ Latency ์—†์ด DB๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋™์‹œ์— ์ด ์ตœ์ดˆ ํด๋ผ์ด์–ธํŠธ ์•ฑ์ด ๊ณง ์„œ๋ฒ„ ํ˜ธ์ŠคํŒ…์„ ๋งž๋Š”๋‹ค.

์™ธ๋ถ€ ์•ฑ์—์„œ ๋™์ผํ•œ URL ๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค.

๋Œ€์‹ , ์™ธ๋ถ€ ์ ‘๊ทผ ํด๋ผ์ด์–ธํŠธ๋„ Server-Client ๋ชจ๋ธ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋„คํŠธ์›Œํฌ IO๋กœ ํ†ต์‹ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Latency๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

 

Mixed ๋ชจ๋“œ๋Š” ๋‹ค์‹œ 2๊ฐ€์ง€๋กœ ๋‚˜๋‰œ๋‹ค.
(1) Client (App) - Server (App) Mode
์•„์ง ์—ฐ๊ฒฐ์„ ํ•ด๋ณด์ง€ ์•Š์•˜๋‹ค.
(2) Automatic mixed mode
์ด ๊ธ€์—์„œ ์„ค๋ช…ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
์•„๋ž˜ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์„ ๊ธฐ์ˆ ํ–ˆ๋‹ค.

 

 

๊ทธ๋Ÿผ, ์ตœ์ดˆ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์—ฐ๊ฒฐ์„ ๋Š์œผ๋ฉด ์„œ๋ฒ„๋„ ํ•ด์ œ๋˜๋‚˜?

๋งž๋‹ค. ๋Œ€์‹  ๋™์‹œ์— ์—ฐ๊ฒฐ์ค‘์ธ ๋‹ค๋ฅธ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„๋ฅผ ์ž๋™ ์žฌ์‹œ์ž‘ํ•œ๋‹ค.

In-memory ๋ชจ๋“œ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.lock.db ํŒŒ์ผ๋กœ Private IP/Port ๋ฅผ ๊ด€๋ฆฌํ•˜๊ฒŒ๋” ์„ค๊ณ„ ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

 

์š”์•ฝ ๋น„๊ต

  Embedded Mode Server - Client Mode Mixed Mode
URL Example - jdbc:h2:<file-path>
- jdbc:h2:mem:<db-name>
- jdbc:h2:tcp//localhost/~/<db-name>
- jdbc:h2:tcp://<server-ip>:<port>/<path>/<db-name>
- jdbc:h2:<url>;AUTO_SERVER=TRUE
- jdbc:h2:<db-relative-file-path>;AUTO_SERVER=TRUE
Pros No Latency Support remote connect Fast for server app
Support remote connect
Cons Not support remote connect Network Latency Network Latency for seocond clients ~

 

When to use?

Q. IDE์—์„œ ๋‹จ์ˆœ Persistence Layer ์œ ๋‹› ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ๋Œ๋ฆฐ๋‹ค?

A. Embedded Mode

 

Q. ๋กœ์ปฌ ์™ธ ์™ธ๋ถ€ ์ž…๋ ฅ์„ ์ง€์›ํ•ด์•ผํ•œ๋‹ค?

A.Server - Client Mode

 

Q. ๋กœ์ปฌํ™˜๊ฒฝ์ด์ง€๋งŒ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์™ธ์—๋„ ์‹ค์ œ DB ์ƒํƒœ๋ฅผ ๋“ค์—ฌ๋‹ค๋ณผ ํ•„์š”๊ฐ€ ์žˆ๋‹ค? (ex. Intellij IDEA ์—ฐ๊ฒฐ)

A. (Automatic) Mixed Mode

 

 

์‹ค์Šต ์˜ˆ์ œ

Intellij IDEA - H2 DB Connect using Automatic Mixed mode

Automatic Mixed Mode ์˜ ํ•ต์‹ฌ์€ "๊ฐ™์€ DB์— ๋ชจ๋‘ ๋™์ผํ•œ URL ๋กœ ์ ‘๊ทผํ•œ๋‹ค" ์ด๋‹ค.

์ด ๋•Œ ์ฃผ์˜ํ•  ์ ์€ ๋ฐ˜๋“œ์‹œ ๋์— `AUTO_SERVER=TRUE` ์˜ต์…˜์„ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์ž„์˜์˜ ํฌํŠธ๋ฅผ ์ง€์ •ํ•˜๋ฉด Automatic Mixed Mode ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

(1) application.yaml ํŒŒ์ผ ์„ค์ •

 

ํ•˜๋‹จ URL ๋กœ ์ ‘์†์‹œ `cafe-kiosk.lock.db` ํŒŒ์ผ์ด ํ™ˆ ๋””๋ ‰ํ† ๋ฆฌ์— ์ƒ์„ฑ๋œ๋‹ค.

lock.db ํŒŒ์ผ์€ ์˜ค๋กœ์ง€ ์„œ๋ฒ„๋กœ ์ง€์ •๋œ ํ•˜๋‚˜์˜ ์ปค๋„ฅ์…˜์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค.

๋”ฐ๋ผ์„œ ์ž„์˜์˜ ํฌํŠธ๋ฒˆํ˜ธ๋กœ ๋™์ผํ•œ `${DB-NAME}` ์œผ๋กœ ์ ‘๊ทผํ•  ๊ฒฝ์šฐ lock ํŒŒ์ผ ๋•Œ๋ฌธ์— ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

jdbc:h2:~/cafe-kiosk;AUTO_SERVER=TRUE

 

(2) SpringBoot ์‹คํ–‰

์‹คํ–‰ํ›„ spring.datasource.url ์— ๋ช…์‹œํ•œ  ๊ฒฝ๋กœ๋กœ ๊ฐ€๋ณด๋ฉด ${db-name}.lock.db ํŒŒ์ผ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

lock.db ํŒŒ์ผ์—์„œ H2 DB Server ์˜ Private IP/PORT ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

SpringBoot App ์„ ๊ตฌ๋™์‹œํ‚ค๋ฉด SpringBoot App ์ด ์ตœ์ดˆ์˜ ํด๋ผ์ด์–ธํŠธ์ด์ž H2 Server ์˜ ํ˜ธ์ŠคํŒ… ์ฃผ์ฒด๊ฐ€๋œ๋‹ค.

SpringBoot App ๋‚ด์—์„œ ๋งบ๋Š” JDBC ์—ฐ๊ฒฐ์€ `Embedded` ๋ชจ๋“œ๊ฐ€ ๋˜์–ด ๋„คํŠธ์›Œํฌ Latency ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

(3) Intellij IDEA - DB ์—ฐ๊ฒฐ

Intellij IDEA > Database > Data Sources and Drivers > URL

URL ๋์— `AUTO_SERVER=TRUE` ์˜ต์…˜์„ ์ง€์ •ํ•œ๋‹ค.

์ด๋Š” 2๋ฒˆ์งธ Connection ์œผ๋กœ TCP/IP Network latency ๋ฐœ์ƒํ•œ๋‹ค.

 

(4) ์—ฐ๊ฒฐ ํ™•์ธ

์—ฐ๊ฒฐ ์™„๋ฃŒ

 

 

Conclusion

SpringBoot ๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ Persistency ์œ ๋‹› ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ณ , DB ์ƒํƒœ๊ฐ’์„ IDE ๋กœ ํ™•์ธํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด H2 DB ์˜ Automatic Mixed Mode ๋ฅผ ํ™œ์šฉํ•ด๋ณด์ž.

 

jdbc:h2:~/<db-name>;AUTO_SERVER=TRUE

์„ค์ •์œผ๋กœ ๋š๋”ฑ๊ฐ€๋Šฅํ•˜๋‹ค.


๐Ÿ”— Reference

 

Features

  Features Feature List H2 in Use Connection Modes Database URL Overview Connecting to an Embedded (Local) Database In-Memory Databases Database Files Encryption Database File Locking Opening a Database Only if it Already Exists Closing a Database Ignore

www.h2database.com

 

์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'DataBase' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[DB] Key (Index) ๋Š” ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋‚˜?  (0) 2022.05.27
[DB] Connection Pool  (0) 2022.03.30
[Oracle] remote access  (0) 2020.11.23
'DataBase' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [DB] Key (Index) ๋Š” ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋‚˜?
  • [DB] Connection Pool
  • [Oracle] remote access
M_Falcon
M_Falcon
  • M_Falcon
    Falcon
    M_Falcon
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (432)
      • Web (16)
        • Nodejs (14)
        • Javascript (23)
        • FrontEnd (4)
      • DataBase (39)
        • Fundamental (1)
        • Redis (4)
        • PostgreSQL (10)
        • NoSQL (4)
        • MySQL (9)
        • MSSQL (3)
        • Error (4)
      • Algorithm (79)
        • Algorithm (๋ฌธ์ œํ’€์ด) (56)
        • Algorithm (์ด๋ก ) (23)
      • JVM (65)
        • Spring (13)
        • JPA (5)
        • Kotlin (13)
        • Java (24)
        • Error (7)
      • ๊ธฐํƒ€ (70)
        • Kafka (3)
        • Kubernetes (3)
        • Docker (13)
        • git (19)
        • ์žก๋™์‚ฌ๋‹ˆ (27)
      • ์žฌํ…Œํฌ (11)
        • ์„ธ๋ฌด (4)
        • ํˆฌ์ž (3)
        • ๋ณดํ—˜ (0)
      • BlockChain (2)
        • BitCoin (0)
      • C (32)
        • C (10)
        • C++ (17)
        • Error (3)
      • Low Level (8)
        • OS (3)
        • ์‹œ์Šคํ…œ ๋ณด์•ˆ (5)
      • ๋„คํŠธ์›Œํฌ (3)
      • LINUX (30)
        • Linux (26)
        • Error (4)
      • ์ €์ž‘๊ถŒ๊ณผ ์Šค๋งˆํŠธํฐ์˜ ์ดํ•ด (0)
      • ์ƒ๊ฐ ๋ญ‰์น˜ (6)
      • ๊ถ๊ธˆ์ฆ (2)
      • Private (4)
        • ์ด์ง ๊ฒฝํ—˜ (0)
        • ๊ฟˆ์„ ์ฐพ์•„์„œ (1)
      • Android (21)
        • OS (4)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • WEB
    • ์•Œ๊ณ ๋ฆฌ์ฆ˜
    • DataBase
    • Linux
    • Mobile
    • C
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

    • github
  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    C++
    ubuntu
    algorithm
    android
    Git
    Spring
    JPA
    database
    Bitcoin
    docker
    kafka
    PostgreSQL
    linux
    ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
    java
    javascript
    Programmers
    ์•Œ๊ณ ๋ฆฌ์ฆ˜
    Kotlin
    ๋ฐฑ์ค€
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
M_Falcon
[Database] H2 ์—ฐ๊ฒฐ ์˜ต์…˜
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”