[Spring Boot - ๐ŸฑPetClinic๐Ÿถ] 3. Database๐Ÿ—‚

์‘ค๋ฐยท2023๋…„ 4์›” 12์ผ

[Spring Boot - ๐ŸฑPetClinic๐Ÿถ]

๋ชฉ๋ก ๋ณด๊ธฐ
3/11

๐Ÿ—‚ Pet Clinic์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

  • H2(default) - ์ธ๋ฉ”๋ชจ๋ฆฌ DB
  • HSQLDB - ์ธ๋ฉ”๋ชจ๋ฆฌ DB
  • MySQL - ์ผ๋ฐ˜ DB (user ์ถ”๊ฐ€ ํ•„์š”)
  • PostgreSQL - ์ผ๋ฐ˜ DB (user ์ถ”๊ฐ€ ํ•„์š”)

๐Ÿ—‚ H2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค?

์ง€๊ธˆ๊นŒ์ง€ ์˜ค๋ผํด DB์™€ MySQL๋ฐ–์— ๋‹ค๋ค„๋ณด์ง€ ์•Š์•„์„œ H2 DB๋Š” ์ƒ์†Œํ–ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ Pet Clinic์—์„œ๋Š” ๊ธฐ๋ณธ DB๋กœ H2 DB๋ฅผ ์“ฐ๊ณ  ์žˆ์—ˆ๋‹ค. H2 DB๋Š” Java๋กœ ์ž‘์„ฑ๋œ ์˜คํ”ˆ์†Œ์Šค ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ผ ์„ค์น˜ํ•˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉ(์ธ๋ฉ”๋ชจ๋ฆฌ)ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ํŠน์ง•์ด ์žˆ๋‹ค. ์„ค์น˜ํ•˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์šฉ๋Ÿ‰์ด ๊ฐ€๋ณ๊ณ  ์›น์šฉ ์ฝ˜์†”(์ฟผ๋ฆฌ ํˆด)์„ ์ œ๊ณตํ•ด ๊ฐœ๋ฐœ์šฉ ๋กœ์ปฌ DB๋กœ ์‚ฌ์šฉ์ด ์šฉ์ดํ•˜๋‹ค. ์ด๋ฐ–์— ํŠน์ง•๋“ค๋กœ ์Šคํ”„๋ง๋ถ€ํŠธ๊ฐ€ ์ง€์›ํ•˜๋Š” ์ธ๋ฉ”๋ชจ๋ฆฌ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ผ๋Š” ์ , ๋กœ์ปฌ ํ™˜๊ฒฝ, ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ ๋งŽ์ด ์“ฐ์ธ๋‹ค๋Š” ์  ๋“ฑ์ด ์žˆ๋‹ค. ๋˜ํ•œ, HSQLDB๋„ Java๋กœ ์ž‘์„ฑ๋œ ์˜คํ”ˆ์†Œ์Šค ๊ธฐ๋ฐ˜ ์ธ๋ฉ”๋ชจ๋ฆฌ ๊ด€๊ณ„ํ˜• DB๋ผ๊ณ  ํ•œ๋‹ค.

์ธ๋ฉ”๋ชจ๋ฆฌ์™€ ์ผ๋ฐ˜ DB์˜ ๊ฐ€์žฅ ํฐ ์ฐจ์ด์ ์€ ํœ˜๋ฐœ์„ฑ/๋น„ํœ˜๋ฐœ์„ฑ์ธ ๊ฒƒ ๊ฐ™๋‹ค. ์šฉ๋„์— ๋”ฐ๋ผ ์ ์ ˆํ•œ DB๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค. ์‹ค์ œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•  ๋•Œ๋Š” ์ผ๋ฐ˜ DB๋ฅผ ์จ์•ผ๊ฒ ์ง€๋งŒ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ๋Š” H2๋กœ๋„ ์ถฉ๋ถ„ํ•  ๊ฒƒ ๊ฐ™๋‹ค.

๐Ÿ—‚ Spring Boot์—์„œ 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/

profile
๊ฐœ๋ฐœ์ž์ง€๋ง์ƒ

0๊ฐœ์˜ ๋Œ“๊ธ€