๐ H2 Database๋?
H2 Database๋ Java ๊ธฐ๋ฐ์ ๊ฒฝ๋ ์ธ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก,
๋น ๋ฅธ ์๋์ ์ฌ์ด ์ค์ ์ด ์ฅ์ ์ธ RDBMS(Relational Database Management System)์ด๋ค.
Spring Boot ๋ฐ ๋ค์ํ Java ์ ํ๋ฆฌ์ผ์ด์ ์์ ํ ์คํธ์ฉ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ๋ง์ด ํ์ฉ๋๋ค.
๐น H2 Database์ ํน์ง
โ
๊ฒฝ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค: ํ์ผ ๊ธฐ๋ฐ ๋๋ ์ธ๋ฉ๋ชจ๋ฆฌ ๋ชจ๋๋ก ๋์ํ๋ฉฐ, ์ค์น๊ฐ ๊ฐ๋จํ๊ณ ๊ฐ๋ณ๋ค.
โ
๋น ๋ฅธ ์๋: ์ธ๋ฉ๋ชจ๋ฆฌ ๋ชจ๋์์๋ ๋์ ์ฑ๋ฅ์ ์ ๊ณตํ์ฌ ํ
์คํธ ๋ฐ ๊ฐ๋ฐ ํ๊ฒฝ์์ ํจ๊ณผ์ ์ด๋ค.
โ
ANSI SQL ์ง์: ํ์ค SQL์ ์ง์ํ์ฌ MySQL, PostgreSQL ๋ฑ๊ณผ ์ ์ฌํ ์ฟผ๋ฆฌ ์์ฑ์ด ๊ฐ๋ฅํ๋ค.
โ
Java ๊ธฐ๋ฐ: Pure Java๋ก ์์ฑ๋์ด ์์ด ํ๋ซํผ ๋
๋ฆฝ์ ์ด๋ค.
โ
Spring Boot์ ์๋ฒฝํ ํตํฉ: Spring Boot์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํ์ฌ ๊ฐํธํ๊ฒ ์ฐ๋ํ ์ ์๋ค.
โ
์น ์ฝ์ ์ ๊ณต: ๋ด์ฅ๋ H2 Console์ ํ์ฉํ์ฌ ์ฝ๊ฒ ๋ฐ์ดํฐ ์กฐํ ๋ฐ ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
๐ H2 Database ์ฌ์ฉ ๋ฐฉ๋ฒ
1๏ธโฃ ์์กด์ฑ ์ถ๊ฐ (Spring Boot ์ฌ์ฉ ์)
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
2๏ธโฃ ์ค์ ํ์ผ ์์
application.properties ์์
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 # H2 ์น ์ฝ์ ํ์ฑํ
spring.h2.console.path=/h2-console # ์ ์ ๊ฒฝ๋ก ์ค์
3๏ธโฃ H2 Console ์ ์
Spring Boot์์ ์คํํ ํ, ๋ธ๋ผ์ฐ์ ์์ ๋ค์ URL๋ก ์ ์ํ๋ฉด ์น ์ฝ์์ ํตํด DB๋ฅผ ๊ด๋ฆฌํ ์ ์๋ค.
โก http://localhost:8080/h2-console
์ ์ ํ JDBC URL์ jdbc:h2:mem:testdb๋ก ์ ๋ ฅํ๊ณ ๋ก๊ทธ์ธํ๋ฉด DB๋ฅผ ์กฐํํ ์ ์๋ค.
๐ H2 Database์ ํ์ฉ ์ฌ๋ก
โ Spring Boot ๊ฐ๋ฐ ๋ฐ ํ ์คํธ ํ๊ฒฝ
- ๋น ๋ฅธ ์คํ๊ณผ ์ค์ ๋๋ถ์ ๋จ์ ํ ์คํธ ๋ฐ ๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ์์ ์ฃผ๋ก ์ฌ์ฉ๋จ
- MySQL, PostgreSQL๊ณผ ํธํ์ฑ์ด ์ข์ ์ค์ ์ด์ DB๋ก ์ฝ๊ฒ ์ ํ ๊ฐ๋ฅ
โ CI/CD ํ์ดํ๋ผ์ธ์์ ํ ์คํธ DB๋ก ํ์ฉ
- ์ง์์ ํตํฉ(CI) ๊ณผ์ ์์ ํ ์คํธ์ฉ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ํ์ฉํ๋ฉด ์ฑ๋ฅ๊ณผ ์ ์ง๋ณด์์ ์ ๋ฆฌํจ
โ ๋ด์ฅํ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐ ๋ฐ์คํฌํฑ ์ฑ
- ๊ฐ๋ฒผ์ด ๋ฐ์ดํฐ ์ ์ฅ์๊ฐ ํ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ง์ด ์ฌ์ฉ๋จ
๐ H2 Database์ ๋ชจ๋
H2๋ ์ฌ๋ฌ ๊ฐ์ง ๋ชจ๋๋ฅผ ์ง์ํ๋ฉฐ, ๊ฐ ํ๊ฒฝ์ ๋ง๊ฒ ์ค์ ํ ์ ์๋ค.
1๏ธโฃ ์ธ๋ฉ๋ชจ๋ฆฌ ๋ชจ๋ (Memory Mode)
- ๊ฐ์ฅ ๋น ๋ฅธ ๋ฐฉ์์ผ๋ก, ์ ํ๋ฆฌ์ผ์ด์ ์คํ ์ค ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์ดํฐ ์ ์ฅ
- ํ ์คํธ ๋ฐ ๊ฐ๋ฐ ํ๊ฒฝ์์ ์ ์ฉ
- ๋จ์ : ์ ํ๋ฆฌ์ผ์ด์ ์ข ๋ฃ ์ ๋ฐ์ดํฐ๊ฐ ์ญ์ ๋จ
2๏ธโฃ ํ์ผ ๋ชจ๋ (File Mode)
- ๋ฐ์ดํฐ๊ฐ .mv.db ํ์ผ๋ก ์ ์ฅ๋์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์์ํด๋ ์ ์ง๋จ
- ์์์ ์ธ ๋ฐ์ดํฐ ์ ์ฅ์ด ํ์ํ ๋ ์ฌ์ฉ
3๏ธโฃ ์๋ฒ ๋ชจ๋ (Server Mode)
- ์ฌ๋ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋์์ ์ ๊ทผ ๊ฐ๋ฅํ๋๋ก ์๋ฒ๋ก ์คํ๋จ
- ์ธ๋ถ ์๋น์ค์ ์ฐ๋ํ ๋ ์ ์ฉ
4๏ธโฃ ํผํฉ ๋ชจ๋ (Mixed Mode)
- ํ์ผ ๋ชจ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉด์๋ ์๋ฒ์ฒ๋ผ ์ธ๋ถ์์ ์ ๊ทผ ๊ฐ๋ฅ
๐ก H2 Database ์ฌ์ฉ ์ ์ฃผ์ํ ์
โ ๋ฐ์ดํฐ ํ๋ฐ์ฑ: ์ธ๋ฉ๋ชจ๋ฆฌ ๋ชจ๋๋ ์ ํ๋ฆฌ์ผ์ด์
์ด ์ข
๋ฃ๋๋ฉด ๋ฐ์ดํฐ๊ฐ ์ฌ๋ผ์ง
โ ์ด์ ํ๊ฒฝ์์์ ์ฌ์ฉ ์ ํ: ํ
์คํธ ๋ฐ ๊ฐ๋ฐ ํ๊ฒฝ์์๋ ์ ์ฉํ์ง๋ง,
์ด์ ํ๊ฒฝ์์๋ MySQL, PostgreSQL ๋ฑ์ ๋ค๋ฅธ DBMS๋ฅผ ๊ณ ๋ คํ๋ ๊ฒ์ด ์ข์
โ SQL ํธํ์ฑ: H2๊ฐ ๋ชจ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ธฐ๋ฅ์ 100% ๋์ผํ๊ฒ ์ง์ํ๋ ๊ฒ์ ์๋๋ฏ๋ก ์ฃผ์๊ฐ ํ์ํจ
๐ H2 Database์ ํ์ฅ ๊ฐ๋ฅ์ฑ
๐น MySQL/PostgreSQL ๋ชจ๋ ์ง์: MODE=MySQL ์ค์ ์ผ๋ก ํน์ DBMS์ ์ ์ฌํ ํ๊ฒฝ ์ ๊ณต
๐น JPA/Hibernate ์ฐ๋ ๊ฐ๋ฅ: Spring Data JPA์ ์ฝ๊ฒ ์ฐ๋ํ์ฌ ์ํฐํ๋ผ์ด์ฆ ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ ๊ฐ๋ฅ
๐น ๋ณด์ ์ค์ ๊ฐ๋ฅ: ์ฌ์ฉ์ ๊ณ์ ๋ฐ ์ํธ ์ค์ ์ ํตํด ๋ณด์ ๊ฐํ ๊ฐ๋ฅ
โ ๋ง์น๋ฉฐ
H2 Database๋ ๋น ๋ฅด๊ณ ๊ฐ๋ฒผ์ด ํน์ฑ ๋๋ถ์ ํ ์คํธ ๋ฐ ๊ฐ๋ฐ ํ๊ฒฝ์์ ๋งค์ฐ ์ ์ฉํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ค.
Spring Boot์์ ๊ถํฉ์ด ์ข์ ์์ฝ๊ฒ ์ฐ๋ํ ์ ์์ผ๋ฉฐ,
H2 Console์ ํ์ฉํ๋ฉด ๋ฐ์ดํฐ ๊ด๋ฆฌ๋ฅผ ๋์ฑ ํธ๋ฆฌํ๊ฒ ํ ์ ์๋ค.
์ด์ ํ๊ฒฝ์์๋ MySQL, PostgreSQL๊ณผ ๊ฐ์ RDBMS๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด์ง๋ง,
ํ ์คํธ ์๋ํ, CI/CD, ๋ด์ฅํ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ ๋ฑ์์๋ H2๊ฐ ํ์ํ ์ ํ์ด ๋ ์ ์๋ค.