Transactional 정리

· β˜• 2 min read · πŸ‘€... views

Q. μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬μ—μ„œλŠ” νŠΈλžœμž­μ…˜μ„ μ²˜λ¦¬ν•  λ•Œ @Trasnactional 을 μ‚¬μš©ν•˜λŠ”λ°, 이 @Transactional μ–΄λ…Έν…Œμ΄μ…˜μ—λŠ” 7가지 μ „νŒŒ 방법이 μžˆλ‹€, μ–΄λ–€ 것듀이 μžˆλŠ”κ°€?

A. @Transactional μ–΄λ…Έν…Œμ΄μ…˜μ„ μ‚¬μš©ν•˜λ©΄ 적용된 클래슀 λ˜λŠ” λ©”μ†Œλ“œμ— νŠΈλžœμž­μ…˜μ΄ μ μš©λœλ‹€. λ”°λΌμ„œ ν΄λž˜μŠ€μ— ν•  것인지, λ©”μ†Œλ“œμ— ν•  것인지 νŒλ‹¨μ„ 잘 ν•΄μ•Ό ν•œλ‹€. 7가지 Propagation(μ „νŒŒ) 방법은

  1. REQUIRED : λΆ€λͺ¨ νŠΈλžœμž­μ…˜ λ‚΄μ—μ„œ μ‹€ν–‰ν•˜λ©° λΆ€λͺ¨ νŠΈλžœμž­μ…˜μ΄ 없을 경우 μƒˆλ‘œμš΄ νŠΈλžœμž­μ…˜μ„ μƒμ„±ν•œλ‹€.
  2. REQUIREDS_NEW : λΆ€λͺ¨ νŠΈλžœμž­μ…˜μ„ λ¬΄μ‹œν•˜κ³  무쑰건 μƒˆλ‘œμš΄ νŠΈλžœμž­μ…˜μ΄ μƒμ„±λœλ‹€.
  3. SUPPORT : λΆ€λͺ¨ νŠΈλžœμž­μ…˜ λ‚΄μ—μ„œ μ‹€ν–‰ν•˜λ©° λΆ€λͺ¨ νŠΈλžœμž­μ…˜μ΄ 없을 경우 nontransactionally 둜 μ‹€ν–‰λœλ‹€.
  4. MANDATORY : λΆ€λͺ¨ νŠΈλžœμž­μ…˜ λ‚΄μ—μ„œ μ‹€ν–‰λ˜λ©° λΆ€λͺ¨ νŠΈλžœμž­μ…˜μ΄ 없을 경우 μ˜ˆμ™Έκ°€ λ°œμƒν•œλ‹€.
  5. NOT_SUPPORT : nontransactionally 둜 μ‹€ν–‰λ˜λ©° λΆ€λͺ¨ νŠΈλžœμž­μ…˜ λ‚΄μ—μ„œ μ‹€ν–‰λœ 경우 μΌμ‹œ μ •μ§€ν•œλ‹€.
  6. NEVER : nontransactionally 둜 μ‹€ν–‰λ˜λ©° λΆ€λͺ¨ νŠΈλžœμž­μ…˜μ΄ μ‘΄μž¬ν•œλ‹€λ©΄ μ˜ˆμ™Έκ°€ λ°œμƒν•œλ‹€.
  7. NESTED : ν•΄λ‹Ή λ©”μ„œλ“œκ°€ λΆ€λͺ¨ νŠΈλžœμž­μ…˜μ—μ„œ 진행될 경우 λ³„κ°œλ‘œ μ»€λ°‹λ˜κ±°λ‚˜ 둀백될 수 μžˆλ‹€. λ‘˜λŸ¬μ‹Ό νŠΈλžœμž­μ…˜μ΄ 없을 경우 REQUIRED 와 λ™μΌν•˜κ²Œ μž‘μš©ν•œλ‹€.

propagation 을 λ”°λ‘œ μ„€μ •ν•˜μ§€ μ•Šμ•˜μ„ 경우 default 값은 REQUIRED 이닀.

  • μΆ”κ°€μ μœΌλ‘œ νŠΈλžœμž­μ…˜ ν•˜λ©΄ 같이 λ‚˜μ˜€λŠ” 말이 isolation (격리) λ ˆλ²¨μ— λŒ€ν•œ μ–˜κΈ°μΈλ°, λ‚˜μ˜¨ 김에 같이 μ •λ¦¬ν•˜μžλ©΄

    1. READ_UNCOMMITTED (level 0)

      • νŠΈλžœμž­μ…˜μ΄ μ²˜λ¦¬μ€‘μΈ ν˜Ήμ€ 아직 μ»€λ°‹λ˜μ§€ μ•Šμ€ 데이터λ₯Ό λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ΄ μ½λŠ” 것을 ν—ˆμš©ν•œλ‹€.
    2. READ_COMMITTED (level 1) - default

      • dirty read λ₯Ό λ°©μ§€ν•˜μ—¬ νŠΈλžœμž­μ…˜μ΄ μ»€λ°‹λ˜μ–΄ ν™•μ •λœ λ°μ΄ν„°λ§Œμ„ μ½λŠ” 것을 ν—ˆμš©ν•œλ‹€.
      • ex) Aμ‚¬μš©μžκ°€ 데이터λ₯Ό μˆ˜μ •ν•˜κ³  μžˆλŠ” λ™μ•ˆ Bμ‚¬μš©μžλŠ” 데이터에 μ ‘κ·Όν•  수 μ—†λ‹€.

      dirty read λž€?

      νŠΈλžœμž­μ…˜μ—μ„œ μ²˜λ¦¬ν•˜λŠ” μž‘μ—…μ΄ μ™„λ£Œλ˜μ§€ μ•Šμ•˜λŠ”λ°λ„ λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ—μ„œ λ³Ό 수 μžˆλŠ” ν˜„μƒμ΄λ©°, READ_UNCOMMITTED (level 0) μ—μ„œλ§Œ λ°œμƒν•œλ‹€.

    3. REPEATABLE_READ (level 2)

      • νŠΈλžœμž­μ…˜μ΄ μ™„λ£Œλ  λ•ŒκΉŒμ§€ SELECT λ¬Έμž₯이 μ‚¬μš©ν•˜λŠ” λͺ¨λ“  데이터에 shared lock 이 κ±Έλ¦¬λ―€λ‘œ λ‹€λ₯Έ μ‚¬μš©μžλŠ” κ·Έ μ˜μ—­μ— ν•΄λ‹Ήλ˜λŠ” 데이터에 λŒ€ν•œ μˆ˜μ •μ΄ λΆˆκ°€λŠ₯ν•˜λ‹€
      • μ„ ν–‰ νŠΈλžœμž­μ…˜μ΄ 읽은 λ°μ΄ν„°λŠ” νŠΈλžœμž­μ…˜μ΄ μ’…λ£Œλ  λ•ŒκΉŒμ§€ ν›„ν–‰ νŠΈλžœμž­μ…˜μ΄ κ°±μ‹ ν•˜κ±°λ‚˜ μ‚­μ œν•˜λŠ” 것을 λΆˆν—ˆν•¨μœΌλ‘œμ¨ 같은 데이터λ₯Ό λ‘λ²ˆ μΏΌλ¦¬ν–ˆμ„ λ•Œ 일관성 μžˆλŠ” κ²°κ³Όλ₯Ό λ¦¬ν„΄ν•œλ‹€.
    4. SERIALIZABLE (level 3)

      • μ™„λ²½ν•œ 읽기 일관성 λͺ¨λ“œλ₯Ό μ œκ³΅ν•œλ‹€.
      • λ°μ΄ν„°μ˜ 일관성 및 λ™μ‹œμ„±μ„ μœ„ν•΄ MVCC(Multi Version Concurrency Control - 닀쀑 μ‚¬μš©μž λ°μ΄ν„°λ² μ΄μŠ€ μ„±λŠ₯을 μœ„ν•œ 기술둜 데이터 쑰회 μ‹œ LOCK 을 μ‚¬μš©ν•˜μ§€ μ•Šκ³  λ°μ΄ν„°μ˜ 버전을 관리해 λ°μ΄ν„°μ˜ 일관성 및 λ™μ‹œμ„±μ„ λ†’μ΄λŠ” 기술) 을 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€.
      • νŠΈλžœμž­μ…˜μ΄ μ™„λ£Œλ  λ•ŒκΉŒμ§€ SELECT λ¬Έμž₯이 μ‚¬μš©ν•˜λŠ” λͺ¨λ“  데이터에 shared lock 이 κ±Έλ¦¬λ―€λ‘œ λ‹€λ₯Έ μ‚¬μš©μžλŠ” κ·Έ μ˜μ—­μ— ν•΄λ‹Ήλ˜λŠ” 데이터에 λŒ€ν•œ μˆ˜μ • 및 μž…λ ₯이 λΆˆκ°€λŠ₯ν•˜λ‹€.
Share on

snack
WRITTEN BY
snack
Web Programmer


What's on this Page