@Transactionalμ μ¬μ©νλ μ΄μ
@Transactionalμ κΈ°λ³Έ κ°λ
μ μ
@Transactionalμ μ€νλ§ νλ μμν¬μμ μ 곡νλ μ΄λ Έν μ΄μ μΌλ‘, ν΄λΉ λ©μλλ ν΄λμ€μμ μ€νλλ DB μμ (INSERT, UPDATE, DELETE λ±)μ νλμ νΈλμμ λ²μ μμμ μ²λ¦¬νλλ‘ νλ μν μ νλ€.
κΈ°λ₯
λͺ¨λ DB μ°μ°μ νλμ μμμ λ¨μλ‘ λ¬Άμ΄ μ±κ³΅ μ μΌκ΄ 컀λ°, μ€ν¨ μ μΌκ΄ λ‘€λ°±μ ν΅ν΄ λ°μ΄ν° 무결μ±κ³Ό μΌκ΄μ±μ 보μ₯νλ€.
@Transactionalμ μ¬μ©νλ μ΄μ
1. μμμ±(Atomicity) 보μ₯
λ©μλ μ€ν μ€ νλμ μμ μ΄λΌλ μ€ν¨νλ©΄, ν΄λΉ λ©μλ λ΄ λͺ¨λ λ³κ²½ μ¬νμ λ‘€λ°±νλ€. μλ₯Ό λ€μ΄ INSERT ν UPDATEμμ μμΈ λ°μ μ, INSERT λν μ·¨μλμ΄ DB μνκ° μ΄μ μΌλ‘ 볡μλλ€.
2. μΌκ΄μ±(Consistency) 보μ₯
νλμ νΈλμμ μμμ λ°μ΄ν° λ³κ²½μ΄ μ΄λ£¨μ΄μ§λ―λ‘, DB μνμ μΌκ΄μ±μ΄ μ μ§λλ€.
3. 격리μ±(Isolation) ν보
νΈλμμ μ€μ μ λ°λΌ λ€λ₯Έ νΈλμμ κ³Όμ 격리 μμ€μ μ‘°μ νμ¬ λμμ± λ¬Έμ λ₯Ό μ€μΌ μ μλ€.
4. λͺ νν νΈλμμ κ²½κ³
μλΉμ€ κ³μΈ΅μμ @Transactionalμ νμ©νλ©΄ λΉμ¦λμ€ λ‘μ§ λ¨μλ‘ νΈλμμ κ²½κ³λ₯Ό λͺ νν μ€μ ν μ μμ΄ μ μ§λ³΄μκ° νΈλ¦¬νλ€.
μΈμ @Transactionalμ λΆμ¬μΌ ν κΉ?
1. λ°μ΄ν° λ³κ²½ λ‘μ§ (INSERT, UPDATE, DELETE)
μ¬λ¬ DB λ³κ²½ μμ μ νλμ λ¨μλ‘ λ¬Άκ³ μΆμ λ @Transactionalμ μ μ©ν΄ μμμ±μ 보μ₯νλ κ²μ΄ μΌλ°μ μ΄λ€.
2. μ‘°ν μ μ© λ‘μ§ (SELECT)
λ¨μ μ‘°νμμλ νμμ μ΄μ§ μμΌλ, μ§μ° λ‘λ©(Lazy Loading)μ νμ©νκ±°λ @Transactional(readOnly = true)λ₯Ό ν΅ν΄ λν° μ²΄νΉμ μλ΅νλ λ±μ μ΅μ νλ₯Ό ν μ μλ€.
3. μλΉμ€ λ μ΄μ΄
DAO(Repository) νΈμΆκ³Ό λΉμ¦λμ€ λ‘μ§μ κ²°ν©νλ μλΉμ€ κ³μΈ΅μμ νΈλμμ μ κ΄λ¦¬νλ κ²μ΄ μΌλ°μ μΈ ν¨ν΄μ΄λ€.
@Transactionalμ 무쑰건 λΆμ¬μΌ ν κΉ?
- "무쑰건"μ μλλ€. λΆνμνκ² λͺ¨λ λ©μλμ λΆμ΄λ©΄ μ€νλ € μ€λ²ν€λκ° λ°μν μ μλ€.
- λΉμ¦λμ€ λ‘μ§ μ "μ΄ λ‘μ§μ νλμ νΈλμμ μΌλ‘ μ²λ¦¬ν΄μΌ νλ€"λ λͺ νν κΈ°μ€μ΄ μμ λλ§ μ¬μ©νλ€.
- λ¨μν insert ν λ²λ§ μννλ λ©μλλΌλ, ν₯ν νμ₯ κ°λ₯μ±μ΄λ λͺ νν νΈλμμ κ²½κ³ μ€μ μ μν΄ λΆμΌ μλ μκ³ , μμ κ³μΈ΅μμ μ΄λ―Έ νΈλμμ μ κ΄λ¦¬νλ€λ©΄ μλ΅ν μλ μλ€.
νΈλμμ μ΄ μμΌλ©΄ μ΄λ€ μΌμ΄ λ°μν κΉ?
- μλ¬λ μμΈ λ°μ μ μ΄λ―Έ μ€νλ DB λ³κ²½(μ: INSERT)μ λλ릴 μ μλ€. λΆλΆλ§ DBμ λ°μλμ΄ λ°μ΄ν° 무결μ±μ μμ μ μλ€.
- LazyInitializationException, TransactionRequiredException λ± νΈλμμ μ΄ μμ κ²½μ° λ°μνλ μμΈλ‘ μΈν΄ μ μμ μΈ μν°ν° κ΄λ¦¬κ° μ΄λ €μΈ μ μλ€.
@Transactional(readOnly = true)
- μ½κΈ° μ μ© λͺ¨λλ‘ μ€μ νλ©΄ Hibernateμ κ°μ ORMμ΄ λν° μ²΄νΉμ μννμ§ μκ±°λ μ΅μννμ¬ μ±λ₯ μ΅μ νλ₯Ό μ 곡ν μ μλ€.
- DB λ³κ²½μ΄ μλ€λ 보μ₯μ΄ μμ κ²½μ°, Flushλ Lock νλ κ³Όμ μ μλ΅νμ¬ μμ μ¬μ©μ μ€μΌ μ μλ€.
μ 리
- @Transactionalμ μ€νλ§ μ ν리μΌμ΄μ μμ νΈλμμ κ²½κ³λ₯Ό λͺ νν μ€μ νκ³ , DB λ³κ²½ μμ μμ μ±κ³Ό μμμ±μ ν보νλ ν΅μ¬ λꡬμ΄λ€.
- μν©μ λ°λΌ readOnly μμ± νμ©, μ μ ν κ³μΈ΅(μ£Όλ‘ Service λ 벨)μμμ μ€μ , νμν λλ§ μ¬μ©νλ μ λ΅μ ν΅ν΄ ν¨μ¨μ μΈ λ°μ΄ν° μ κ·Όμ ꡬνν μ μλ€.
- 컀λ₯μ κ΄λ¦¬ λ° μ΅μ ν(컀λ₯μ ν, readOnly νΈλμμ )μ κ²°ν©νμ¬ μ ν리μΌμ΄μ μ μ±λ₯κ³Ό μμ μ±μ ν λ¨κ³ λμΌ μ μλ€.