Skip to content

Latest commit

ย 

History

History
133 lines (84 loc) ยท 9.04 KB

db-dummy-data.md

File metadata and controls

133 lines (84 loc) ยท 9.04 KB

DB Dummy data ์ž๋™ ์‚ฝ์ž…ํ•˜๊ธฐ

Spring์—์„œ DB๋ฅผ ์ž๋™์œผ๋กœ ์‚ฝ์ž…ํ•˜๊ฒŒ ํ•˜๋ ค๋ฉด...

Spring์˜ In memory-DB์ธ H2๋ฅผ ํ™œ์šฉํ•ด์„œ ์ฝ”๋”ฉ์„ ํ•˜๋‹ค๋ณด๋ฉด,์„œ๋ฒ„๋ฅผ ํ•œ๋ฒˆ ๋„๊ณ  ํ‚ค๋Š” ๋™์•ˆ ๊ทธ์•ˆ์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚ ๋ผ๊ฐ€๊ฒŒ๋œ๋‹ค.

Test ์šฉ๋„๋กœ๋Š” ํ›Œ๋ฅญํ•˜์ง€๋งŒ,๋Œ๋•Œ๋งˆ๋‹ค ์•„๊นŒ ๋„ฃ์—ˆ๋˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ์‚ฝ์ž…ํ•˜๊ณ  ๋„ฃ๊ณ ...ํ™•์ธํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์น˜๋Š”๊ฒƒ์€ ์—ฌ๊ฐ„ ๊ท€์ฐฎ์€ ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค.

Spring์—์„œ๋Š” ์ž๋™์œผ๋กœ SQL๋ฌธ์„ ๋„ฃ์–ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ด ์„ธํŒ…๋˜์–ด์žˆ๋‹ค.

SQL๋ฌธ์˜ ์ž๋™ ์‚ฝ์ž…

๋ฐฉ์‹์€ ์ด๋Ÿฐ์‹์œผ๋กœ ์ž‘๋™๋˜์–ด์ง„๋‹ค.๋‚ด๊ฐ€ ๋”ฐ๋กœ ์„ค์ •์„ ํ•˜์ง€ ์•Š์•„๋„,resources ์—์„œ data.sql,schema.sql๋Š” ์ž์‹ ์ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” DB์— ๋งž์ถฐ์„œ ์„œ๋ฒ„๊ฐ€ ์ผœ์ง์— ๋”ฐ๋ผ์„œ ์ž๋™์œผ๋กœ data.sql์€ DML (Insert๋ฌธ) schema.sql์€ DDL(Create)๋ฌธ์„ ์ž๋™์œผ๋กœ ์ ์šฉ์‹œ์ผœ์ค€๋‹ค.

์š”๋ก  ๋А๋‚Œ์“ฐ.

๋” ๋‚˜์•„๊ฐ€์„œ, Spring Data JPA๋Š” DB์˜ ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ SQL๋ฌธ์˜ ๋ณ€๊ฒฝ ์ƒํ™ฉ๋„ ๊ณ ๋ คํ•˜์—ฌ ํ”Œ๋ ›ํผ์— ๋”ฐ๋ผ์„œ SQL๋ฌธ ์—ญ์‹œ ์ž‘๋™์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

schema-${platform}.sql, data-${platform}.sql ์™€ ๊ฐ™์€ ํ˜•ํƒœ๋กœ DBํ”Œ๋ ›ํผ์— ๋”ฐ๋ผ์„œ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ทธ ์„ค์ •์€ application.properties์—์„œ ํ˜น์€ yamlํŒŒ์ผ์—์„œ DB ํ”Œ๋ ›ํผ ๋ช…์— ๋”ฐ๋ผ์„œ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋‹ค. -> spring.datasource.platform = hsqldb, h2, oracle, mysql, postgresql ๋“ฑ๋“ฑ...

์ฐธ๊ณ ๋กœ Schema์˜ ๊ฒฝ์šฐ Hibernate์—์„œ ์„ค์ •์„ ๋”ฐ๋กœ ํ•˜์ง€ ์•Š์œผ๋ฉด ์ž๋™์œผ๋กœ DDL์ด ์‚ฝ์ž…๋˜๊ฒŒ ๋˜์žˆ์–ด์„œ, ๋งŒ์•ฝ ์ž์‹ ๋งŒ์˜ ์Šคํ‚ค๋งˆ๋ฅผ ๋”ฐ๋กœ ์žก์•„์ค˜์•ผํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๋ฐ˜๋“œ์‹œ ์˜ต์…˜์„ ์„ค์ •ํ•ด์ค˜์•ผํ•œ๋‹ค.

spring.jpa.generate-ddl ๋‚˜ spring.jpa.hibernate.ddl-auto ๋ฅผ ์„ค์ •์„ ๋ฐ”๊ฟ”์ค˜์•ผ์ง€ ๋™์‹œ์— ์‚ฝ์ž…์ด ๋˜์ง€ ์•Š์•„, ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์„์„ ๋” ์ขํž ์ˆ˜ ์žˆ๋‹ค.

{% hint style="success" %} ์ข€ ๋” ๊ตฌ์ฒด์ ์ธ DB ์‚ฝ์ž…๊ณผ ๊ด€๋ จ๋œ ์˜ต์…˜๋“ค์ด ์žˆ๋Š”๋ฐ, spring.datasource.continue-on-error ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ด์ƒํ•˜๊ฒŒ ๋„ฃ์–ด์ ธ์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ๊ทธ๋ƒฅ ์ง„ํ–‰ ์‹œํ‚ค๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

spring.datasource.sql-script-encoding=UTF-8 data.sql์„ ํ™œ์šฉํ•˜๋ฉด์„œ ์ธ์ฝ”๋”ฉ ์˜ต์…˜์„ ๋”ฐ๋กœ ์ค„ ์ˆ˜ ์žˆ๋Š”๋ฐ ๊ฒ€์ƒ‰์„ ๋งŽ์ดํ•ด๋ณธ ๊ฒฐ๊ณผ, ํ•œ๊ธ€ ์˜ต์…˜์„ ์žฌ๋Œ€๋กœ ์ฃผ์ง€ ์•Š๋Š”๋‹ค๋ฉด, ๊นจ์ ธ์„œ ๋“ค์–ด๊ฐ€์„œ ์ธ์ฝ”๋”ฉ ์˜ต์…˜์„ ์ค˜์„œ ์•ˆ๊นจ์ง€๊ฒŒ ๋„ฃ๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์—ˆ๋‹ค. {% endhint %}

๋” ๋‚˜์•„๊ฐ€์„œ, Spring Data JPA๋Š” DB์˜ ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ SQL๋ฌธ์˜ ๋ณ€๊ฒฝ ์ƒํ™ฉ๋„ ๊ณ ๋ คํ•˜์—ฌ ํ”Œ๋ ›ํผ์— ๋”ฐ๋ผ์„œ SQL๋ฌธ ์—ญ์‹œ ์ž‘๋™์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

schema-${platform}.sql, data-${platform}.sql ์™€ ๊ฐ™์€ ํ˜•ํƒœ๋กœ DBํ”Œ๋ ›ํผ์— ๋”ฐ๋ผ์„œ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ทธ ์„ค์ •์€ application.properties์—์„œ ํ˜น์€ yamlํŒŒ์ผ์—์„œ DB ํ”Œ๋ ›ํผ ๋ช…์— ๋”ฐ๋ผ์„œ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋‹ค. -> spring.datasource.platform = hsqldb, h2, oracle, mysql, postgresql ๋“ฑ๋“ฑ...

์ฐธ๊ณ ๋กœ Schema์˜ ๊ฒฝ์šฐ Hibernate์—์„œ ์„ค์ •์„ ๋”ฐ๋กœ ํ•˜์ง€ ์•Š์œผ๋ฉด ์ž๋™์œผ๋กœ DDL์ด ์‚ฝ์ž…๋˜๊ฒŒ ๋˜์žˆ์–ด์„œ, ๋งŒ์•ฝ ์ž์‹ ๋งŒ์˜ ์Šคํ‚ค๋งˆ๋ฅผ ๋”ฐ๋กœ ์žก์•„์ค˜์•ผํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๋ฐ˜๋“œ์‹œ ์˜ต์…˜์„ ์„ค์ •ํ•ด์ค˜์•ผํ•œ๋‹ค.

spring.jpa.generate-ddl ๋‚˜ spring.jpa.hibernate.ddl-auto ๋ฅผ ์„ค์ •์„ ๋ฐ”๊ฟ”์ค˜์•ผ์ง€ ๋™์‹œ์— ์‚ฝ์ž…์ด ๋˜์ง€ ์•Š์•„, ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์„์„ ๋” ์ขํž ์ˆ˜ ์žˆ๋‹ค.

ํžŒํŠธ: ์ข€ ๋” ๊ตฌ์ฒด์ ์ธ DB ์‚ฝ์ž…๊ณผ ๊ด€๋ จ๋œ ์˜ต์…˜๋“ค์ด ์žˆ๋Š”๋ฐ, spring.datasource.continue-on-error ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ด์ƒํ•˜๊ฒŒ ๋„ฃ์–ด์ ธ์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ๊ทธ๋ƒฅ ์ง„ํ–‰ ์‹œํ‚ค๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๊ณ ,

spring.datasource.sql-script-encoding=UTF-8 data.sql์„ ํ™œ์šฉํ•˜๋ฉด์„œ ์ธ์ฝ”๋”ฉ ์˜ต์…˜์„ ๋”ฐ๋กœ ์ค„ ์ˆ˜ ์žˆ๋Š”๋ฐ ๊ฒ€์ƒ‰์„ ๋งŽ์ดํ•ด๋ณธ ๊ฒฐ๊ณผ, ํ•œ๊ธ€ ์˜ต์…˜์„ ์žฌ๋Œ€๋กœ ์ฃผ์ง€ ์•Š๋Š”๋‹ค๋ฉด, ๊นจ์ ธ์„œ ๋“ค์–ด๊ฐ€์„œ ์ธ์ฝ”๋”ฉ ์˜ต์…˜์„ ์ค˜์„œ ์•ˆ๊นจ์ง€๊ฒŒ ๋„ฃ๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์—ˆ๋‹ค.

TestCode์—์„œ Data.sql์˜ ์‚ฝ์ž…

์ €๊ฒƒ๋งŒ์œผ๋กœ๋„ ํฐ ์ˆ˜ํ™•์ด์—ˆ์œผ๋‚˜, TDD๋ฅผ ์œ„ํ•ด์„œ JPA TestCode๋ฅผ ์ž‘์„ฑ์ค‘์ด์—ˆ๋Š”๋ฐ ์˜ค๋ฅ˜๊ฐ€ ์ง€์†์ ์œผ๋กœ ๋ฐœ์ƒํ–ˆ๋‹ค.

@DataJpaTest ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฝ์ž…ํ•˜๊ณ  ์‹คํ–‰ํ–ˆ์„ ๊ฒฝ์šฐ ์ž๊พธ ์ด๋Ÿฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement  ENGINE=[*]INNODB"; expected "identifier"; SQL statement:

์™œ ์ด๋Ÿฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋А๋ƒ ํ™•์ธํ•ด๋ณด๋‹ˆ๊นŒ

Application.yaml ์˜ dialect์˜ ์กฐ๊ฑด์„ mysql engine์„ innodb๋กœ ์คฌ๊ธฐ๋•Œ๋ฌธ์— ์ž๊พธ DDL๋ฌธ์ด ENGINE=INNODB ๊ณผ ๊ฐ™์€ ์˜ค๋ฅ˜๋ฅผ ๋งŒ๋“ค์–ด ๋ƒˆ๋‹ค.

spring:
    properties:
      hibernate:
        dialect: org.hibernate.dialect.MySQL5InnoDBDialect
        storage_engine: innodb # <-๋”ฐ์ง€์ž๋ฉด ์ด์นœ๊ตฌ๊ฐ€ ๋ฌธ์ œ์˜€๋‹ค.
  datasource:
    hikari:
      jdbc-url: jdbc:h2:mem://localhost/~/testdb;MODE=MYSQL
    continue-on-error: true

datasource๋Š” ๋ถ„๋ช…ํžˆ ์žฌ๋Œ€๋กœ MODE=MYSQL์ธ๋ฐ, ๋„๋Œ€์ฒด ์™œ ์•ˆ๋˜๋Š”๊ฐ€ ํ–ˆ๋”๋‹ˆ๋งŒ, ๊ณต์‹๋ฌธ์„œ์™€ ์–ด๋…ธํ…Œ์ด์…˜์„ ํƒ€๊ณ  ํƒ€๊ณ  ๊ฐ€๋ณด๋ฉด ๋‹ค์Œ์ฒ˜๋Ÿผ ๋˜์–ด์žˆ๋‹ค.

@AutoConfigureTestDatabase //์ด ์–ด๋…ธํ…Œ์ด์…˜์˜ ํ•จ์ˆ˜์ธ
// ใ„ด ๋ฐ‘์˜
EmbeddedDatabaseConnection connection() default EmbeddedDatabaseConnection.NONE; // ์ด ์ž„๋ฒ ๋””๋“œConnection์˜ ์กฐ๊ฑด์ค‘์— H2์˜ต์…˜์„ ํ™•์ธํ•ด๋ณด๋ฉด
//ใ„ด ์•ˆ์˜
H2(EmbeddedDatabaseType.H2, DatabaseDriver.H2.getDriverClassName(),
      "jdbc:h2:mem:%s;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE", (url) -> url.contains(":h2:mem")),

H2 ์˜ต์…˜์ด ์ž๋™์„ค์ •๋  ๊ฒƒ์ด๋‹ค. (๋ญ ๋‚ด๊ฐ€ ์„ค์ •์„ ๋”ฐ๋กœํ•˜์ง€์•Š์œผ๋ฉด, ์ž๋™์œผ๋กœ AutoConfiguration์— ์˜ํ•ด์„œ h2๋กœ ์žกํž ๊ฒƒ์ด๋‹ค. ) ๊ทผ๋ฐ ์ž˜ JDBC ์กฐ๊ฑด์—๋Š” MYSQL์กฐ๊ฑด์ด ์—†์œผ๋ฏ€๋กœ dialect๊ฐ€ MySQL5InnoDBDialect ์ด๋ผ๋ฉด ๋‹น์—ฐํžˆ ์Šคํ‚ค๋งˆ ์ ์šฉ์‹œ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๊ณ  DML ๋ถ€๋ถ„์—์„œ๋„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒƒ์ด๋‹ค.

@DataJPATest๋ฅผ ํ•˜๋ฉด ์ž๋™์œผ๋กœ @AutoConfigureTestDatabase ๊ฐ€ ์ ์šฉ์ด ๋˜๋‹ˆ๊นŒ ์šฐ๋ฆฌ๋Š” ๋ฌด์Šจ ์ˆ˜๋ฅผ ์จ๋„ H2์ธ ๊ฒฝ์šฐ์—๋Š” H2์˜ ์˜ต์…˜ ๋ณ€๊ฒฝ์ด ์•ˆ๋œ๋‹ค๋Š” ๋œป์ด๊ธฐ๋„ ํ•œ๋ฐ...

๋ฌผ๋ก  Spring๊ฐœ๋ฐœ์ž๋“ค์ด ๊ทธ๋ ‡๊ฒŒ ๋นก๋นกํ•˜๊ฒŒ ๊ตด๋ฆฌ๋Š” ์—†์ง€์•Š์€๊ฐ€? ๋‚ด๊ฐ€ ํ…Œ์ŠคํŠธ์šฉ DB๋ฅผ H2๋กœ ๊ณ ์ •ํ• ๊ฑด ์•„๋‹ํ…๋ฐ, ๋‹ค๋ฅธ DB๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ๋Œ€์ฒต๋„ ์—ญ์‹œ ๋งˆ๋ จ๋˜์–ด์žˆ๋‹ค.

๊ณต์‹๋ฌธ์„œ: https://docs.spring.io/spring-boot/docs/current/reference/html/howto.html#howto-database-initialization

TestDB๋ฅผ ์‹ค์ œ DB๋กœ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•

@AutoConfigureTestDatabase ๋ฅผ ์ž˜ ๋‘˜๋Ÿฌ๋ณธ๋‹ค๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ต์ฒด๊ฐ€๋Šฅํ•œ Enum์ด ์กด์žฌํ•œ๋‹ค.

Replace replace() default Replace.ANY;
enum Replace {
    ANY,
    AUTO_CONFIGURED,
    NONE
  }

๊ธฐ๋ณธ์ ์œผ๋กœ ANY๊ฐ€ ์„ ํƒ๋˜์žˆ๊ณ , ANY๋Š” NONE, AUTO_CONFIGURED ์ค‘ ํ•˜๋‚˜ ์„ ํƒํ•˜๋Š”๊ฒƒ์ธ๋ฐ, ๊ฑฐ์˜ ๋Œ€๋ถ€๋ถ„ AUTO๋กœ ์ธ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์„ ํƒํ• ๊ฒƒ์ด๊ธฐ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๋Š” ๋ฐ˜๋“œ์‹œ NONE์„ ์„ ํƒํ•ด์•ผ์ง€๋งŒ, url ์˜ต์…˜๋“ค์ด ์‚ฌ๋ผ์ง„์ฑ„๋กœ ์šฐ๋ฆฌ๊ฐ€ ์ง‘์–ด๋„ฃ๋Š” DB์˜ต์…˜ ๊ฐ’์„ ๋ฐ›์•„์„œ DB Testing์„ ์ง„ํ–‰์‹œ์ผœ์ค€๋‹ค.

์ด๋Ÿฌํ•œ DB์˜ต์…˜๋“ค์€ ๋‹น์—ฐํžˆ Application.yaml์ด๋‚˜ properties์—์„œ DB๊ด€๋ จ ์ •๋ณด๋“ค์„ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค.

@ActiveProfiles("....") ์„ ๋”ฐ๋กœ ์ง€์ •ํ•ด๋†“์ง€ ์•Š์œผ๋ฉด, ๊ธฐ๋ณธ์œผ๋กœ ์„ค์ •๋˜์–ด์žˆ๋Š” application.yaml์œผ๋กœ ๋ถ™์–ด์„œ ์ฒ˜๋ฆฌ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ณต์šฉ์œผ๋กœ ์‚ฌ์šฉ๋˜์–ด์ง€๋Š” ์˜ต์…˜์œผ๋กœ ์ฒ˜๋ฆฌ๊ฐ€ ๋˜์–ด์„œ ๋‚˜ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ์ฐจ๋ผ๋ฆฌ Test์šฉ application.yaml์„ ๋”ฐ๋กœ ๋งŒ๋“ค๊ณ  ๋”ฐ๋กœ profile์„ ์ง€์ •ํ•ด์„œ @ActiveProfiles("....")์„ ํ†ตํ•ด์„œ ํ™œ์„ฑํ™”์‹œํ‚ค๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ๋ฐ”๊พธ์—ˆ๋‹ค.

๊ณต์‹๋ฌธ์„œ: https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-testing-spring-boot-applications-testing-autoconfigured-jpa-test

{% hint style="info" %} @DataJpaTest๋Š” @Transactional ์–ด๋…ธํ…Œ์ด์…˜์ด ๋“ค์–ด์žˆ์–ด์„œ ํ…Œ์ŠคํŠธ ๊ธฐ๋Šฅ์ค‘์—๋„ ํ…Œ์ŠคํŠธ๊ฐ€ ๋๋‚˜๋ฉด ์ž๋™ RollBack๋˜๊ฒŒ ๋˜์žˆ๋‹ค.์•„๋ž˜์ฒ˜ {% endhint %}

2021-04-30 16:57:37.854  INFO 85053 --- [    Test worker] o.s.t.c.transaction.TransactionContext   : Rolled back transaction for test:

{% hint style="info" %} spring.jpa.show-sql ์—ญ์‹œ true์ฒ˜๋ฆฌ๋˜์–ด์žˆ์–ด์„œ ๋”ฐ๋กœ ์„ค์ •ํ•ด์ฃผ์ง€ ์•Š์•„๋„ ์ž๋™์œผ๋กœ ํ™•์ธ๊ฐ€๋Šฅํ•˜๋‹ค. {% endhint %}

๋งˆ๋ฌด๋ฆฌ

TestCode๋ฅผ ์ž‘์„ฑํ•˜๋ ค๋‹ค๋ณด๋‹ˆ ํ™•์‹คํžˆ ์–ป๋Š” ์ ์ด ๋งŽ์•„์กŒ๋‹ค. ๋‚ด๊ฐ€ ์•Œ์ง€ ๋ชปํ–ˆ๋˜ ๊ฒƒ๋“ค์— ๋Œ€ํ•ด์„œ ์žฌ๋Œ€๋กœ ์•Œ๊ณ  ๋„˜์–ด๊ฐˆ ์ˆ˜ ์žˆ์–ด์„œ ์ข‹์•˜๋˜๊ฒƒ ๊ฐ™์•„ ์ •๋ฆฌ๋„ ์ข€ ๋นก์„ธ๊ฒŒ ์ง„ํ–‰ํ•ด๋ดค๋‹ค.

์ถœ์ฒ˜

๋ธ”๋กœ๊ทธ: https://kangwoojin.github.io/programing/auto-configure-test-database/

https://pravusid.kr/java/2018/10/10/spring-database-initialization.html

https://github.com/HomoEfficio/dev-tips/blob/master/Spring%20%40DataJpaTest%20%EC%82%AC%EC%9A%A9%20Tips.md