πνΈλμμ
μ΄λ?
νλμ μΌμ²λ¦¬λ₯Ό μμ νκ² λ³΄μ₯ν΄μ£Όλ κ²μ λ»ν¨
λͺ¨λ μμ
μ΄ μ±κ³΅ν΄μ λ°μ΄ν°λ² μ΄μ€μ μ μ λ°μνλ κ²μ Commitμ΄λΌνκ³ , μμ
μ€ νλλΌλ μ€ν¨ν΄μ μ΄μ μΌλ‘ λλ리λ κ²μ Rollbackμ΄λΌν¨
νΈλμμ
μ 4κ°μ§λ₯Ό 보μ₯ν΄μΌνλλ° μ΄λ₯Ό μ€μ¬μ ACIDλΌν¨
- μμμ±(Atomicity) : νΈλμμ
λ΄μμ μ€νν μμ
λ€μ λ§μΉ νλμ μμ
μΈ κ²μ²λΌ λͺ¨λ μ±κ³΅ νκ±°λ λͺ¨λ μ€ν¨ν΄μΌνλ€.
- μΌκ΄μ±(Consistency) : λͺ¨λ νΈλμμ
μ μΌκ΄μ± μλ λ°μ΄ν°λ² μ΄μ€ μνλ₯Ό μ μ§ν΄μΌ νλ€. μλ₯Ό λ€μ΄ λ°μ΄ν°λ² μ΄μ€μμ μ ν λ¬΄κ²°μ± μ μ½ μ‘°κ±΄μ νμ λ§μ‘±ν΄μΌ νλ€.
- 격리μ±(Isolation) : λμμ μ€νλλ νΈλμμ
λ€μ΄ μλ‘μκ² μν₯μ λ―ΈμΉμ§ μλλ‘ κ²©λ¦¬νλ€. 격리μ±μ λμμ±κ³Ό κ΄λ ¨λ μ±λ₯ μ΄μλ‘ μΈν΄ νΈλμμ
격리 μμ€(Isolation level)μ μ νν μ μλ€.
- μ§μμ±(Durability) : νΈλμμ
μ μ±κ³΅μ μΌλ‘ λλ΄λ©΄ κ·Έ κ²°κ³Όκ° νμ κΈ°λ‘λμ΄μΌ νλ€. μ€κ°μ μμ€ν
μ λ¬Έμ κ° λ°μν΄λ λ°μ΄ν°λ² μ΄μ€ λ‘κ·Έ λ±μ μ¬μ©ν΄μ μ±κ³΅ν νΈλμμ
λ΄μ©μ 볡ꡬν΄μΌ νλ€.
μ¬κΈ°μ νΈλμμ
Isolationμ λν΄ λ€μ ν λ² λ μ΄ν΄λ³΄μ
격리 μμ€μ
- READ UNCOMMITED
λ€λ₯Έ νΈλμμ
μμ 컀λ°λμ§ μμ λ΄μ©λ μ°Έμ‘°ν μ μλ€
- READ COMMITED
λ€λ₯Έ νΈλμμ
μμ 컀λ°λ λ΄μ©λ§ μ°Έμ‘°ν μ μλ€
- REPEATABLE READ
νΈλμμ
μ μ§μ
νκΈ° μ΄μ μ 컀λ°λ λ΄μ©λ§ μ°Έμ‘°ν μ μλ€
- SERIALIZABLE
νΈλμμ
μ μ§μ
νλ©΄ λ½μ κ±Έμ΄ λ€λ₯Έ νΈλμμ
μ΄ μ κ·Όνμ§ λͺ»νκ² νλ€.
(μνμ€ νΌμ
λ‘ λ³΄ν΅ μ€λ¬΄μμ READ COMMITED, REPEATABLE READ μ΄ λ 격리 μμ€μΌλ‘ μ€μ ν¨)
πμ€νλ§μμ νΈλμμ
μ²λ¦¬
- νΈλμμ
맀λμ μ λμνλ¦
- μλΉμ€ κ³μΈ΅μμ transactionManager.getTransaction()μ νΈμΆν΄μ νΈλμμ
μ μμ
- νΈλμμ
μ μμνλ €λ©΄ λ¨Όμ λ°μ΄ν°λ©μ΄μ€ 컀ν
μ
μ΄ νμ. νΈλμμ
맀λμ λ λ΄λΆμμ λ°μ΄ν°μμ€λ₯Ό μ¬μ©ν΄μ 컀λ₯μ
μ μμ±
- 컀λ₯μ
μ μλ μ»€λ° λͺ¨λλ‘ λ³κ²½ν΄μ μ€μ λ°μ΄ν°λ² μ΄μ€ νΈλμμ
μ μμ
- 컀λ₯μ
μ νΈλμμ
λκΈ°ν 맀λμ μ 보κ΄
- νΈλμμ
λκΈ°ν 맀λμ λ μ°λ λ λ‘컬μ 컀λ₯μ
μ λ³΄κ΄ λ°λΌμ λ©ν° μ°λ λ νκ²½μ μμ νκ² μ»€λ₯μ
μ 보κ΄ν μ μμ
- μλΉμ€λ λΉμ¦λμ€ λ‘μ§μ μ€ννλ©΄μ 리ν¬μ§ν 리μ λ©μλλ€μ νΈμΆ. μ΄ λ 컀λ₯μ
μ νλΌλ―Έν°λ‘ μ λ¬νμ§ μμ
- 리ν¬μ§ν 리 λ©μλλ€μ νΈλμμ
μ΄ μμλ 컀λ₯μ
μ΄ νμ. 리ν¬μ§ν 리λ DataSourceUtils.getConnection()μ μ¬μ©ν΄μ νΈλμμ
λκΈ°ν맀λμ μ 보κ΄λ 컀λ₯μ
μ κΊΌλ΄μ μ¬μ©. μ΄ κ³Όμ μ ν΅ν΄μ μμ°μ€λ½κ² κ°μ 컀λ₯μ
μ μ¬μ©νκ³ , νΈλμμ
λ μ μ§
- νλν 컀λ₯μ
μ μ¬μ©ν΄μ SQLμ λ°μ΄ν°λ² μ΄μ€μ μ λ¬ν΄μ μ€ν
- λΉμ¦λμ€ λ‘μ§μ΄ λλκ³ νΈλμμ
μ μ’
λ£. νΈλμμ
μ 컀λ°νκ±°λ λ‘€λ°±νλ©΄ μ’
λ£
- νΈλμμ
μ μ’
λ£νλ €λ©΄ λκΈ°νλ 컀λ₯μ
μ΄ νμ. νΈλμμ
λκΈ°ν 맀λμ λ₯Ό ν΅ν΄ λκΈ°νλ 컀λ₯μ
μ νλ
- νλν 컀λ₯μ
μ ν΅ν΄ λ°μ΄ν°λ² μ΄μ€μ νΈλμμ
μ 컀λ°νκ±°λ λ‘€λ°±
- μ 체 리μμ€ μ 리
- @Transactional μ¬μ©
λ΄ μλΉμ€ λ‘μ§μ @Transactionalμ λΆμ΄λ©΄ νΈλμμ
μ΄ κ΅¬νλ νλ‘μ κ°μ²΄λ₯Ό λ§λ€μ΄ μμ½κ² νΈλμμ
ꡬν κ°λ₯
μ°Έκ³
κΉμνμ μ€νλ§ DB 1νΈ - λ°μ΄ν° μ κ·Ό ν΅μ¬ μ리