๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๋
์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํด์ ๋ฐ์ดํฐ๋ฅผ ์ ์ ์ฅํ๊ณ ์กฐํํ ์ ์๋์ง ํ์ธํ๋ ๊ฒ์ด ํ์ํ๋ค.
ํ ์คํธ ์ผ์ด์ค์์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ํ ์ ์๊ฒ
test์ application.properties ๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์์ ํ์.
spring.profiles.active=test
spring.datasource.url=jdbc:h2:tcp://localhost/~/test
spring.datasource.username=sa
logging.level.org.springframework.jdbc=debug
ํ ์คํธ ์ผ์ด์ค๋ฅผ ์คํํ ๋ ๊ณผ๊ฑฐ์ ์๋ฒ๋ฅผ ์คํํ๋ฉด์ ์ ์ฅํ๋ ๋ฐ์ดํฐ๊ฐ ๋ณด๊ด๋์ด ์๋ค.
์ด ๋ฐ์ดํฐ๊ฐ ํ์ฌ ํ ์คํธ์ ์ํฅ์ ์ค๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ถ๋ฆฌ
๋ก์ปฌ์์ ์ฌ์ฉํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ์ ํ ์คํธ์์ ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ฉด
ํ
์คํธ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ํ ์คํธ๋ฅผ ๋ค๋ฅธ ํ๊ฒฝ๊ณผ ์ฒ ์ ํ๊ฒ ๋ถ๋ฆฌํด์ผ ํ๋ค.
๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ํ ์คํธ ์ ์ฉ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ณ๋๋ก ์ด์ํ๋ ๊ฒ์ด๋ค.
H2 ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฉ๋์ ๋ฐ๋ผ 2๊ฐ์ง๋ก ๊ตฌ๋ถํ๋ฉด ๋๋ค.
jdbc:h2:tcp://localhost/~/test : local์์ ์ ๊ทผํ๋ ์๋ฒ ์ ์ฉ ๋ฐ์ดํฐ๋ฒ ์ด์ค
jdbc:h2:tcp://localhost/~/testcase : test ์ผ์ด์ค์์ ์ฌ์ฉํ๋ ์ ์ฉ ๋ฐ์ดํฐ๋ฒ ์ด์ค
์ ์ ์ ๋ณด ๋ณ๊ฒฝ
spring.profiles.active=test
spring.datasource.url=jdbc:h2:tcp://localhost/~/testcase
spring.datasource.username=sa
test ์ ์๋ application.properties ๋ฅผ๋ณ๊ฒฝํ๋ฉด ๋๋ค.
ํ ์คํธ์์ ๋งค์ฐ ์ค์ํ ์์น
- ํ ์คํธ๋ ๋ค๋ฅธ ํ ์คํธ์ ๊ฒฉ๋ฆฌํด์ผ ํ๋ค.
- ํ ์คํธ๋ ๋ฐ๋ณตํด์ ์คํํ ์ ์์ด์ผ ํ๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ถ๋ฆฌํ์ฌ ๊ฒฉ๋ฆฌํ์๋ค.
์ฒ์์๋ ์คํ์ ์ฑ๊ณตํ๋ค. ํ์ง๋ง ํ ์คํธ๋ฅผ ๋ค์ ์คํํ๋ฉด ํ ์คํธ์ ์คํจํ๋ค.
ํ
์คํธ๋ฅผ 2๋ฒ์งธ ์คํํ ๋ ์คํจํ๋ ์ด์ ๋
์ฒ์ ํ
์คํธ๋ฅผ ์คํํ ๋ ์ ์ฅํ ๋ฐ์ดํฐ๊ฐ ๊ณ์ ๋จ์์๊ธฐ ๋๋ฌธ์ ๋๋ฒ์งธ ํ
์คํธ์ ์ํฅ์ ์ค ๊ฒ์ด๋ค.
๋ฐ์ดํฐ ๋กค๋ฐฑ
ํธ๋์ญ์ ๊ณผ ๋กค๋ฐฑ ์ ๋ต
ํ ์คํธ๊ฐ ๋๋๊ณ ๋์ ํธ๋์ญ์ ์ ๊ฐ์ ๋ก ๋กค๋ฐฑํด๋ฒ๋ฆฌ๋ฉด ๋ฐ์ดํฐ๊ฐ ๊น๋ํ๊ฒ ์ ๊ฑฐ๋๋ค.
1. ํธ๋์ญ์ ์์
2. ํ ์คํธ A ์คํ
3. ํธ๋์ญ์ ๋กค๋ฐฑ
4. ํธ๋์ญ์ ์์
5. ํ ์คํธ B ์คํ
6. ํธ๋์ญ์ ๋กค๋ฐฑ
์ด๋ ๊ฒ ํธ๋์ญ์
์ ํ์ฉํ๋ฉด ํ
์คํธ๊ฐ ๋๋๊ณ ๋์ ๋ฐ์ดํฐ๋ฅผ ๊น๋ํ๊ฒ ์๋ ์ํ๋ก ๋๋๋ฆด ์ ์๋ค.
@BeforeEach
void beforeEach() {
// ํธ๋์ญ์
์์
status = transactionManager.getTransaction(new DefaultTransactionDefinition());
}
@AfterEach
void afterEach() {
//MemoryItemRepository ์ ๊ฒฝ์ฐ ์ ํ์ ์ผ๋ก ์ฌ์ฉ
if (itemRepository instanceof MemoryItemRepository) {
((MemoryItemRepository) itemRepository).clearStore();
}
// ํธ๋์ญ์
๋กค๋ฐฑ
transactionManager.rollback(status);
}
@BeforeEach
๊ฐ๊ฐ์ ํ ์คํธ ์ผ์ด์ค๋ฅผ ์คํํ๊ธฐ ์ง์ ์ ํธ์ถ๋๋ค. ๋ฐ๋ผ์ ์ฌ๊ธฐ์ ํธ๋์ญ์ ์ ์์
@AfterEach
๊ฐ๊ฐ์ ํ ์คํธ ์ผ์ด์ค๊ฐ ์๋ฃ๋ ์งํ์ ํธ์ถ๋๋ค. ๋ฐ๋ผ์ ์ฌ๊ธฐ์ ํธ๋์ญ์ ์ ๋กค๋ฐฑ

์ด์ ์ฌ๋ฌ๋ฒ ๋ฐ๋ณตํด์ ์คํํด๋ ํ ์คํธ๊ฐ ์ฑ๊ณตํ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
@Transactional
@Transactional
@SpringBootTest
class ItemRepositoryTest
์คํ๋ง์ ํ ์คํธ ๋ฐ์ดํฐ ์ด๊ธฐํ๋ฅผ ์ํด ํธ๋์ญ์ ์ ์ ์ฉํ๊ณ ๋กค๋ฐฑํ๋ ๋ฐฉ์์
@Transactional ์ ๋
ธํ
์ด์
ํ๋๋ก ๊น๋ํ๊ฒ ํด๊ฒฐํด์ค๋ค.
@Transactional ์ ๋ ธํ ์ด์ ์ ์๋ ๋ก์ง์ด ์ฑ๊ณต์ ์ผ๋ก ์ํ๋๋ฉด ์ปค๋ฐํ๋๋ก ๋์ํ๋ค.
๊ทธ๋ฐ๋ฐ @Transactional ์ ๋ ธํ ์ด์ ์ ํ ์คํธ์์ ์ฌ์ฉํ๋ฉด ์์ฃผ ํน๋ณํ๊ฒ ๋์ํ๋ค.

@Transactional ์ด ํ ์คํธ์ ์์ผ๋ฉด ์คํ๋ง์ ํ ์คํธ๋ฅผ ํธ๋์ญ์ ์์์ ์คํํ๊ณ ,
ํ ์คํธ๊ฐ ๋๋๋ฉด ํธ๋์ญ์ ์ ์๋์ผ๋ก ๋กค๋ฐฑ์์ผ ๋ฒ๋ฆฐ๋ค!
@Commit , @Rollback(value = false)
@Transactional ์ ํ ์คํธ์์ ์ฌ์ฉํ๋ฉด ํ ์คํธ๊ฐ ๋๋๋ฉด ๋ฐ๋ก ๋กค๋ฐฑ๋๊ธฐ ๋๋ฌธ์
ํ ์คํธ ๊ณผ์ ์์ ์ ์ฅํ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์ฌ๋ผ์ง๋ค.
๊ฐ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๊ฐ ์ ๋ณด๊ด๋์๋์ง ์ต์ข ๊ฒฐ๊ณผ๋ฅผ ๋์ผ๋ก ํ์ธํ๊ณ ์ถ์ ๋๋ ์๋ค.
@Commit
@Transactional
@SpringBootTest
class ItemRepositoryTestโ
์ด๋ด ๋๋ ๋ค์๊ณผ ๊ฐ์ด @Commit (๋๋ @Rollback(value = false) )
์ ํด๋์ค ๋๋ ๋ฉ์๋์ ๋ถ์ด๋ฉด ํ ์คํธ ์ข ๋ฃํ ๋กค๋ฐฑ ๋์ ์ปค๋ฐ์ด ํธ์ถ๋๋ค.
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-db-2/dashboard
์คํ๋ง DB 2ํธ - ๋ฐ์ดํฐ ์ ๊ทผ ํ์ฉ ๊ธฐ์ - ์ธํ๋ฐ | ๊ฐ์
๋ฐฑ์๋ ๊ฐ๋ฐ์ ํ์ํ DB ๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ ์ ํ์ฉํ๊ณ , ์์ฑํ ์ ์์ต๋๋ค. ์คํ๋ง DB ์ ๊ทผ ๊ธฐ์ ์ ์๋ฆฌ์ ๊ตฌ์กฐ๋ฅผ ์ดํดํ๊ณ , ๋ ๊น์ด์๋ ๋ฐฑ์๋ ๊ฐ๋ฐ์๋ก ์ฑ์ฅํ ์ ์์ต๋๋ค., - ๊ฐ์ ์๊ฐ | ์ธ
www.inflearn.com
'Spring > Spring DB' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์คํ๋ง DB 2ํธ] - 6. MyBatis (0) | 2023.04.09 |
---|---|
[์คํ๋ง DB 2ํธ] - 4. JdbcTemplate - SimpleJdbcInsert (0) | 2023.04.08 |
[์คํ๋ง DB 2ํธ] - 3. JdbcTemplate - ์ด๋ฆ ์ง์ ํ๋ผ๋ฏธํฐ (0) | 2023.04.08 |
[์คํ๋ง DB 2ํธ] - 2. JdbcTemplate - ๋์ ์ฟผ๋ฆฌ ๋ฌธ์ (0) | 2023.04.07 |
[์คํ๋ง DB 2ํธ] - 1. JdbcTemplate (0) | 2023.04.06 |