Bibi's DevLog ๐Ÿค“๐ŸŽ

[Spring] @Transactional, ํŠธ๋žœ์žญ์…˜ ๋ณธ๋ฌธ

๐Ÿ–ฅ BE ๋ฐฑ์—”๋“œ/Spring ์Šคํ”„๋ง

[Spring] @Transactional, ํŠธ๋žœ์žญ์…˜

๋น„๋น„ bibi 2021. 4. 30. 20:01

@Transactional, ํŠธ๋žœ์žญ์…˜

@Transactional
public void create(CardDto cardDto) {
    Card card = new Card(cardDto);
    cardRepository.save(card);
}

@Transactional, ํŠธ๋žœ์žญ์…˜ ์ฐธ๊ณ 

  • ์—ฌ๋Ÿฌ ์ฟผ๋ฆฌ๋ฅผ ๋…ผ๋ฆฌ์ ์œผ๋กœ ํ•˜๋‚˜์˜ ์ž‘์—…์œผ๋กœ ๋ฌถ์–ด ์ฃผ๋Š” ๊ฒƒ.

  • ์˜ˆ์‹œ (1000์› ์†ก๊ธˆํ•˜๊ธฐ)

    • A ๊ณ„์ขŒ์—์„œ -1000์›, B๊ณ„์ขŒ์—์„œ +1000์›์ด ๋˜์–ด์•ผ ํ•œ๋‹ค.

    • ์‹คํ–‰ ์ฟผ๋ฆฌ๋Š” UPDATE๋ฌธ์œผ๋กœ ๊ฐ๊ฐ A๊ณ„์ขŒ-1000, B๊ณ„์ขŒ +1000์›์ด ๋œ๋‹ค.

    • ๊ทธ๋Ÿฐ๋ฐ ๋งŒ์•ฝ ๋‘ ์ฟผ๋ฆฌ๋ฌธ ์‚ฌ์ด์—์„œ ์„œ๋ฒ„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด?

      ์ถœ๊ธˆ(-1000)์€ ๋˜์—ˆ๋Š”๋ฐ ์ž…๊ธˆ(+1000)์€ ๋˜์ง€ ์•Š๋Š” ํฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

    • ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋‘ UPDATE ์ฟผ๋ฆฌ๋ฅผ ํ•œ ์ž‘์—…์œผ๋กœ ๋ฌถ์–ด, '๋ชจ๋“  ์ž‘์—…์ด ์‹คํ–‰๋˜๊ฑฐ๋‚˜' or '์•„๋ฌด ์ž‘์—…๋„ ์‹คํ–‰๋˜์ง€ ์•Š๊ฑฐ๋‚˜' ์˜ ๋‘ ์ƒํ™ฉ๋งŒ ๋ฐœ์ƒํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ํŠธ๋žœ์žญ์…˜์ด๋ผ๋Š” ๊ฐœ๋…์ด๋‹ค.

  • ํŠธ๋žœ์žญ์…˜์€..

    • ์‚ฌ์šฉ์ž ๋ฐ ์‹œ์Šคํ…œ์˜ ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋”๋ผ๋„, DB์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๋ณด์žฅํ•ด ์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
  • ''์ปค๋ฐ‹ ํ˜น์€ ๋กค๋ฐฑ''

    • ๊ฐ๊ฐ '๋ชจ๋“  ์ž‘์—…์ด ์‹คํ–‰๋˜๊ฑฐ๋‚˜' or '์•„๋ฌด ์ž‘์—…๋„ ์‹คํ–‰๋˜์ง€ ์•Š๊ฑฐ๋‚˜' ์— ๋Œ€์‘ํ•œ๋‹ค.
    • ์ปค๋ฐ‹ : ํŠธ๋žœ์žญ์…˜์œผ๋กœ ๋ฌถ์ธ ๋ชจ๋“  ์ฟผ๋ฆฌ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์‹คํ–‰๋˜์–ด, ๊ทธ ๊ฒฐ๊ณผ๊ฐ€ DB์— ๋ฐ˜์˜๋˜๋Š” ๊ฒƒ
    • ๋กค๋ฐฑ : ํŠธ๋žœ์žญ์…˜์˜ ๋ชจ๋“  ์ฟผ๋ฆฌ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ์ทจ์†Œํ•˜๊ณ , DB๋ฅผ ํŠธ๋žœ์žญ์…˜ ์ด์ „ ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆฌ๋Š” ๊ฒƒ
  • ํŠธ๋žœ์žญ์…˜์˜ ์„ฑ์งˆ, ACID

    • ํŠธ๋žœ์žญ์…˜์ด ์•ˆ์ „ํ•˜๊ฒŒ ์ˆ˜ํ–‰๋œ๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ ์„ฑ์งˆ
    • A - Atomicity(์›์ž์„ฑ)
      • ํŠธ๋žœ์žญ์…˜์€ DB์— ๋ชจ๋‘ ๋ฐ˜์˜๋˜๊ฑฐ๋‚˜ ์ „ํ˜€ ๋ฐ˜์˜๋˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค. (ํŠธ๋žœ์žญ์…˜์˜ ์ค‘๊ฐ„ ์ƒํƒœ๋ฅผ DB์— ๋ฐ˜์˜ํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค)
    • C - Consistency(์ผ๊ด€์„ฑ)
      • ํŠธ๋žœ์žญ์…˜ ์ž‘์—… ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋Š” ํ•ญ์ƒ ์ผ๊ด€์„ฑ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
      • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ํ•ญ์ƒ ์ผ๊ด€๋œ ์ƒํƒœ๋กœ ์œ ์ง€๋˜์–ด์•ผ ํ•œ๋‹ค.
      • ํŠธ๋žœ์žญ์…˜์˜ ์‹คํ–‰ ๊ฒฐ๊ณผ๊ฐ€ DB์˜ ์กฐ๊ฑด์„ ์œ„๋ฐฐํ•œ๋‹ค๋ฉด ํ•ด๋‹น ํŠธ๋žœ์žญ์…˜์€ ์ข…๋ฃŒ๋˜์–ด์•ผ ํ•œ๋‹ค.
    • I - Isolation(๋…๋ฆฝ์„ฑ)
      • ํŠธ๋žœ์žญ์…˜ ๊ฐ„์—๋Š” ๋…๋ฆฝ์„ฑ์ด ๋ณด์žฅ๋˜์–ด์•ผ ํ•œ๋‹ค.
      • ๋™์‹œ ์‹คํ–‰ ๋˜๋Š” ํŠธ๋žœ์žญ์…˜๋“ค์—์„œ, ์–ด๋–ค ํŠธ๋žœ์žญ์…˜๋„ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์„ ์˜ ์—ฐ์‚ฐ์— ๋ผ์–ด๋“ค ์ˆ˜ ์—†๋‹ค
    • D - Durrability(์ง€์†์„ฑ)
      • ํŠธ๋žœ์žญ์…˜์ด ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜์—ˆ์œผ๋ฉด ๊ฒฐ๊ณผ๋Š” ์˜๊ตฌํžˆ ๋ฐ˜์˜๋˜์–ด์•ผ ํ•œ๋‹ค.