Home > DB > πŸ’Ύ[Database] H2 Databaseλž€ λ¬΄μ—‡μΈκ°€μš”?

πŸ’Ύ[Database] H2 Databaseλž€ λ¬΄μ—‡μΈκ°€μš”?
Database

πŸ’Ύ[Database] H2 Databaseλž€ λ¬΄μ—‡μΈκ°€μš”?

  • H2 DatabaseλŠ” Java둜 κ΅¬ν˜„λœ μ˜€ν”ˆ μ†ŒμŠ€μ˜ κ²½λŸ‰ν˜• κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€(RDBMS) μž…λ‹ˆλ‹€.
    • 주둜 ν…ŒμŠ€νŠΈ 및 개발 ν™˜κ²½μ—μ„œ λΉ λ₯΄κ³  κ°„νŽΈν•˜κ²Œ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜κ³ μž ν•  λ•Œ ν™œμš©λ©λ‹ˆλ‹€.
    • H2λŠ” λ©”λͺ¨λ¦¬ 기반 λ˜λŠ” 파일 기반으둜 λ™μž‘ν•  수 μžˆμ–΄, μ„€μΉ˜ κ³Όμ • 없이 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— λ‚΄μž₯ν•˜μ—¬ μ‚¬μš©ν•  수 μžˆλŠ” 것이 νŠΉμ§•μž…λ‹ˆλ‹€.

1️⃣ H2 Database의 μ£Όμš” νŠΉμ§•.

1️⃣ κ²½λŸ‰μ„±(Lightweight)

  • λ°μ΄ν„°λ² μ΄μŠ€ μ—”μ§„μ˜ 크기가 μž‘κ³  λΉ λ₯΄λ©°, λ©”λͺ¨λ¦¬ 기반으둜 λ™μž‘ μ‹œ 맀우 높은 μ„±λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.

2️⃣ Java둜 κ΅¬ν˜„.

  • Java둜 μž‘μ„±λ˜μ–΄ Java 기반 μ• ν”Œλ¦¬μΌ€μ΄μ…˜κ³Ό 톡합이 μš©μ΄ν•˜λ©°, ν”Œλž«νΌ λ…λ¦½μ μž…λ‹ˆλ‹€.

3️⃣ λ‚΄μž₯ν˜• 및 λ…λ¦½ν˜•.

1️⃣ λ‚΄μž₯ν˜• λͺ¨λ“œ(Embedded mode)

  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— λ‚΄μž₯λ˜μ–΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜κ³Ό ν•¨κ»˜ μ‹€ν–‰.

2️⃣ λ…λ¦½ν˜• λͺ¨λ“œ(Server mode)

  • λ…λ¦½λœ μ„œλ²„λ‘œ λ™μž‘ν•˜λ©°, λ‹€λ₯Έ ν΄λΌμ΄μ–ΈνŠΈκ°€ 접속 κ°€λŠ₯.

4️⃣ λ©”λͺ¨λ¦¬ 기반 및 λ””μŠ€ν¬ 기반.

  • λ©”λͺ¨λ¦¬ 기반 λͺ¨λ“œμ—μ„œλŠ” 데이터λ₯Ό λ©”λͺ¨λ¦¬μ— μ €μž₯ν•˜μ—¬ μ΄ˆκ³ μ† μ„±λŠ₯ 제곡(μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ’…λ£Œ μ‹œ 데이터 μ†Œλ©Έ).
  • λ””μŠ€ν¬ 기반 λͺ¨λ“œμ—μ„œλŠ” 데이터λ₯Ό νŒŒμΌμ— μ €μž₯ν•˜μ—¬ 지속성을 μœ μ§€.

5️⃣ SQL ν‘œμ€€ μ€€μˆ˜.

  • SQL ν‘œμ€€μ„ μ§€μ›ν•˜λ©°, λ‹€λ₯Έ λ°μ΄ν„°λ² μ΄μŠ€μ™€ μœ μ‚¬ν•œ λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

6️⃣ μ›Ή μ½˜μ†” 제곡.

  • μ‚¬μš©ν•˜κΈ° νŽΈλ¦¬ν•œ μ›Ή 기반 관리 μ½˜μ†”μ„ μ œκ³΅ν•˜μ—¬ SQL 쿼리 μ‹€ν–‰ 및 데이터 확인 κ°€λŠ₯.

7️⃣ μ˜€ν”ˆ μ†ŒμŠ€.

  • Apache 2.0 λΌμ΄μ„ μŠ€μ— 따라 무료둜 μ‚¬μš© κ°€λŠ₯.

2️⃣ H2 Database의 μ£Όμš” ν™œμš©.

1️⃣ Spring Bootμ™€μ˜ 톡합.

  • Spring Bootμ—μ„œ 기본적으둜 λ‚΄μž₯된 λ°μ΄ν„°λ² μ΄μŠ€λ‘œ μ„€μ •λ˜μ–΄ 개발 및 ν…ŒμŠ€νŠΈ ν™˜κ²½μ—μ„œ 자주 μ‚¬μš©λ©λ‹ˆλ‹€.
  • application.properties에 섀정을 μΆ”κ°€ν•˜λ©΄ μ‰½κ²Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

2️⃣ λ‹¨μœ„ ν…ŒμŠ€νŠΈ.

  • μ‹€μ œ λ°μ΄ν„°λ² μ΄μŠ€ μ—°κ²° 없이 H2λ₯Ό μ‚¬μš©ν•΄ ν…ŒμŠ€νŠΈ ν™˜κ²½μ„ ꡬ성할 수 μžˆμŠ΅λ‹ˆλ‹€.

3️⃣ λΉ λ₯Έ ν”„λ‘œν† νƒ€μ΄ν•‘.

  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 개발 초기 λ‹¨κ³„μ—μ„œ λ°μ΄ν„°λ² μ΄μŠ€ 섀계λ₯Ό λΉ λ₯΄κ²Œ μ‹€ν—˜ν•˜κ³  검증할 수 μžˆμŠ΅λ‹ˆλ‹€.

4️⃣ ν•™μŠ΅μš©.

  • κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€ 및 SQL ν•™μŠ΅μ— μ ν•©ν•©λ‹ˆλ‹€.

3️⃣ H2 Database μ„€μ • μ˜ˆμ‹œ.

1️⃣ Maven Dependency μΆ”κ°€.

  • H2 Databaseλ₯Ό μ‚¬μš©ν•˜λ €λ©΄ Maven ν”„λ‘œμ νŠΈμ— λ‹€μŒ μ˜μ‘΄μ„±μ„ μΆ”κ°€ν•©λ‹ˆλ‹€.
    ```xml
com.h2database h2 runtime

### 2️⃣ Spring Boot μ„€μ •.
- Spring Bootμ—μ„œλŠ” `application.properties` λ˜λŠ” `application.yml` νŒŒμΌμ— H2 섀정을 μΆ”κ°€ν•©λ‹ˆλ‹€.
```properties
# H2 Database μ„€μ •
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=""
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
  • spring.datasource.url=jdbc:h2:mem:testdb : λ©”λͺ¨λ¦¬ 기반 λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
  • spring.h2.console.enabled=true : H2 μ½˜μ†”μ„ ν™œμ„±ν™”ν•©λ‹ˆλ‹€.
  • spring.h2.console.path=/h2-console : H2 μ½˜μ†”μ˜ 접속 경둜λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€.

3️⃣ H2 μ›Ή μ½˜μ†” 접속

  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹€ν–‰ν•œ ν›„, λΈŒλΌμš°μ €μ—μ„œ http://localhost:8080/h2-console둜 μ ‘μ†ν•©λ‹ˆλ‹€.
  • JDBC URL : jdbc:h2:mem:testdb
  • User Name : sa
  • Password : ""

4️⃣ H2 μ‚¬μš© μ‹œ 주의 사항.

1️⃣ 데이터 μ˜μ†μ„±.

  • λ©”λͺ¨λ¦¬ λͺ¨λ“œμ—μ„œλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ’…λ£Œ μ‹œ 데이터가 μ‚¬λΌμ§€λ―€λ‘œ, μ˜μ†μ„±μ„ μœ μ§€ν•˜λ €λ©΄ 파일 기반 (jdbc:h2:file:~/testdb)을 μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.

2️⃣ 운영 ν™˜κ²½μ—μ„œλŠ” 뢀적합.

  • H2λŠ” 주둜 개발 및 ν…ŒμŠ€νŠΈ ν™˜κ²½μ—μ„œ μ‚¬μš©λ©λ‹ˆλ‹€.
    • 운영 ν™˜κ²½μ—μ„œλŠ” MySQL, PostgreSQL, Orcle λ“± 더 κ°•λ ₯ν•œ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.

3️⃣ λ™μ‹œμ„± μ œν•œ.

  • 단일 μ‚¬μš©μž λ˜λŠ” μ†Œκ·œλͺ¨ λ™μ‹œ μž‘μ—…μ—λŠ” μ ν•©ν•˜μ§€λ§Œ, λ§Žμ€ νŠΈλžœμž­μ…˜μ΄ ν•„μš”ν•œ 경우 μ„±λŠ₯이 λ–¨μ–΄μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.

5️⃣ H2 Database의 μž₯점.

  • κ°„λ‹¨ν•œ μ„€μ •κ³Ό μ‚¬μš©μ„±.
  • λΉ λ₯Έ μ„±λŠ₯(특히 λ©”λͺ¨λ¦¬ λͺ¨λ“œ).
  • SQL ν‘œμ€€ μ€€μˆ˜λ‘œ ν•™μŠ΅ 및 ν”„λ‘œν† νƒ€μ΄ν•‘μ— 적합,
  • Spring Bootμ™€μ˜ μ™„λ²½ν•œ ν˜Έν™˜μ„±.

6️⃣ H2 Database의 단점.

  • λŒ€κ·œλͺ¨ 데이터 및 λ³΅μž‘ν•œ νŠΈλžœμž­μ…˜ μ²˜λ¦¬μ— ν•œκ³„.
  • 운영 ν™˜κ²½μ—μ„œλŠ” μ ν•©ν•˜μ§€ μ•ŠμŒ.
  • μ˜μ†μ„± 관리가 λΆ€μ‘±(λ©”λͺ¨λ¦¬ 기반 λͺ¨λ“œ μ‚¬μš© μ‹œ).

7️⃣ κ²°λ‘ .

  • H2 DatabaseλŠ” κ²½λŸ‰μ„±κ³Ό νŽΈμ˜μ„±μ„ κ°–μΆ˜ λ°μ΄ν„°λ² μ΄μŠ€λ‘œ, 주둜 개발과 ν…ŒμŠ€νŠΈμ— μ΅œμ ν™”λœ λ„κ΅¬μž…λ‹ˆλ‹€.
  • λΉ λ₯Έ ν”„λ‘œν† νƒ€μ΄ν•‘ 및 ν•™μŠ΅ ν™˜κ²½μ΄ ν•„μš”ν•  λ•Œ ν™œμš©ν•˜λ©΄ νš¨μœ¨μ μž…λ‹ˆλ‹€.