Skip to content

Latest commit

ย 

History

History
56 lines (31 loc) ยท 3.23 KB

Transaction.md

File metadata and controls

56 lines (31 loc) ยท 3.23 KB

[ํŠธ๋žœ์žญ์…˜]

  • ํ˜„๋Œ€์˜ ์›น ๋ณด์•ˆ์— ์žˆ์–ด์„œ ๋งค์šฐ ์ค‘์š”ํ•œ ์—ญํ• ์„ ์ฐจ์ง€

  • DB์™€ JAVA์–ธ์–ด๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ๊ณผ์ •์— ์›์ž์„ฑ์„ ๋ถ€์—ฌํ•˜๋Š” ์ˆ˜๋‹จ.

  • ์–ด๋–ค ์ž‘์—… ํ”„๋กœ์„ธ์Šค๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด ์‹คํ–‰ ์ค‘ ํ•˜๋‚˜์˜ ์ž‘์—…์ด๋ผ๋„ ์‹คํŒจํ•˜๋ฉด ๋ชจ๋‘ ์‹คํŒจ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ๊ณ  ์ „์ฒด ์ž‘์—…์ด ์„ฑ๊ณตํ•˜๋ฉด ์„ฑ๊ณต ์ฒ˜๋ฆฌ๋ฅผ ํ•ด ์ฃผ๋Š” ๊ฒƒ

  • ACID : DB ํŠธ๋žœ์žญ์…˜์ด ์•ˆ์ „ํ•˜๊ฒŒ ์ˆ˜ํ–‰๋œ๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ ์„ฑ์งˆ

    • ์›์ž์„ฑ, ์ผ๊ด€์„ฑ, ๊ณ ๋ฆฝ์„ฑ, ์ง€์†์„ฑ ์˜ ์„ฑ์งˆ์ด ์žˆ์Œ
  • Transaction์˜ ๊ธฐ๋ณธ ๋ฐฉ๋ฒ•

    • Transaction์€ 2๊ฐœ ์ด์ƒ์˜ ์ฟผ๋ฆฌ๋ฅผ ํ•˜๋‚˜์˜ ์ปค๋„ฅ์…˜์œผ๋กœ ๋ฌถ์–ด DB์— ์ „์†กํ•˜๊ณ , ์ด ๊ณผ์ •์—์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ์ž๋™์œผ๋กœ ๋ชจ๋“  ๊ณผ์ •์„ ์›๋ž˜๋Œ€๋กœ ๋˜๋Œ๋ ค ๋†“๋Š”๋‹ค.
    • ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด Transaction์€ ํ•˜๋‚˜ ์ด์ƒ์˜ ์ฟผ๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ ๋™์ผํ•œ Connection ๊ฐ์ฒด๋ฅผ ๊ณต์œ ํ•˜๋„๋ก ํ•œ๋‹ค.

[์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์˜ ํŠธ๋žœ์žญ์…˜]

  • JTA, JDBC, Hivernate, JPA, JDO ๊ฐ™์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํŠธ๋žœ์žญ์…˜ API ๊ฐ„์— ์ผ๊ด€์„ฑ์žˆ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ ์ œ๊ณต

  • Spring์€ ์ฝ”๋“œ ๊ธฐ๋ฐ˜์˜ ํŠธ๋žœ์žญ์…˜(Programmatic Transaction) ์ฒ˜๋ฆฌ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์„ ์–ธ์  ํŠธ๋žœ์žญ์…˜(Declarative Transaction)์„ ์ง€์›

  • ์„ ์–ธ์  ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ์ง€์›

    • ๋‹จ ๋ช‡์ค„์˜ ์ฝ”๋“œ ๋งŒ์œผ๋กœ ๋‹ค์ด๋‚˜๋ฏน ํ”„๋ก์‹œ์™€ AOP๋ผ๋Š” ๊ธฐ์ˆ ์„ ํ†ตํ•ด ์ธํ„ฐํŽ˜์ด์Šค, ํด๋ž˜์Šค, ๋ฉ”์„œ๋“œ๊นŒ์ง€ ์„ธ๋ถ„ํ™”ํ•˜์—ฌ ํŠธ๋žœ์žญ์…˜์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ Annotation๊ธฐ์ˆ ๋กœ @Transactional ์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์œผ๋กœ๋„ ํŠธ๋žœ์žญ์…˜ ์„ค์ •์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•ด์ค€๋‹ค.
    • Spring์ด ์ œ๊ณตํ•˜๋Š” ํŠธ๋žœ์žญ์…˜ ํ…œํ”Œ๋ฆฟ ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•˜๊ฑฐ๋‚˜ ์„ค์ •ํŒŒ์ผ, ์–ด๋…ธํ…Œ์ด์…˜์„ ์ด์šฉํ•ด์„œ ํŠธ๋žœ์žญ์…˜์˜ ๋ฒ”์œ„ ๋ฐ ๊ทœ์น™์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • Spring์—์„œ๋Š” ์ฃผ๋กœ ์„ ์–ธ์  ํŠธ๋žœ์žญ์…˜์„ ์ด์šฉํ•˜๋Š”๋ฐ, tx:adviceํƒœ๊ทธ ๋˜๋Š” @Transactional ์–ด๋…ธํ…Œ์ด์…˜์„ ์ด์šฉํ•˜๋Š”๋ฐ, ํ€ด๋ฆฌ๋ฌธ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณผ์ •์—์„œ ์—๋Ÿฌ๊ฐ€ ๋‚ฌ์„ ๊ฒฝ์šฐ ์ž๋™์œผ๋กœ Rollback ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ค€๋‹ค.
      • Rollback์ด๋ž€?

        • ์˜ˆ๋ฅผ๋“ค์–ด ์นœ๊ตฌ์—๊ฒŒ ์ธํ„ฐ๋„ท ๋ฑ…ํ‚น์œผ๋กœ 10,000์›์„ ์†ก๊ธˆํ• ๊ฒฝ์šฐ ๋‚˜์˜ ๊ณ„์ขŒ์—์„œ 10,000์›์„ ์ค„์ด๊ณ  ์นœ๊ตฌ์˜ ๊ณ„์ขŒ์— 10,000์›์„ ์ฆ๊ฐ€์‹œ์ผœ์•ผ ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์•Œ ์ˆ˜ ์—†๋Š” ์˜ค๋ฅ˜๋กœ ์ธํ•ด ๋‚˜์˜ ๊ณ„์ขŒ์—์„œ๋Š” 10,000์›์ด ์ค„์—ˆ์ง€๋งŒ ์นœ๊ตฌ ๊ณ„์ขŒ์—๋Š” 10,000์›์ด ์ฆ๊ฐ€๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด? ๋‚˜์˜ 10,000์›์€ ๊ทธ๋ƒฅ ๊ณต์ค‘์œผ๋กœ ์ฆ๋ฐœํ•ด๋ฒ„๋ฆฌ๋Š” ์‚ฌ๊ณ ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
          ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ธฐ์ง€ ์•Š๋„๋ก ์ค‘๊ฐ„์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋‹ค์‹œ ์ฒ˜์Œ๋ถ€ํ„ฐ ์†ก๊ธˆ์„ ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด rollback์ด๋‹ค.


  • ํŠธ๋žœ์žญ์…˜ ๋™์ž‘ ์›๋ฆฌ

    1. caller๊ฐ€ target method๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋จผ์ € AOP proxy๊ฐ€ ํ˜ธ์ถœ๋จ
    2. Transaction Advisor๋Š” ์ƒˆ๋กœ์šด ํŠธ๋žœ์žญ์…˜์„ ์ƒ์„ฑํ•จ
    3. Custom interceptor๋“ค์ด transaction advisor ์ „ ํ›„๋กœ ํ˜ธ์ถœ๋จ
    4. Target ๋น„์ฆˆ๋‹ˆ์Šค ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋จ
    5. Transaction Advisor๋Š” ์ปค๋ฐ‹ ๋˜๋Š” ๋กค๋ฐฑ์„ ๊ฒฐ์ •ํ•˜๊ณ  ํ˜ธ์ถœ์ž์—๊ฒŒ ๋„˜๊น€
    6. AOP Proxy๋Š” ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์•„ Caller์—๊ฒŒ ๋„˜๊น€