H2 DB
H2 DB๋ ์๋ฐ ๊ธฐ๋ฐ์ ์คํ์์ค ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ ์ด๋ค. ๋ณดํต ํ ์คํธ ๋จ๊ณ๋ ์์ ๋จ๊ณ์์ ์ฌ์ฉ์ด ๋๋ฉฐ, Gradle์ด๋ Maven์ ์์กด์ฑ๋ง ์ถ๊ฐํด์ฃผ๋ฉด ๋น ๋ฅด๊ฒ ์ด์ฉ์ด ๊ฐ๋ฅํ๋ค.
์ด๋ฌํ H2 DB ๋ 3๊ฐ์ง ๋ชจ๋๋ก ์ง์๋๋ค.
- In-memory
- Embedded Mode
- Server Mode
Inmemory mode
WAS ๊ตฌ๋์์ H2 DB์ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ ค์ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ด๋ค. WAS๊ฐ ์ข ๋ฃ๋๋ฉด, ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ์๋ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ํ๋ฐ์ฑ์ผ๋ก ์ฌ๋ผ์ง๋ค. ์ฆ ์ด๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ํ๋ฐ์ฑ์ผ๋ก ํ ์คํธ๋ฑ์ ์ฌ์ฉํ๊ธฐ ์ ํฉํ๋ค.
Embedded Mode
WAS ๊ตฌ๋์์ H2 DB๋ฅผ PC์ ๋์คํฌ์ ์ ์ฅํ์ฌ ๊ด๋ฆฌํ๋ ๋ฐฉ์์ด๋ค. In-memory์ ๋ฌ๋ฆฌ ๋ฐ์ดํฐ๊ฐ ์ฌ๋ผ์ง์ง ์๋ ๋นํ๋ฐ์ฑ๋ชจ๋์ด๊ธฐ ๋๋ฌธ์ , ๊ฐ๋ฐ ์ด๊ธฐ์ ์ฌ์ฉํ๊ธฐ ์ ํฉํ๋ค.
์ฌ์ฉ๋ฐฉ๋ฒ
1. ์์กด์ฑ ์ถ๊ฐ
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
runtimeOnly 'com.h2database:h2' //h2 ์์กด์ฑ ์ถ๊ฐ
annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
์์กด์ฑ์ ์ถ๊ฐํด์ค๋ค. ๋์ ๊ฒฝ์ฐ์๋ H2, JDBC, JPA ๋ฑ์ ์ถ๊ฐํ๋ค.
2. application.yml(properties) ์ค์
yml์ด๋ properties์ ์ค์ ์ ์ถ๊ฐํด์ฃผ์. ๋์ ๊ฒฝ์ฐ์๋ yml๋ก ์ฌ์ฉํ๋ค.
server:
port: 80 # ๋ด์ฅ ํฐ์บฃ ํฌํธ๋ฒํธ
spring:
# H2 Database ์ค์
datasource:
driver-class-name: org.h2.Driver
url: 'jdbc:h2:mem:test' # H2 DB ์ฐ๊ฒฐ ์ฃผ์ (In-Memory Mode)
#url: 'jdbc:h2:~/test' # H2 DB ์ฐ๊ฒฐ ์ฃผ์ (Embedded Mode)
username: username # H2 DB ์ ์ ID (์ฌ์ฉ์ ์ง์ )
password: password # H2 DB ์ ์ PW (์ฌ์ฉ์ ์ง์ )
# H2 Console ์ค์
h2:
console: # H2 DB๋ฅผ ์น์์ ๊ด๋ฆฌํ ์ ์๋ ๊ธฐ๋ฅ
enabled: true # H2 Console ์ฌ์ฉ ์ฌ๋ถ
path: /h2-console # H2 Console ์ ์ ์ฃผ์
# JPA ์ค์
jpa:
database-platform: org.hibernate.dialect.H2Dialect
hibernate:
ddl-auto: create # DB ์ด๊ธฐํ ์ ๋ต (none, create, create-drop, update, validate)
properties:
hibernate:
dialect: org.hibernate.dialect.H2Dialect
format_sql: true # ์ฟผ๋ฆฌ ๋ก๊ทธ ํฌ๋งท (์ ๋ ฌ)
show_sql: true # ์ฟผ๋ฆฌ ๋ก๊ทธ ์ถ๋ ฅ
spring.datasource.url
H2 DB๋ url์ ๊ธฐ์ค์ผ๋ก ์์์ ์ค๋ช ํ๋ 2๊ฐ์ง ๋ชจ๋๋ฅผ ์ค์ ๊ฐ๋ฅํ๋ค.
url์ `mem`์ด ๋ถ๊ฒ๋๋ค๋ฉด H2 DB๊ฐ In-Memory ๋ชจ๋๋ก ์๋ํ๊ณ , `~`๋ก ์ ์ธ์ ํ๋ฉด Embedded ๋ชจ๋ ๋ฐฉ์์ผ๋ก ์๋ํ๋ค.
jpa.hibernate.ddl-auto
์ต์ ์ ๋ฐ๋ผ์ Entitiy ํด๋์ค์ DDL ์ฟผ๋ฆฌ๋ฅผ ์๋์ผ๋ก ์คํํ ๊ฒ์ธ์ง ์๋์ง, ์ด๋ค ์ฟผ๋ฆฌ๋ฅผ ์คํํ ๊ฒ์ธ์ง ๋ฑ์ ์ค์ ํ ์์๋ค.
์ต์ | ์ค๋ช |
none | ํ ์ด๋ธ ์์ฑ ์ ๋ต์ ์ฌ์ฉํ์ง ์์ต๋๋ค. ๋ณดํต ์ด์ ํ๊ฒฝ์์๋ ํด๋น ์ต์ ์ด ๊ถ์ฅ๋ฉ๋๋ค. |
create | ๊ธฐ์กด ํ ์ด๋ธ์ ์ญ์ ํ ํ ํ ์ด๋ธ์ ์ฌ์์ฑํฉ๋๋ค. |
create-drop | ๊ธฐ์กด ํ ์ด๋ธ์ ์ญ์ ํ ํ ํ ์ด๋ธ์ ์ฌ์์ฑํ๊ณ , ์ ํ๋ฆฌ์ผ์ด์ ์ข ๋ฃ ์์ ์ ํ ์ด๋ธ์ ์ญ์ ํฉ๋๋ค. |
update | ๊ธฐ์กด ํ ์ด๋ธ ๊ตฌ์กฐ๋ ์ ์งํ๊ณ , ์๋ก ์ถ๊ฐ๋ ์ปฌ๋ผ(๋ฉค๋ฒ)๋ง ํ ์ด๋ธ์ ๋ฐ์ํฉ๋๋ค. ๊ธฐ์กด ์ปฌ๋ผ(๋ฉค๋ฒ)์ ์์ฑ์ด ๋ณ๊ฒฝ๋๋๋ผ๋ ํ ์ด๋ธ์ ๋ฐ์๋์ง ์์ต๋๋ค. |
validate | DDL ์ฟผ๋ฆฌ๋ฅผ ์คํํ์ง ์๊ณ , ์จ์ ํ ์ํฐํฐ์ ํ ์ด๋ธ์ด ์ ์์ ์ผ๋ก ๋งคํ๋์๋์ง๋ง ํ์ธํฉ๋๋ค. none๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ด์ ํ๊ฒฝ์์ ๊ถ์ฅ๋๋ ์ต์ ์ ๋๋ค. |
3. ์ฌ์ฉ
๋์ ๊ฒฝ์ฐ์๋ Inmemory ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ์๋ค. WAS๋ฅผ ์คํ์ํค๊ณ , locahost:8080/h2 ๋ฅผ ์ ๋ ฅํ์ฌ ์ ์ํ๋ฉด ์๋์ ๊ฐ์ด h2 DB์ ์ฝ์๋ชจ๋๊ฐ ์คํ๋๋ค.
์ถ๊ฐ : Embedded Mode
Embedded ๋ชจ๋๋ PC์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ ์ง์ ์ญ์ ํ๊ธฐ ์ ๊น์ง ์ญ์ ๋์ง์๋๋ค. ๊ทธ๋์ ๋ช๊ฐ์ง ์ค์ ์ ๋ํด๋ณด์.
server:
port: 80 # ๋ด์ฅ ํฐ์บฃ ํฌํธ๋ฒํธ
spring:
# H2 Database ์ค์
datasource:
driver-class-name: org.h2.Driver
#url: 'jdbc:h2:mem:test' # H2 DB ์ฐ๊ฒฐ ์ฃผ์ (In-Memory Mode)
url: 'jdbc:h2:~/test' # H2 DB ์ฐ๊ฒฐ ์ฃผ์ (Embedded Mode)
username: username # H2 DB ์ ์ ID (์ฌ์ฉ์ ์ง์ )
password: password # H2 DB ์ ์ PW (์ฌ์ฉ์ ์ง์ )
# H2 Console ์ค์
h2:
console: # H2 DB๋ฅผ ์น์์ ๊ด๋ฆฌํ ์ ์๋ ๊ธฐ๋ฅ
enabled: true # H2 Console ์ฌ์ฉ ์ฌ๋ถ
path: /h2-console # H2 Console ์ ์ ์ฃผ์
# JPA ์ค์
jpa:
database-platform: org.hibernate.dialect.H2Dialect
hibernate:
ddl-auto: update # DB ์ด๊ธฐํ ์ ๋ต (none, create, create-drop, update, validate)
properties:
hibernate:
dialect: org.hibernate.dialect.H2Dialect
format_sql: true # ์ฟผ๋ฆฌ ๋ก๊ทธ ํฌ๋งท (์ ๋ ฌ)
show_sql: true # ์ฟผ๋ฆฌ ๋ก๊ทธ ์ถ๋ ฅ
- DDL-AUTO ๋ฅผ UPDATE ๋ก ๋ณ๊ฒฝ
- H2 ์ฐ๊ฒฐ ์ฃผ์๋ฅผ ~ ๋ก ๋ณ๊ฒฝ
์ด๋ ๊ฒ ๋๊ฐ์ง๋ฅผ ์ค์ ํด์ค๋ค. ์๋ํ๋ฉด CREATE ๋ก DDL-AUTO๋ฅผ ์ค์ ํ๋ฉด DB๊ฐ ์์ฑ๋ ๋ ๋ง๋ค ์ ์ ์๋ ๊ฒ๋ค์ ์ญ์ ์ํค๊ธฐ ๋๋ฌธ์ ์ธ๋ฉ๋ชจ๋ฆฌ๋ก ์ฌ์ฉํ๋๊ฒ๊ณผ ๋ค๋ฅผ๊ฒ์ด ์๊ธฐ๋๋ฌธ์ด๋ค.
H2 DB ํ์ผ ์์น
์ด๋ ๊ฒ Embedded๋ก ์์ฑ๋ ๋ฐ์ดํฐ๋ฒ ์ด์คํ์ผ์ PC์ ๋์คํฌ์ ์ ์ฅ์ด ๋๋ค. ๋๋ ์๋์ฐ๋ฅผ ์ฌ์ฉํ๊ณ ์๊ณ , ์๋์ฐ์์ ๊ฐ๋ณธ์ ์ผ๋ก ์์ฑ๋๋ ๊ณณ์ C:/Users/์ฌ์ฉ์ ์ ์์ฑ์ด ๋๋ค. ์ด๋ฅผ ์ด๊ธฐํ ํ๊ณ ์ถ์ผ๋ฉด
.h2.server.properties, test.mv.db ๋ฅผ ์ญ์ ํด ์ฃผ๋ฉด ๋๋ค.