ํฐ์คํ ๋ฆฌ ๋ทฐ
[Database Test] Soft Delete ๋ฅผ H2 ํ์ฉํด์ ํ ์คํธํ๊ธฐ
Nickolodeon 2023. 1. 10. 17:35๐ 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
๋ง ์ฌ์ฉํ๋ ๊ฒ์ผ๋ก ์ถฉ๋ถํ๋ค.
- H2 ๊ฐ ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ํ
์คํธํ ๋
@DataJpaTest
์ด๋ ธํ ์ด์ ์ฐ๋ฉด ์ค์ deleted\_at
์ด ๋ณํ๋์ง๊น์ง๋ ํ์ธํ ์๊ฐ ์๊ณ ์ฌ์ค์ JPA ์ฟผ๋ฆฌ๊ฐ ๋ณํ๋๋์ง๊น์ง๋ง ๊ฒ์ฆํ๋ค๊ณ ์๊ฐํด์ผ ํ๋ค. replace
์๋ ์๋์ ๊ฐ์ด ์ธ ๊ฐ์ ์ต์ ์ด ์๋ค.-
- ๋ง์ฝ
deleted_at
์ด ๋ณํ๋์ง๊น์ง ํ์ธํ๋ ค๋ฉด@SpringBootTest
์@AutoConfigureTestDatabase
์ด๋ ธํ ์ด์ ์จ์ ๊ฒ์ฆํ ์ ์๊ณ replace = ์ดํ์ ์ด๋ค DB ์ฌ์ฉํ ๊ฑด์ง (NONE
์ด๋ฉด replace ์ํ๊ณ ํ์ฌ main application ์์ ์ฌ์ฉํ๋ DB๋ฅผ ์ฌ์ฉํ๋ค.) ๋ช ์ํด์ ํ ์คํธ๊ฐ ๊ฐ๋ฅํ๋ค.
๐ ์ถ์ฒ
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
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
'Database' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[MySQL] date vs datetime vs timestamp (2) | 2022.12.03 |
---|---|
[JPA] JOIN & N+1 ๋ฌธ์ (2) | 2022.11.26 |
[Hibernate] Session ์ด๋? (0) | 2022.11.26 |
[Spring Data JPA] LazyInitializationException 2๋ถ: Hibernate ์ List ๊ตฌํ ๋ฐฉ์ & ์ง์ฐ ๋ก๋ฉ (0) | 2022.11.26 |
[Spring Data JPA] LazyInitializationException (0) | 2022.11.26 |
- Total
- Today
- Yesterday
- ์๊ณ ๋ฆฌ์ฆ
- ci/cd
- spring
- ์ฝํ
- N+1
- JPQL
- ์ธ์ฆ/์ธ๊ฐ
- JPA
- JOIN FETCH
- ํ๋ก๊ทธ๋๋จธ์ค
- Jackson
- DeSerialization
- ์ญ์ง๋ ฌํ
- docker
- ์ค์๊ฐ๋ฐ์ดํฐ
- FCM
- ์ง์ฐ ๋ก๋ฉ
- json web token
- @RequestBody
- Firebase
- DTO
- google cloud
- Spring Boot
- gitlab
- ๊ธฐ์ง๊ตญ ์ค์น
- ๋์ปค
- LazyInitializationException
- Java Data Types
- ๊น๋ฉ
- ๊ฐ์ ์๋ฒ
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |