@Transactional κ³Ό AOPμ κ΄κ³ + Proxy κ°μ²΄
spring κ°λ°μ μ§ννλ©΄ νΈλμμ μ²λ¦¬λ₯Ό ν΄λ³Έ κ²½νμ΄ μμ κ²μ΄λ€. μ€μ λ‘ @Transactional λ§ μ¬μ©ν΄λ³΄κ³ λ΄λΆμ μΌλ‘ μ΄λ»κ² λμνλμ§μ λν΄μ μ μ΄ν΄νμ§ λͺ»νκ³ μμλ€. λ©΄μ μ€λΉλ₯Ό νλ©΄μ aopμ λν΄ κ³΅λΆνλ€ νΈλμμ μ²λ¦¬, λ‘κΉ λ±μ aopλ‘ μ²λ¦¬νλ€λλ° λ‘κΉ μ μ²λ¦¬νλ κ²μ νμ΄λ νΈλμμ μ λ°λ‘ ꡬνν μ μ΄ μμλ€. κ·Έλμ μ‘°κΈ λ μμΈν μμλ³΄κ³ λ΄λΆμ μΌλ‘ μ΄λ»κ² λμνλμ§ μμλ³΄λ €κ³ νλ€.
1. Transaction [ νΈλμμ ] / AOP [ κ΄μ μ§ν₯νλ‘κ·Έλλ° ]
λ¨Όμ νΈλμμ μ΄λ λ°μ΄ν°λ² μ΄μ€μ μνλ₯Ό λ³νμν€κΈ° μν΄ μννλ μμ μ λ¨μλ₯Ό λ»νλ€.
λ¨μν λͺ λ Ήμ΄ λ¨μκ° μλ μμ μ λ¨μμΈ κ²μ μ μ΄ν΄ν΄μΌ νλ€.
Aλ Bμκ² 10,000μ μ κΈνλ€.
Aμ ν΅μ₯μμ 10,000μ΄ λΉ μ Έλκ°κ³ Bμ ν΅μ₯μ 10,000μ΄ μ κΈλμλ€.
μ΄ κ³Όμ μ νλμ λ¨μλ‘ λ³΄λ κ²μ΄ νΈλμμ μ΄λ€.
μ΄ λ Aμ ν΅μ₯μμ λμ΄ λΉ μ Έλκ°μ§ μκ±°λ Bμ ν΅μ₯μ λμ΄ λ€μ΄μ€μ§ μμΌλ©΄ μ΄ μμ μ μνλμ΄μλ μλλ€.
νΈλμμ ACID
- Atomicity [μμμ±]
- All or Nothing, μ¦ νΈλμμ μ΄ μμ ν μ±κ³΅ λλ μ€ν¨νλ λ¨μΌ λ¨μλ‘ μ²λ¦¬νλλ‘ λ³΄μ₯
- Consistency [μΌκ΄μ±]
- νΈλμμ μ΄ μ±κ³΅μ μΌλ‘ μλ£νλ©΄ μΈμ λ λμΌν λ°μ΄ν°λ² μ΄μ€ μνλ‘ μ μ§
- Isolation [λ
립μ±]
- νΈλμμ μν μ λ€λ₯Έ νΈλμμ μ μ°μ° μμ μ΄ λΌμ΄λ€μ§ λͺ»νλλ‘ λ³΄μ₯
- Durability [μ§μμ±]
- μ±κ³΅μ μΌλ‘ μνλ νΈλμμ μ μμν λ°μ
μ€νλ§μμλ νΈλμμ μ²λ¦¬λ₯Ό μν΄ @Transactional μ μ΄μ©νλ€. @Transactional μ΄λ Έν μ΄μ μ AOPλ₯Ό ν΅ν΄ Targetμ΄ μμνκ³ μλ μΈν°νμ΄μ€ λλ Target κ°μ²΄λ₯Ό μμν Proxy κ°μ²΄κ° μμ±λλ©°, Proxy κ°μ²΄μ λ©μλλ₯Ό νΈμΆνλ©΄ Target λ©μλ μ , νλ‘ νΈλμμ μ²λ¦¬λ₯Ό μννλ€.
AOPλ 무μμΌκΉ ?
ν©μ΄μ§ κ΄μ¬μ¬λ₯Ό λ³λμ ν΄λμ€λ‘ λͺ¨λννμ¬ λ¬Έμ λ€μ ν΄κ²°νκ³ , κ²°κ³Όμ μΌλ‘ OOPλ₯Ό λμ± μ μ§ν¬ μ μλλ‘ λμμ μ£Όλ κ²μ΄ AOPμ΄λ€.
Proxy ν¨ν΄μ΄λ ?
μ΄λ€ κ°μ²΄λ₯Ό μ¬μ©νκ³ μ ν λ, κ°μ²΄λ₯Ό μ§μ μ μΌλ‘ μ°Έμ‘° νλ κ²μ΄ μλλΌ, ν΄λΉ κ°μ²΄λ₯Ό λννλ κ°μ²΄λ₯Ό ν΅ν΄ λμκ°μ²΄μ μ κ·Όνλ λ°©μμ λ»νλ€. Spring AOPλ νλ‘μ λ°©μμΌλ‘ λμνλ€.
μ λ§ μ΄ κ·Έλ¦Όμ λ³΄κ³ μ΄ν΄κ° μλλ€.
ν΄λμ€μ @Transactional μ²λ¦¬κ° λμ΄ μλ λΆλΆ(A, C λ©μλ)μ΄ μλ€λ©΄, Springμ ν΄λΉ λΆλΆμ νΈλμμ μ²λ¦¬λ₯Ό μΆκ°ν νλ‘μλ₯Ό μλμΌλ‘ μμ±νλ€. κ·Έλ¦¬κ³ μΈλΆμμ νΈμΆνλ©΄, μλ ν΄λμ€κ° μλ νλ‘μκ° λμ νΈμΆλλ€.
β C λ©μλλ₯Ό νΈμΆνλ©΄, TestServiceκ° μλ TestServiceμ νλ‘μμ ꡬνλ C λ©μλκ° λμ νΈμΆλλ€. λ°λΌμ Cμ Cμμ νΈμΆνλ A λͺ¨λ νλ‘μ κ°μ²΄μμ νΈλμμ μ²λ¦¬λ₯Ό ν΄μ€λ€.
β‘ νμ§λ§ B λ©μλλ₯Ό νΈμΆνλ κ²μ νΈλμμ μ²λ¦¬κ° λμ΄ μμ§ μμ μμ B λ©μλλ₯Ό νΈμΆνλ κ²κ³Ό κ°λ€. μ΄λ Bμμ νΈμΆνλ A μμ νΈλμμ μ²λ¦¬κ° λμ΄ μμ§ μλ€.
κ²°κ³Όμ μΌλ‘ νΈλμμ μ κ°μ²΄ μΈλΆμμ μ²μ μ§μ νλ λ©μλλ₯Ό κΈ°μ€μΌλ‘ λμνλ€λ μ¬μ€μ μ μ μλ€.
1. Spring AOPλ νλ‘μ κ°μ²΄λ₯Ό μλμΌλ‘ μμ±ν΄μ£Όμ΄, Aspect/Adviceμ μ§μ μ μΌλ‘ μμ‘΄νμ§ μκ² ν΄μ€λ€.
2. @Transactional λ Spring AOP μ€ νλλ‘ νλ‘μ λ°©μμΌλ‘ λμνλ€.
- μλ³Έ ν΄λμ€/μΈν°νμ΄μ€λ₯Ό μμ λ°μ νλ‘μλ₯Ό μμ±νκΈ° λλ¬Έμ μ κ·Ό μ μ΄κ° privateμΌλ‘ λμ΄ μμΌλ©΄ μλλ€.
- κ°μ²΄ μΈλΆμμ μ²μμΌλ‘ μ§μ νλ λ©μλμ νΈλμμ μ²λ¦¬κ° λμ΄ μμ΄μΌ, ν΄λΉ μμ²μ νλ‘μ κ°μ²΄κ° λμ μ²λ¦¬ν μ μλ€. λ°λΌμ νΈλμμ μ κ°μ²΄ μΈλΆμμ μ²μ μ§μ νλ λ©μλλ₯Ό κΈ°μ€μΌλ‘ λμνλ€.
μΆμ²
https://velog.io/@ann0905/AOP%EC%99%80-Transactional%EC%9D%98-%EB%8F%99%EC%9E%91-%EC%9B%90%EB%A6%AC
'π CS [ComputerScience] > π CS λ©΄μ ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
π [CSλ©΄μ ] μΉ λ©΄μ μ§λ¬Έ [9] [Servlet] (0) | 2024.02.29 |
---|---|
π [CSλ©΄μ ] μΉ λ©΄μ μ§λ¬Έ [8] [OSI 7 Layer] (0) | 2024.02.28 |
π [CSλ©΄μ ] μΉ λ©΄μ μ§λ¬Έ [6] [Data Base] (0) | 2024.02.04 |
π [CSλ©΄μ ] μΉ λ©΄μ μ§λ¬Έ [5] [Spring AOP] (1) | 2024.02.01 |
π [CSλ©΄μ ] μΉ λ©΄μ μ§λ¬Έ [4] [MSA] (0) | 2024.01.30 |