[์Šคํ”„๋ง DB 2ํŽธ] - 5. ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ธฐ์ˆ  - ํ…Œ์ŠคํŠธ

2023. 4. 8. 18:29ยทSpring/Spring DB

 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™

์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ž˜ ์ €์žฅํ•˜๊ณ  ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ํ•„์š”ํ•˜๋‹ค.

 

ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์—์„œ๋„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘์†ํ•  ์ˆ˜ ์žˆ๊ฒŒ

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
'Spring/Spring DB' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [์Šคํ”„๋ง DB 2ํŽธ] - 6. MyBatis
  • [์Šคํ”„๋ง DB 2ํŽธ] - 4. JdbcTemplate - SimpleJdbcInsert
  • [์Šคํ”„๋ง DB 2ํŽธ] - 3. JdbcTemplate - ์ด๋ฆ„ ์ง€์ • ํŒŒ๋ผ๋ฏธํ„ฐ
  • [์Šคํ”„๋ง DB 2ํŽธ] - 2. JdbcTemplate - ๋™์  ์ฟผ๋ฆฌ ๋ฌธ์ œ
hello_u
hello_u
  • hello_u
    ๐Ÿ˜œ
    hello_u
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๐Ÿ˜œ (345)
      • Hardware (2)
        • BMC (2)
      • Spring (109)
        • Spring ์ž…๋ฌธ (20)
        • Spring ๊ธฐ๋ณธ (27)
        • Spring MVC (18)
        • Spring DB (22)
        • Spring JPA ๊ธฐ๋ณธ (16)
        • Spring JPA ํ™œ์šฉ (6)
      • Develop (27)
        • DB (8)
        • JAVA (4)
        • Web (2)
        • Python (7)
        • OSS (2)
        • Git (2)
        • API (2)
      • Algorithm (155)
        • CodeUp ๊ธฐ์ดˆ (44)
        • ํŒŒ์ด์ฌ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ (64)
        • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค (4)
        • SWEA (30)
        • Softeer (10)
        • BOJ (2)
      • CS (9)
        • ์ปดํ“จํ„ฐ์ผ๋ฐ˜ (3)
        • ์šด์˜์ฒด์ œ (3)
        • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (0)
        • ์ •๋ณดํ†ต์‹  (1)
        • ์ž๋ฃŒ๊ตฌ์กฐ (1)
        • ์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™ (1)
        • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด (0)
        • ์ตœ์‹  ๋””์ง€ํ„ธ, ์ผ๋ฐ˜์ƒ์‹ (0)
      • ์ž๊ฒฉ์ฆ (41)
        • ์ •๋ณด๋ณด์•ˆ๊ธฐ์‚ฌ (9)
        • ์ •๋ณด์ฒ˜๋ฆฌ๊ธฐ์‚ฌ (22)
        • ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ 1๊ธ‰ (3)
        • SQLD (7)
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
hello_u
[์Šคํ”„๋ง DB 2ํŽธ] - 5. ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ธฐ์ˆ  - ํ…Œ์ŠคํŠธ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”