ππ» νΈλμμ Transaction
- μ¬λ¬ κ°μ μμ λ€μ νλμ κ·Έλ£ΉμΌλ‘ λ¬Άμ΄μ μ²λ¦¬νλ μ²λ¦¬ λ¨μ
- 물리μ μΌλ‘λ μ¬λ¬ κ°μ μμ
λ Όλ¦¬μ μΌλ‘λ νλμ μμ μΌλ‘ μΈμνμ¬ μ λΆ μ±κ³΅ or μ€ν¨λ‘ μ²λ¦¬λμ΄μΌ ν¨ ( All or Nothing )
→ λ°μ΄ν°μ λ¬΄κ²°μ± λ³΄μ₯
π νΈλμμ νΉμ§ : ACID μμΉ
β Atomicity : μμμ±
- μμ μ λ μ΄μ μͺΌκ°€ μ μμ
- λ Όλ¦¬μ μΌλ‘ νλμ μμ μΌλ‘ μΈμλλ©΄ μ΄λ€ μμ μ μ²λ¦¬νκ³ μ΄λ€ μμ μ μ²λ¦¬ νμ§ μμλ λλ μμΌλ‘ μͺΌκ°μ μ²λ¦¬ X
→ λ λ€ μ±κ³΅νκ±°λ μ€ν¨νλ λ±μ νλλ‘λ§ μ²λ¦¬κ° 보μ₯λμ΄μΌ ν¨
- ex) μλ£ μ£Όλ¬Έμ νλ©΄ μλ£ μ λ§νΌ μ€ν¬ν νμκ° μ¦κ°λλ μμ μ΄ μμ λ
μλ£ μ£Όλ¬Έκ³Ό μ€ν¬ν μ¦κ°λ λ λ€ μ±κ³΅νκ±°λ λ λ€ μ€ν¨λ‘ μ²λ¦¬ λμ΄μΌ ν¨ (μλ£ μ£Όλ¬Έλ§ λκ±°λ μ€ν¬ν μ¦κ°λ§ λλ©΄ x)
β‘ Consistency : μΌκ΄μ±
- νΈλμμ μ΄ μλ¬ μμ΄ μ±κ³΅μ μΌλ‘ μ’ λ£λ κ²½μ° λΉμ¦λμ€ λ‘μ§μμ μλνλ λλ‘ μΌκ΄μ± μκ² μ μ₯λκ±°λ λ³κ²½λ¨
- ex) λΉμ¦λμ€ λ‘μ§μ λ§κ² μ£Όλ¬Έ ν μ»€νΌ μ λ§νΌ μ€ν¬ν νμκ° μ¦κ°ν¨
β’ Isolation : 격리μ±
- μ¬λ¬ κ°μ νΈλμμ μ΄ μ€νλ κ²½μ° κ°κ° λ 립μ μΌλ‘ μ€νλμ΄μΌ ν¨
- CPUκ° νλ‘μΈμ€λ₯Ό μ²λ¦¬νλ κ³Όμ μ μ΄ν΄νκ³ μμ΄μΌ ν¨
- μ»΄ν¨ν°λ‘ μΈν°λ· μΌνμ νλ©΄μ λμμ μμ μ λ£κ³ μλ°λ©΄ λμλ 보μ΄μ§ μμ§λ§ CPUκ° λ κ°μ νλ‘μΈμ€λ₯Ό λ²κ±Έμκ°λ©° μ€ν
- DBλ μ±λ₯ ν₯μμ λͺ©μ μΌλ‘ ν κ° μ΄μμ νΈλμμ μ λ²κ°μκ°λ©° μ²λ¦¬ν¨
β£ Durability : μ§μμ±
- νΈλμμ μ΄ μλ£λλ©΄ κ·Έ κ²°κ³Όκ° μ§μλμ΄μΌ ν¨
- λ°μ΄ν°λ² μ΄μ€κ° μ’ λ£λμ΄λ λ°μ΄ν°λ 물리μ μΈ μ₯μμ μ μ₯λμ΄ μ§μμ μΌλ‘ μ μ§λμ΄μΌ ν¨
π νΈλμμ μ»€λ° Commit / λ‘€λ°± Rollback
βͺοΈ μ»€λ° : Commit
- λͺ¨λ μμ μ μ΅μ’ μ μΌλ‘ λ°μ΄ν°λ² μ΄μ€μ λ°μνλ λͺ λ Ήμ΄
- μ»€λ° λͺ λ Ήμ μννλ©΄ λ³κ²½λ λ΄μ©μ΄ λ°μ΄ν°λ² μ΄μ€μ μꡬμ μΌλ‘ μ μ₯λκ³ νΈλμμ μ΄ μ’ λ£λ¨
- μ»€λ° λͺ λ Ήμ μννμ§ μμΌλ©΄ μμ μ κ²°κ³Όκ° λ°μ΄ν°λ² μ΄μ€μ μ΅μ’ μ μΌλ‘ λ°μλμ§ μμ
βͺοΈ λ‘€λ°± : Rollback
- μμ μ€ λ¬Έμ κ° λ°μνμ λ νΈλμμ λ΄ μνλ μμ λ€μ μ·¨μν¨
- νΈλμμ μμ μ΄μ μ μνλ‘ λλμκ°
π μ μΈν νΈλμμ
βͺοΈ μ λν μ΄μ λ°©μμ νΈλμμ μ μ©
- μμ±ν λΉμ¦λμ€ λ‘μ§μ μ λν μ΄μ μΆκ°
- @Transactional μ΄λΌλ μ λν μ΄μ μ νΈλμμ μ΄ νμν μμμ μΆκ°
@Service
@Transactional
public class MemberService {
...
..
.
}
→ ν΄λμ€ λ 벨μ μ λν μ΄μ μΆκ° : ν΄λΉ ν΄λμ€μμ MemberRepositoryμ κΈ°λ₯μ μ΄μ©νλ λͺ¨λ λ©μλμ νΈλμμ μ μ©
π‘ μ²΄ν¬ μμΈ : checked exception
- @Transactionalλ§ μΆκ°ν΄μ rollbackμ΄ λμ§ μμΌλ©° ν΄λΉ 체ν¬μμΈλ₯Ό μ§μ ν΄μ£Όκ±°λ μΈμ²΄ν¬ μμΈλ‘ κ°μΈ Rollback κΈ°λ₯ μ μ©
- μ§μ μ§μ : @Transactional(rollbackFor={SQLException.class}) λ±
π‘ νΈλμμ μ ν : Transaction Propagation
- νΈλμμ μ κ²½κ³μμ μ§ν μ€μΈ νΈλμμ μ΄ μ‘΄μ¬ / μ‘΄μ¬νμ§ μμ λ μ΄λ»κ² λμν μ§ κ²°μ νλ λ°©μ
- propagation μ νΈλ¦¬λ·°νΈλ₯Ό ν΅ν΄μ μ€μ ν μ μμ
β Propagation.REQUIRED
- μ§ν μ€μΈ νΈλμμ μ΄ μμΌλ©΄ μλ‘ μμνκ³ μ§ν μ€μΈ νΈλμμ μ΄ μμΌλ©΄ ν΄λΉ νΈλμμ μ μ°Έμ¬
- OrderServiceμμ createOrder( )λ₯Ό νΈμΆνλ©΄ νΈλμμ νλ μμ±λλ©° createOrder( ) λ΄μμ
updateMember( )κ° νΈμΆλλ©΄ updateMemberμ @Transactional(propagation=Propagation.REQUIRED)κ°
μ§μ λμ΄μκΈ° λλ¬Έμ νμ¬ OrderServiceμμ μ§ν μ€μΈ νΈλμμ μ μ°Έμ¬νκ² λ¨
β‘ Propagation.REQUIRES_NEW
- μ΄λ―Έ μ§νμ€μΈ νΈλμμ κ³Ό 무κ΄νκ² μλ‘μ΄ νΈλμμ μμ
- κΈ°μ‘΄μ μ§νμ€μ΄λ νΈλμμ μ μλ‘ μμλ νΈλμμ μ΄ μ’ λ£λ λ κΉμ§ μ€μ§λ¨
β’ Propagation.MANDATORY
- μ§ν μ€μΈ νΈλμμ μ΄ μμΌλ©΄ μμΈλ₯Ό λ°μμν΄
β£ Propagation.*NOT_SUPPORTED*
- νΈλμμ μ΄ νμλ‘ νμ§ μμμ μλ―Έν¨
- μ§ν μ€μΈ νΈλμμ μ΄ μμΌλ©΄ λ©μλ μ€νμ΄ μ’ λ£λ λκΉμ§ μ§νμ€μΈ νΈλμμ μ μ€μ§λλ©°
λ©μλ μ€νμ΄ μ’ λ£λλ©΄ νΈλμμ μ κ³μ μ§νν¨
β€ Propagation.*NEVER*
- νΈλμμ μ΄ νμλ‘ νμ§ μμμ μλ―Έ
- μ§ν μ€μΈ νΈλμμ μ΄ μ‘΄μ¬ν κ²½μ°μλ μμΈλ₯Ό λ°μμν΄
π‘ νΈλμμ 격리 λ 벨 : Isolation Level
- ACID μμΉμ 보며 νΈλμμ μ λ€λ₯Έ νΈλμμ μ μν₯μ μ£Όμ§ μκ³ λ 립μ μΌλ‘ μ€νλμ΄μΌ νλ κ²©λ¦¬μ± λ³΄μ₯ νμ
- Springμ μ΄λ¬ν 격리μ±μ μ‘°μ ν μ μλ μ΅μ μ @Transactionalμ isolation μ νΈλ¦¬λ·°νΈλ₯Ό ν΅ν΄ μ 곡
β Isolation.DEFAULT
- λ°μ΄ν°λ² μ΄μ€μμ μ 곡νλ κΈ°λ³Έ κ°
β‘ Isolation.READ_UNCOMMITTED
- λ€λ₯Έ νΈλμμ μμ 컀λ°νμ§ μμ λ°μ΄ν°λ₯Ό μ½λ κ²μ νμ©ν¨
β’ Isoloation.READ_COMITTED
- λ€λ₯Έ νΈλμμ μ μν΄ μ»€λ°λ λ°μ΄ν°λ₯Ό μ½λ κ²μ νμ©
β£ Isolation.REPEATABLE_READ
- νΈλμμ λ΄μμ ν λ² μ‘°νν λ°μ΄ν°λ₯Ό λ°λ³΅ν΄μ μ‘°νν΄λ κ°μ λ°μ΄ν°κ° μ‘°νλλλ‘ ν¨
β€ Isolation.SERIALIZABLE
- λμΌν λ°μ΄ν°μ λν΄μ λμμ λ κ° μ΄μμ νΈλμμ μ΄ μνλμ§ λͺ»νλλ‘ ν¨
βͺοΈ AOP λ°©μμ νΈλμμ μ μ©
- AOP λ°©μμ μ΄μ©νμ¬ λΉμ¦λμ€ λ‘μ§μμ νΈλμμ μ μ© μ½λ κ°μΆκΈ°
π λΆμ° νΈλμμ
- μλ‘ λ€λ₯Έ λ°μ΄ν° μμ€λ₯Ό μ¬μ©νλ ν κ° μ΄μμ λ°μ΄ν°λ² μ΄μ€λ₯Ό νλμ νΈλμμ μΌλ‘ λ¬Άμ΄μ μ²λ¦¬
'Study > Java' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[TIL] μ¬λΌμ΄μ€ ν μ€νΈ (0) | 2022.07.14 |
---|---|
[TIL] λ¨μν μ€νΈ (0) | 2022.07.12 |
[TIL] Spring Data JPA (0) | 2022.07.12 |
[TIL] JPA λ§€ν (0) | 2022.07.05 |
[TIL] JPA (0) | 2022.07.05 |