์ง๊ธ๊น์ง ์ค๋ผํด DB์ MySQL๋ฐ์ ๋ค๋ค๋ณด์ง ์์์ H2 DB๋ ์์ํ๋ค. ๊ทธ๋ฐ๋ฐ Pet Clinic์์๋ ๊ธฐ๋ณธ DB๋ก H2 DB๋ฅผ ์ฐ๊ณ ์์๋ค. H2 DB๋ Java๋ก ์์ฑ๋ ์คํ์์ค ๊ธฐ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ผ ์ค์นํ์ง ์๊ณ ์ฌ์ฉ(์ธ๋ฉ๋ชจ๋ฆฌ)ํ ์ ์๋ค๋ ํน์ง์ด ์๋ค. ์ค์นํ์ง ์๊ณ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ฉ๋์ด ๊ฐ๋ณ๊ณ ์น์ฉ ์ฝ์(์ฟผ๋ฆฌ ํด)์ ์ ๊ณตํด ๊ฐ๋ฐ์ฉ ๋ก์ปฌ DB๋ก ์ฌ์ฉ์ด ์ฉ์ดํ๋ค. ์ด๋ฐ์ ํน์ง๋ค๋ก ์คํ๋ง๋ถํธ๊ฐ ์ง์ํ๋ ์ธ๋ฉ๋ชจ๋ฆฌ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ผ๋ ์ , ๋ก์ปฌ ํ๊ฒฝ, ํ ์คํธ ํ๊ฒฝ์์ ๋ง์ด ์ฐ์ธ๋ค๋ ์ ๋ฑ์ด ์๋ค. ๋ํ, HSQLDB๋ Java๋ก ์์ฑ๋ ์คํ์์ค ๊ธฐ๋ฐ ์ธ๋ฉ๋ชจ๋ฆฌ ๊ด๊ณํ DB๋ผ๊ณ ํ๋ค.
์ธ๋ฉ๋ชจ๋ฆฌ์ ์ผ๋ฐ DB์ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ ํ๋ฐ์ฑ/๋นํ๋ฐ์ฑ์ธ ๊ฒ ๊ฐ๋ค. ์ฉ๋์ ๋ฐ๋ผ ์ ์ ํ DB๋ฅผ ์ฌ์ฉํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค. ์ค์ ํ๋ก์ ํธ๋ฅผ ์งํํ ๋๋ ์ผ๋ฐ DB๋ฅผ ์จ์ผ๊ฒ ์ง๋ง ํ ์คํธ ํ๊ฒฝ์์๋ H2๋ก๋ ์ถฉ๋ถํ ๊ฒ ๊ฐ๋ค.
H2 ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ Spring Boot์์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ application.properties์ ๋ค์๊ณผ ๊ฐ์ด ์ค์ ์ ์ถ๊ฐํด์ฃผ๋ฉด ๋๋ค.
database=h2
spring.sql.init.schema-locations=classpath*:db/${database}/schema.sql
spring.sql.init.data-locations=classpath*:db/${database}/data.sql
Pet Clinic Application์ spring-petclinic/src/main/resources ํ์์ application.properties๊ฐ ์๊ณ ๊ฐ์ ์์น์ db ํด๋๊ฐ ์๋ค. db ํด๋ ํ์์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ณ ํด๋๊ฐ ์กด์ฌํ๊ณ ๊ทธ ํ์์ ๊ฐ DB์ ์ฟผ๋ฆฌ๋ฌธ ํ์์ ๋ง๋ schema ํ์ผ๊ณผ data ํ์ผ์ด ์กด์ฌํ๋ค. ์ดํ๋ฆฌ์ผ์ด์ ๊ตฌ๋ ์ ์์ ํ์ผ๋ค์ ์ด์ฉํด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ด๊ธฐํํ๋ค. H2 ๋ง๊ณ ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด database=h2์์ h2 ๋์ ์ฌ์ฉํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ช ์ ์ ๋ ฅํ๋ค. ์ธ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์๋ ์ผ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ application.properties์ profile์ ์ง์ ํด์ค์ผ ํ๋ค.
# application.properties์ ๋ค์ ์ต์
์ถ๊ฐ
# MySQL
spring.profiles.active=mysql
# PostgreSQL
spring.profiles.active=postgres
์ฃผ์ํ ์ ์ ์ผ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฌ์ฉ์๋ฅผ ์ถ๊ฐํ๊ณ ๊ถํ ์ค์ ์ ํด์ค์ผ ํ๋ค๋ ์ ์ด๋ค. ์ฌ์ฉ์ ์ถ๊ฐ๋ฅผ ํ์ง ์์ ๊ฒฝ์ฐ ์ดํ๋ฆฌ์ผ์ด์ ์คํ ์ ์ฐ๊ฒฐ์ด ๊ฑฐ๋ถ๋๋ค๊ณ ๋์จ๋ค. ์ฌ์ฉ์์ ๋น๋ฐ๋ฒํธ๋ ํ๋กํผํฐ ํ์ผ์ ์ค์ ๋ผ์๋ค. ์ค์ ํ์ผ ๋ด์ฉ์ ๋ง์ถฐ ์ฌ์ฉ์๋ฅผ ์ถ๊ฐ(+DB ์์ฑ ๋ฐ ๊ถํ์ค์ )ํ๊ฑฐ๋ ๊ธฐ์กด์ ์ฌ์ฉํ๋ ์ฌ์ฉ์๋ฅผ ์ฌ์ฉํ๋๋ก ์ค์ ํ์ผ์ ์์ ํด์ค์ผ ํ๋ค.
MySQL: application-mysql.properties ํ์ผ
PostgreSQL: application-postgres.properties ํ์ผ
MySQL๊ณผ PostgreSQL ์ฌ์ฉ ์ ๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค์ ํ์ผ์ spring.sql.init.mode=always ์ต์ ์ด ์กด์ฌํ๋ค. ์ด ์ต์ ์ ์ํด ์คํ๋ ๋๋ง๋ค resources ํ์์ schema.sql์ด๋ data.sql ํ์ผ์ ์คํํ๊ฒ ๋๋ค. ์ด ์ต์ ์ ์ดํ๋ฆฌ์ผ์ด์ ๋ก๋ฉ ์ ์ฟผ๋ฆฌ๋ฌธ์ ๋ ๋ฆฌ๊ธฐ ์ํด ์ฐ์ธ๋ค. spring boot 2.4 ์ดํ ๋ฒ์ ์ resources ํ์์ schema.sql(or data.sql)์ ๋ฌด์กฐ๊ฑด ์คํ์ํค์ง๋ง 2.5 ์ด์ ๋ฒ์ ์ ์์ ์ต์ ์ด ์์ด์ผ๋ง ์คํ์ํจ๋ค. ์ฐ์์ฑ ์๋ ๋ฐ์ดํฐ(๋นํ๋ฐ์ฑ ๋ฐ์ดํฐ)๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์ด ์ต์ ์ ๋นผ๋ฉด ๋๋ค.
๋ก์ปฌ DB ์ค๋ช
- https://dbheart.tistory.com/36
H2 Database ์ค๋ช
- https://yjkim-dev.tistory.com/3
spring-boot init sql ์ค๋ช
- https://kha0213.github.io/spring/schema.sql/