๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๊ฐœ๋ฐœ์ค‘/Java Persistence API (JPA)

JPA ( Java Persistence API ) Transaction

728x90
๋ฐ˜์‘ํ˜•

๐Ÿง ํŠธ๋žœ์žญ์…˜์ด๋ž€ ?

 

DB ์ƒํƒœ๋ฅผ ๋ณ€ํ™˜์‹œํ‚ค๋Š” ํ•˜๋‚˜์˜ ๋…ผ๋ฆฌ์  ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์ž‘์—…์˜ ๋‹จ์œ„ ๋˜๋Š” ํ•œ๊บผ๋ฒˆ์— ๋ชจ๋‘ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•  ์ผ๋ จ์˜ ์—ฐ์‚ฐ๋“ค

 

 

๐Ÿง JPA ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ์ˆ˜์ค€

 

ํŠธ๋žœ์žญ์…˜์ด ๋ณด์žฅํ•ด์•ผํ•˜๋Š” ACID ์ค‘ ๊ฒฉ๋ฆฌ์„ฑ๊ณผ ๊ด€๋ จ๋œ ๋‚ด์šฉ์ธ๋ฐ  ๊ฒฉ๋ฆฌ์„ฑ์„ ์™„๋ฒฝํžˆ ๋ณด์žฅํ•˜๋ ค๋ฉด ๋™์‹œ์„ฑ ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ์ด ๋งค์šฐ ๋‚˜๋น ์ง„๋‹ค.

์ด๋Ÿฐ ๋ฌธ์ œ๋กœ ์ธํ•ด ANSI ํ‘œ์ค€์€ ํŠธ๋žœ์žญ์…˜์˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์„ 4๋‹จ๊ณ„๋กœ ๋‚˜๋ˆ„์–ด ์ •์˜ํ–ˆ๋‹ค.

 

  1. Atomicity; ์›์ž์„ฑ
    1. ํŠธ๋žœ์žญ์…˜ ๋‚ด์˜ ์ž‘์—…๋“ค์€ ๋ชจ๋‘ ์„ฑ๊ณต ๋˜๋Š” ๋ชจ๋‘ ์‹คํŒจํ•œ๋‹ค.
  2. Consistency; ์ผ๊ด€์„ฑ
    1. ๋ชจ๋“  ํŠธ๋žœ์žญ์…˜์€ ์ผ๊ด€์„ฑ ์žˆ๋Š” DB ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•œ๋‹ค. 
    2. (ex: DB์˜ ๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ ์กฐ๊ฑด ํ•ญ์ƒ ๋งŒ์กฑ)
  3. Isolation; ๊ฒฉ๋ฆฌ์„ฑ
    1. ๋™์‹œ์— ์‹คํ–‰๋˜๋Š” ํŠธ๋žœ์žญ์…˜๋“ค์€ ์„œ๋กœ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋Š”๋‹ค. 
    2. (ex: ๋™์‹œ์— ๊ฐ™์€ ๋ฐ์ดํ„ฐ ์ˆ˜์ • X)
  4. Durability; ์ง€์†์„ฑ
    1. ํŠธ๋žœ์žญ์…˜์ด ์„ฑ๊ณต์ ์œผ๋กœ ๋๋‚˜๋ฉด ๊ทธ ๊ฒฐ๊ณผ๋Š” ํ•ญ์ƒ ๊ธฐ๋ก๋˜์–ด์•ผ ํ•œ๋‹ค.

 

๐Ÿง ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ํฌ์ธํŠธ 3

๋‚ฎ์€ ๋‹จ๊ณ„์˜ ํŠธ๋žœ์žญ์…˜ ๊ณ ๋ฆฝํ™” ์ˆ˜์ค€ ์ด์šฉ์‹œ ๋ฐœ์ƒํ•˜๋Š” ํ˜„์ƒ 3๊ฐ€์ง€

 

  1. Nonrepeatble Read
    1. ํŠธ๋žœ์žญ์…˜์ด ์ˆ˜ํ–‰์ค‘์ธ๋ฐ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ์ฝ๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•ด์„œ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์ง€๋Š” ๊ฒƒ.
    2. ํ•œ ํŠธ๋žœ์žญ์…˜ ๋‚ด์—์„œ ๊ฐ™์€ ์ฟผ๋ฆฌ๋ฅผ ๋‘ ๋ฒˆ ์ˆ˜ํ–‰ํ•  ๋•Œ 
      ๊ทธ ์‚ฌ์ด์— ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ๊ฐ’์„ ์ˆ˜์ • ๋˜๋Š” ์‚ญ์ œํ•จ์œผ๋กœ์จ 
      ๋‘ ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ๊ฐ€ ์ƒ์ดํ•˜๊ฒŒ ๋‚˜ํƒ€๋‚˜๋Š” ๋น„ ์ผ๊ด€์„ฑ ๋ฐœ์ƒํ•œ๋‹ค.
  2. Phantom Read
    1. ๋™์ผํ•œ ์ฟผ๋ฆฌ๊ฐ€ ๋‹ค๋ฅธ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ 
    2. ํ•œ ํŠธ๋žœ์žญ์…˜ ์•ˆ์—์„œ ์ผ์ • ๋ฒ”์œ„์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ๋‘ ๋ฒˆ ์ด์ƒ ์ฝ์„ ๋•Œ, 
      ์ฒซ ๋ฒˆ์งธ ์ฟผ๋ฆฌ์—์„œ ์—†๋˜ ๋ ˆ์ฝ”๋“œ๊ฐ€ ๋‘ ๋ฒˆ์งธ ์ฟผ๋ฆฌ์—์„œ ๋‚˜ํƒ€๋‚˜๋Š” ํ˜„์ƒ. 
      ์ด๋Š” ํŠธ๋žœ์žญ์…˜ ๋„์ค‘ ์ƒˆ๋กœ์šด ๋ ˆ์ฝ”๋“œ๊ฐ€ ์‚ฝ์ž…๋˜๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜ํƒ€๋‚œ๋‹ค.
  3. Dirty Read
    1. ๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์•„์ง ๋ฏธ์™„์„ฑ์ธ๋ฐ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—์„œ ์ฝ์–ด๊ฐ€๋Š” ๊ฒƒ.
    2. T1 ํŠธ๋žœ์žญ์…˜์—์„œ ์ฝ๊ธฐํ•˜๊ณ  ์‹คํ–‰์ด ๋๋‚˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ 
      T2 ํŠธ๋žœ์žญ์…˜์— ์˜ํ•ด ๋ณ€๊ฒฝ๋œ ์‚ฌํ•ญ์„ ๋ณด๊ฒŒ ๋˜๋Š” ๊ฒฝ์šฐ๋ฅผ dirty read ๋ผ๊ณ  ํ•œ๋‹ค. 
      ๋งŒ์•ฝ T2 ํŠธ๋žœ์žญ์…˜์—์„œ ๊ทธ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ rollbackํ•˜๋ฉด 
      ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์€ T1 ํŠธ๋žœ์žญ์…˜์€ Dirty ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

 

๐Ÿง ๊ฒฉ๋ฆฌ์ˆ˜์ค€

 

์•„๋ž˜๋กœ ๋‚ด๋ ค ๊ฐˆ์ˆ˜๋ก ๋™์‹œ์„ฑ์ด ๋†’์•„์ง€๋Š” ๋Œ€์‹  ์†๋„๊ฐ€ ๋Š๋ ค์ง„๋‹ค.  ( lv.0 -> lv.3)

์œ„๋กœ ์˜ฌ๋ผ ๊ฐˆ์ˆ˜๋ก ๋™์‹œ์„ฑ์ด ๋–จ์–ด์ง€๋Š” ๋Œ€์‹  ์†๋„๊ฐ€ ๋นจ๋ผ์ง„๋‹ค.  (lv.3 -> lv.0)

 

  1. READ UNCOMMITED (lv.0)
    • ์ปค๋ฐ‹๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋„ ์ฝ์„ ์ˆ˜ ์žˆ์Œ
      • AํŠธ๋žœ์žญ์…˜์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ ค๋‹ค ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ด์„œ Rollback์„ ํ–ˆ๋‹ค๊ณ  ์น˜๋ฉด AํŠธ๋žœ์žญ์…˜์ด ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•œ B ํŠธ๋žœ์žญ์…˜์€ ์ž˜๋ชป๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์žˆ์„ ์ˆ˜๊ฐ€ ์žˆ๋‹ค. Dirty Read, Dirty Write์ด ๊ฐ€๋Šฅํ•จ
      • Dirty Read๋Š” ๋ฐฉ์ง€ X, Noorepeatable read๋ฐฉ์ง€ X, Phantom Read ๋ฐฉ์ง€ X
  2. READ COMMITED (lv.1)
    • ์ปค๋ฐ‹๋œ ๋ฐ์ดํ„ฐ๋งŒ ๋ถˆ๋Ÿฌ์˜จ๋‹ค. (= ๋ฐ˜๋ณตํ•ด์„œ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์—†๋‹ค) 
      • SELECT ๋ฌธ์žฅ์ด ์ˆ˜ํ–‰๋˜๋Š” ๋™์•ˆ ํ•ด๋‹น ๋ฐ์ดํ„ฐ์— Shared Lock(์ฝ๊ธฐ ๊ฐ€๋Šฅ, ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€)์ด ๊ฑธ๋ฆฌ๋Š” ๋ ˆ๋ฒจ
        • ์–ด๋– ํ•œ ์‚ฌ์šฉ์ž๊ฐ€ A๋ผ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ B๋ผ๋Š” ๋ฐ์ดํ„ฐ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๋™์•ˆ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋Š” ํ•ด๋‹น ๋ฐ์ดํ„ฐ(B)์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
      • Dirty Read ๋ฐฉ์ง€ O , Non-Repeatable Read ๋ฐฉ์ง€ X
  3. REPEATABLE READ (lv.2)
    • ํŠธ๋žœ์žญ์…˜ ๋™์•ˆ์—๋Š” ํ•œ๋ฒˆ ์กฐํšŒํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ„์† ์กฐํšŒํ•ด๋„ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚˜์˜ค์ง€๋งŒ, ๋งŒ์•ฝ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•œ ๊ฒฝ์šฐ ๊ธฐ์กด ํŠธ๋žœ์žญ์…˜์—์„œ ๋ฐ˜๋ณต ์กฐํšŒํ•˜๋ฉด ๊ฒฐ๊ณผ ์ง‘ํ•ฉ์ด ์ƒˆ๋กœ ์ถ”๊ฐ€๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•œ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋œ๋‹ค.  
      • Dirty Read ๋ฐฉ์ง€ O,  Non-Repeatable Read ๋ฐฉ์ง€ O, Phantom Read ๋ฐฉ์ง€ X 
  4. SERIALIZABLE (lv.3)
    • ๋ชจ๋“  ํŠธ๋žœ์žญ์…˜์„ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰ํ•œ๋‹ค.
    • Dirty Read ๋ฐฉ์ง€ O,  Non-Repeatable Read ๋ฐฉ์ง€ O, Phantom Read ๋ฐฉ์ง€ O

 

 

JPA๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์„ READ_COMMITED๋กœ ๊ฐ€์ •ํ•˜๋Š”๋ฐ

๋งŒ์•ฝ ์ผ๋ถ€ ๋กœ์ง์— ๋” ๋†’์€ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ด ํ•„์š”ํ•˜๋ฉด ๋น„๊ด€์  ๋ฝ๊ณผ ๋‚™๊ด€์  ๋ฝ ์ค‘์— ์„ ํƒ์„ ํ•˜์—ฌ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

JPA์˜ ์ถ”์ฒœํ•˜๋Š” ์ „๋žต์€ READ_COMMITTED  + ๋‚™๊ด€์  ๋ฝ ์ด๋‹ค.

 

  • ๋‚™๊ด€์  ๋ฝ
    • ํŠธ๋žœ์žญ์…˜ ๋Œ€๋ถ€๋ถ„์€ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉฐ, JPA๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ฒ„์ „ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•œ๋‹ค. (์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‹จ ๋ ˆ๋ฒจ)
    • ํŠธ๋žœ์žญ์…˜์„ ์ปค๋ฐ‹ํ•˜๊ธฐ ์ „๊นŒ์ง€๋Š” ํŠธ๋žœ์žญ์…˜์˜ ์ถฉ๋Œ์„ ์•Œ ์ˆ˜ ์—†๋‹ค๋Š” ํŠน์ง•์ด ์žˆ๋‹ค.
    • JPA์—์„œ ์ œ๊ณตํ•˜๋Š” @Version ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ตœ์ดˆ ์ปค๋ฐ‹๋งŒ ์ธ์ •๋˜์–ด ๋‘๋ฒˆ์งธ ์ปค๋ฐ‹์—์„  ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค. 
  • ๋น„๊ด€์  ๋ฝ
    • ํŠธ๋žœ์žญ์…˜ ๊ฐ„ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์—ฌ ์šฐ์„  ๋ฝ์„ ๊ฑด๋‹ค, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ฝ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•œ๋‹ค. 
    • ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ์ฆ‰์‹œ ํŠธ๋žœ์žญ์…˜ ์ถฉ๋Œ์„ ๊ฐ์ง€ํ•˜๋ฉฐ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.
    • ๋น„๊ด€์  ๋ฝ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฝ์„ ํš๋“ํ•  ๋•Œ๊นŒ์ง€ ํŠธ๋žœ์žญ์…˜์ด ๋Œ€๊ธฐํ•œ๋‹ค. ๋ฌดํ•œ์ • ๊ธฐ๋‹ค๋ฆด ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ํƒ€์ž„์•„์›ƒ ์‹œ๊ฐ„์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค.

 

JPA์˜ ์ถ”์ฒœํ•˜๋Š” ์ „๋žต์€ READ_COMMITTED  + ๋‚™๊ด€์  ๋ฝ ์ด๋‹ค.

728x90
๋ฐ˜์‘ํ˜•