ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๐Ÿ” Soft Delete

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ row ๋ฅผ ์‹ค์ œ๋กœ ์‚ญ์ œํ•˜์ง€๋Š” ์•Š์•„์•ผ ํ•˜๋Š” ์ƒํ™ฉ์—์„œ ์‚ฌ์šฉํ•œ๋‹ค.

์‹ค์งˆ์ ์œผ๋กœ DB ์—๋Š” ๋‚จ๊ฒจ๋‘๊ณ , ํ”„๋ก ํŠธ์—์„œ ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๋„๋ก ์ˆจ๊ธฐ๋Š” ๋ฐฉ์‹์œผ๋กœ pseudo-delete ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์„ soft delete ์˜ ์ •์˜๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ํฌ์ŠคํŠธ๊ฐ€ ์‚ญ์ œ๋˜์—ˆ๋Š”๋ฐ ๋Œ“๊ธ€๊ณผ ์ข‹์•„์š”๊ฐ€ ์‚ญ์ œ๋œ ํฌ์ŠคํŠธ ์•„์ด๋””์— ๋Œ€ํ•œ ๋Œ“๊ธ€๊ณผ ์ข‹์•„์š”๋กœ ๋‚จ์•„ ์žˆ์œผ๋ฉด ๋…ผ๋ฆฌ์ ์œผ๋กœ ์˜ค๋ฅ˜์ด๋ฏ€๋กœ soft delete ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.

๋Œ“๊ธ€ ์—”ํ‹ฐํ‹ฐ์™€ ์ข‹์•„์š” ์—”ํ‹ฐํ‹ฐ ๋ชจ๋‘์— deleted\_at ์ปฌ๋Ÿผ์„ ์ถ”๊ฐ€ํ•ด์„œ ์‚ญ์ œ๋  ๋•Œ ํ˜„์žฌ ์‹œ๊ฐ„์ด ๊ธฐ๋ก๋˜๋„๋ก ์ฟผ๋ฆฌ๋ฅผ ํŠœ๋‹ํ•ด์ค€๋‹ค.

์ข‹์•„์š”๋ฅผ ๋ˆŒ๋ €๊ณ , ๋Œ“๊ธ€์„ ๋‹ฌ์•˜๋‹ค๋Š” ๊ธฐ๋ก์€ ๋‚จ๊ธด ์ฑ„ ๋Œ€์ƒ ํฌ์ŠคํŠธ๊ฐ€ ์‚ฌ๋ผ์กŒ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ๊ณ ๋Š” ์žˆ๋„๋ก ํ•  ๋•Œ soft delete ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

๐Ÿ“ H2

์‹œ์Šคํ…œ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์— ์˜์กดํ•˜์—ฌ ์กด์žฌํ•˜๋Š” ์ธ ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ด๋‹ค.

 

์ธ ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

  • ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์†์ ์œผ๋กœ ๊ฐ–๊ณ  ์žˆ์„ ํ•„์š”๊ฐ€ ์—†์„ ๋•Œ ํ™œ์šฉํ•œ๋‹ค.
    • ์ž„๋ฒ ๋””๋“œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ด๋‹ค.
    • ๋ฐ์ดํ„ฐ๋Š” ํœ˜๋ฐœ์„ฑ์ด ๊ฐ•ํ•˜๋‹ค. ์ €์žฅ๋˜์ง€ ์•Š๊ณ  ์•ฑ์„ ๋‹ค์‹œ ์‹คํ–‰ํ•  ๋•Œ ์‚ฌ๋ผ์ง„๋‹ค.
    • H2, HSQLDB, Apache Derby ๊ฐ€ ๋Œ€ํ‘œ์ ์ด๋‹ค.
    • POC ์— ์œ ์šฉํ•˜๋‹ค (Proof Of Concepts, ๊ฐœ๋…์„ ์ฆ๋ช…ํ•˜๋Š” ๊ฒƒ)

ํœ˜๋ฐœ์„ฑ์ด ์žˆ์œผ๋ฏ€๋กœ ํ…Œ์ŠคํŠธ์˜ ํ”์ ์€ ๋‚จ๊ธฐ์ง€ ์•Š์œผ๋ฉด์„œ๋„, ํ…Œ์ŠคํŠธ์—์„œ ์›ํ•˜๋Š” ๋ฐฉํ–ฅ์ธ ๋˜๋Š” ๋™์ž‘์ธ ๋ฐ์ดํ„ฐ์˜ ์‹ค์งˆ์ ์ธ ํ˜•ํƒœ ๋ณ€๊ฒฝ (CRUD)๋ฅผ ํ™•์ธํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด H2 ๋ฅผ ์‚ฌ์šฉํ•ด ํ…Œ์ŠคํŠธ ์ค‘์—๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์ œ๋กœ ์ €์žฅํ•˜๋Š” ์ฒ™์„ ํ•ด์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๋Š” ๋ชจ์–‘์„ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ H2 ๋ฅผ ์ ์šฉํ•˜๋ฉด ์œ ์šฉํ•˜๋‹ค.

๐Ÿ’ก ํ…Œ์ŠคํŠธ ์‹œ ํ•„์š”ํ•œ ์–ด๋…ธํ…Œ์ด์…˜

1. @ExtendWith(SpringExtension.class)

 

2. @DataJpaTest: JPA ๊ด€๋ จ application context ๋งŒ ๋กœ๋“œํ•˜๊ฒŒ ํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด๋‹ค.

 

@AutoConfigureTestDatabase ๋กœ ๋”ฐ๋กœ ๋ช…์‹œํ•ด์ฃผ๋ฉด, ์–ด๋–ค datasource ๋ฅผ ํ™œ์šฉํ• ์ง€ ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋งŒ์•ฝ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด ๋งฅ๋ฝ์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด @SpringBootTest ๋กœ ๋ชจ๋“  ๋นˆ์„ ๋กœ๋“œํ•˜๊ณ  @AutoConfigureTestDatabase ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€ DB (์˜ˆ. H2) ๋ฅผ ์ง€์ •ํ•˜์—ฌ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋งž๋‹ค. ์‚ฌ์‹ค, ๋งฅ๋ฝ ์ „์ฒด๋ฅผ ํ…Œ์ŠคํŠธ๋กœ ๋Œ์–ด์˜ค์ง€ ์•Š์œผ๋ฉด ๊ฒ€์ฆํ•  ์ˆ˜ ์—†๋Š” ๋™์ž‘๋“ค์ด ์žˆ์–ด์„œ (์˜ˆ. ์‹ค์ œ DB์˜ ๋ณ€๋™ ์‚ฌํ•ญ) ๋Œ์–ด์˜ค๋Š” ๊ฒƒ์ธ๋ฐ, ๋งŒ์•ฝ JPA ์ฟผ๋ฆฌ๋ฌธ์˜ ๋ณ€๊ฒฝ๋งŒ ํ™•์ธํ•˜๊ณ  ์‹ถ์œผ๋ฉด @DataJpaTest ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ถฉ๋ถ„ํ•˜๋‹ค.

  1. H2 ๊ฐ€ ์•„๋‹Œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ํ…Œ์ŠคํŠธํ•  ๋•Œ @DataJpaTest ์–ด๋…ธํ…Œ์ด์…˜ ์“ฐ๋ฉด ์‹ค์ œ deleted\_at ์ด ๋ณ€ํ•˜๋Š”์ง€๊นŒ์ง€๋Š” ํ™•์ธํ•  ์ˆ˜๊ฐ€ ์—†๊ณ  ์‚ฌ์‹ค์ƒ JPA ์ฟผ๋ฆฌ๊ฐ€ ๋ณ€ํ™˜๋˜๋Š”์ง€๊นŒ์ง€๋งŒ ๊ฒ€์ฆํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด์•ผ ํ•œ๋‹ค.
    Image
  2. replace ์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์„ธ ๊ฐœ์˜ ์˜ต์…˜์ด ์žˆ๋‹ค.
  3. Image
  4. ๋งŒ์•ฝ deleted_at ์ด ๋ณ€ํ•˜๋Š”์ง€๊นŒ์ง€ ํ™•์ธํ•˜๋ ค๋ฉด @SpringBootTest ์™€ @AutoConfigureTestDatabase ์–ด๋…ธํ…Œ์ด์…˜ ์จ์„œ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ๊ณ  replace = ์ดํ›„์— ์–ด๋–ค DB ์‚ฌ์šฉํ• ๊ฑด์ง€ (NONE ์ด๋ฉด replace ์•ˆํ•˜๊ณ  ํ˜„์žฌ main application ์—์„œ ์‚ฌ์šฉํ•˜๋Š” DB๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.) ๋ช…์‹œํ•ด์„œ ํ…Œ์ŠคํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

๐Ÿ“Œ ์ถœ์ฒ˜

https://stackoverflow.com/questions/73192750/how-to-use-autoconfiguretestdatabase-at-the-application-level-for-spring-boot-2

 

How to use @AutoConfigureTestDatabase at the application level for spring boot 2.7+

My Spring-boot application has many @SpringBootTest and @DataJpaTest test classes. My application also uses a H2 database. I want my tests to use the DB defined at the application level. The annota...

stackoverflow.com

https://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/test/autoconfigure/jdbc/AutoConfigureTestDatabase.html

 

AutoConfigureTestDatabase (Spring Boot 3.0.1 API)

Determines what type of existing DataSource bean can be replaced.

docs.spring.io

https://www.javatpoint.com/spring-boot-h2-database

 

Spring Boot H2 Database - javatpoint

Spring Boot H2 Database with Introduction, Features, Project, Starter Project Wizard, CLI, Application, Annotations, DM, Properties, Actuator, Thymeleaf View, JPA, JDBC etc

www.javatpoint.com

 

๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
ยซ   2025/02   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
๊ธ€ ๋ณด๊ด€ํ•จ