Transaction
νν javaμμ νΈλμμ
μ¬μ©μ try catch
λ¬Έ μ¬μ΄μ commitκ³Ό Rollbackμ μ΄μ©νμ¬ μ²λ¦¬νλ€.
reSpringμμλ μ΄λ¬ν λ°λ³΅μ μΈ μμ μ λ κ°μ§ λ°©λ²μΌλ‘ νλ²μ ν΄κ²°ν μ μλ€.
μ μΈμ μν νΈλμμ
νλ‘κ·Έλ¨μ μν νΈλμμ
μ μΈμ μν νΈλμμ
μ μΈμ μν νΈλμμ μλ λκ°μ§(1. AOP 2. annotation) λ°©λ²μ΄ μλ€.
@Transactional Annotation
μ°μ annotation μ¬μ©μ μν bean μ€μ μ ν΄μ€λ€.
λ€μκ³Ό κ°μ΄ μ€μ ν μνλ λ©μλ μμ @Transactional
μ λΆμ¬ κ°νΈνκ² νΈλμμ
μ ꡬνν μ μλ€.
λ©μλ μ 체λ₯Ό νλμ νΈλμμ
μΌλ‘ λ¬Άμ μ μλ€λ κ²μ@Transactional
μ λ΄λΆ λμμ΄ Proxyλ‘ μ΄λ£¨μ΄μ§λ€λ κ²μ μλ―Ένλ€.
@Transactional
μ΄ μ μ©λ κ²½μ° νΈλμμ
κΈ°λ₯μ΄ μ μ©λ νλ‘μ κ°μ²΄κ° μμ±λλ€.
μ΄ νλ‘μ κ°μ²΄λ @Transactional
μ΄ ν¬ν¨λ λ©μλκ° νΈμΆλλ©΄, PlatformTransactionManagerλ₯Ό μ¬μ©νμ¬ νΈλμμ
μ μμνκ³ , κ²°κ³Όμ μ μ μ¬λΆμ λ°λΌ Commit λλ Rollback νλ€.
@Transactional
μ΄λ
Έν
μ΄μ
μ μ¬λ¬κ°μ§ μμ±μ μ§μ ν μ μλ€.
isolation
격리μμ€(νΈλμμ μμ μΌκ΄μ±μ΄ μλ λ°μ΄ν°λ₯Ό νμ©νλλ‘ νλ μμ€)μ λ§νλλ° μ΅μ μ λ€μκ³Ό κ°λ€.
level
μ΅μ
μ€λͺ
level 0
READ_UNCOMMITTED
νΈλμμ μ μ²λ¦¬μ€μΈ or μμ§ commit(νμ )λμ§ μμ λ°μ΄ν°λ₯Ό λ€λ₯Έ νΈλμμ μ΄ μ½λ κ²μ νμ©νλ€. ex) ν μ¬μ©μκ° AλΌλ λ°μ΄ν°λ₯Ό BλΌλ λ°μ΄ν°λ‘ λ³κ²½νλ λμ λ€λ₯Έ μ¬μ©μλ μμ§ μλ£λμ§μμ(Uncommitted or Dirty) λ°μ΄ν° B'λ₯Ό μ½μ μ μλ€.
level 1
READ_COMMITTED
Dirty Readλ₯Ό λ°©μ§νλ€. μ¦, νΈλμμ μ΄ commitλμ΄ νμ λ λ°μ΄ν°λ§μ μ½λ κ²μ νμ©νλ€. ex) ν μ¬μ©μκ° AλΌλ λ°μ΄ν°λ₯Ό BλΌλ λ°μ΄ν°λ‘ λ³κ²½νλ λμ λ€λ₯Έ μ¬μ©μλ ν΄λΉ λ°μ΄ν°μ μ κ·Όν μ μλ€.
level 2
REPEATABLE_READ
νΈλμμ μ΄ μλ£λ λκΉμ§ SELECTλ¬Έμ΄ μ¬μ©νλ λͺ¨λ λ°μ΄ν°μ shared lockμ΄ κ±Έλ¦°λ€. λ€λ₯Έ μ¬μ©μλ κ·Έ μμμ ν΄λΉλλ λ°μ΄ν°μ λν μμ μ΄ λΆκ°λ₯νλ€. μ ν νΈλμμ μ΄ μ½μ λ°μ΄ν°λ νΈλμμ μ΄ μ’ λ£λ λκΉμ§ νν νΈλμμ μ΄ κ°±μ νκ±°λ μμ νλ κ²μ λΆνν¨μΌλ‘μ¨ κ°μ λ°μ΄ν°λ₯Ό λ λ² μΏΌλ¦¬νμ λ μΌκ΄μ± μλ κ²°κ³Όλ₯Ό 리ν΄ν¨
level 3
SERIALIZABLE
μλ²½ν μ½κΈ° μΌκ΄μ± λͺ¨λλ₯Ό μ 곡νλ€. λ°μ΄ν°μ μΌκ΄μ± λ° λμμ±μ μν΄ MVCCλ₯Ό μ¬μ©νμ§ μλλ€. νΈλμμ μ΄ μλ£λ λκΉμ§ SELECT λ¬Έμ₯μ΄ μ¬μ©νλ λͺ¨λ λ°μ΄ν°μ shared lockμ΄ κ±Έλ¦¬λ―λ‘ λ€λ₯Έ μ¬μ©μλ κ·Έ μμμ ν΄λΉλλ λ°μ΄ν°μ λν μμ λ° μ λ ₯μ΄ λΆκ°λ₯νλ€.
Dirty read
μμ κ°μ΄ λ€λ₯Έ νΈλμμ μμ μ²λ¦¬νλ μμ μ΄ μλ£λμ§ μμλλ°λ λ€λ₯Έ νΈλμμ μμ λ³Ό μ μλ νμμ dirty read λΌκ³ νλ©°, READ UNCOMMITTED 격리μμ€μμλ§ μΌμ΄λλ νμ
MVVC(Multi Version Concurrency Control)
MVCCλ λ€μ€ μ¬μ©μ λ°μ΄ν°λ² μ΄μ€ μ±λ₯μ μν κΈ°μ λ‘ λ°μ΄ν° μ‘°ν μ LOCKμ μ¬μ©νμ§ μκ³ λ°μ΄ν°μ λ²μ μ κ΄λ¦¬ν΄ λ°μ΄ν°μ μΌκ΄μ± λ° λμμ±μ λμ΄λ κΈ°μ
propagation
νΈλμμ λμ λμ€μ λ€λ₯Έ νΈλμμ μ μ€νν΄μΌνλ μν©μ΄ μμ£Ό λ°μνκ² λλλ°, νΈμΆλλ νΈλμμ μ μ μ₯μμλ νΈμΆν νΈλμμ μ κ·Έλλ‘ μ¬μ©ν μλ μκ³ , μλ‘μ΄ νΈλμμ μ μμ±ν μλ μλ€.
νΈμΆν νΈλμμ μ κ·Έλλ‘ μ¬μ©ν κ²½μ° μ€κ°μ μ€λ₯κ° λ°μνλ©΄ λͺ¨λ νΈλμμ μ΄ λ‘€λ°±μ΄ λλ€.
μλ‘μ΄ νΈλμμ μ μμ±ν κ²½μ° μ€κ°μ μ€λ₯κ° λ°μνλ©΄ μ€λ₯κ° λ°μν νΈλμμ μ΄ λ‘€λ°± λ κ²μ΄λ€.
μ΄λ¬ν νΈλμμ κ΄λ ¨ μ€μ μ @Transactionalμ propagation μμ±μ ν΅ν΄ μ§μ ν μ μλ€.
propagation μμ±
μ€λͺ
REQUIRED
λΆλͺ¨ νΈλμμ λ΄μμ μ€ννλ©° λΆλͺ¨ νΈλμμ μ΄ μμ κ²½μ° μλ‘μ΄ νΈλμμ μ μμ±
REQUIRES_NEW
λΆλͺ¨ νΈλμμ μ 무μνκ³ λ¬΄μ‘°κ±΄ μλ‘μ΄ νΈλμμ μ΄ μμ±
MANDATORY
λΆλͺ¨ νΈλμμ λ΄μμ μ€νλλ©° λΆλͺ¨ νΈλμμ μ΄ μμ κ²½μ° μμΈκ° λ°μ
SUPPORTS
λΆλͺ¨ νΈλμμ λ΄μμ μ€ννλ©° λΆλͺ¨ νΈλμμ μ΄ μμ κ²½μ° nontransactionallyλ‘ μ€ν
NOT_SUPPORTED
nontransactionallyλ‘ μ€ννλ©° λΆλͺ¨ νΈλμμ λ΄μμ μ€νλ κ²½μ° μΌμ μ μ§
NEVER
nontransactionallyλ‘ μ€νλλ©° λΆλͺ¨ νΈλμμ μ΄ μ‘΄μ¬νλ€λ©΄ μμΈκ° λ°μ
NESTED
ν΄λΉ λ©μλκ° λΆλͺ¨ νΈλμμ μμ μ§νλ κ²½μ° λ³κ°λ‘ 컀λ°λκ±°λ λ‘€λ°±λ μ μλ€. λλ¬μΌ νΈλμμ μ΄ μμ κ²½μ° REQUIREDμ λμΌνκ² μλ
rollback-for
νΉμ μμΈκ° λ°μνμ κ²½μ°μ λ‘€λ°±λλλ‘ μ€μ νλ€. μ€μ νμ§ μμ κ²½μ° μ€λ‘μ§ RuntimeExceptionμ μμλ°μ μμΈμλ§ λ‘€λ°±μ²λ¦¬λ₯Ό ν΄μ€λ€.
no-rollback-for
νΉμ μμΈκ° λ°μνλλΌλ λ‘€λ°±λμ§ μλλ‘ μ€μ νλ€.
μ°Έμ‘°
Last updated
Was this helpful?