π± Spring @Transactional λμ μ리 λ° ν΅μ¬ μ»΄ν¬λνΈ
λͺ©μ°¨
1. νΈλμμ κΈ°μ΄ λ° μλ μ μ΄
νΈλμμ μ DB μνλ₯Ό λ³νμν€λ νλμ λ Όλ¦¬μ μμ λ¨μλ‘, μμμ±(All or Nothing)μ 보μ₯ν΄μΌ ν©λλ€.
β οΈ μλ μ μ΄μ λ¬Έμ μ
connection.setAutoCommit(false);
try {
// λΉμ¦λμ€ λ‘μ§
connection.commit();
} catch (Exception e) {
connection.rollback();
}
ν΅μ¬ λ‘μ§μ νΈλμμ μ½λκ° μμ¬ κ°λ μ±μ΄ λ¨μ΄μ§κ³ μ€λ³΅ μ½λκ° λ°μν©λλ€.
2. @Transactional λμ μ리
μ€νλ§μ μ μΈμ νΈλμμ λ°©μμ μ¬μ©νλ©°, λ΄λΆμ μΌλ‘λ AOPμ νλ‘μ ν¨ν΄μ ν΅ν΄ λμν©λλ€.
- νλ‘μ κ°μ²΄: νκ² λ©μλλ₯Ό κ°μΈμ μ€ννλ©°, νΈλμμ μμκ³Ό μ’ λ£(commit/rollback)λ₯Ό λμ μ²λ¦¬ν©λλ€.
- λΉ νμ²λ¦¬κΈ°(BeanPostProcessor): μ€νλ§ λΉ μμ± μμ μ
@Transactionalμ΄ λΆμ ν΄λμ€λ₯Ό νλ‘μ κ°μ²΄λ‘ κ΅μ²΄νμ¬ λ±λ‘ν©λλ€.
3. ν΅μ¬ μ»΄ν¬λνΈ
Transaction Manager
νλ«νΌλ³(JPA, JDBC λ±) νΈλμμ μ²λ¦¬λ₯Ό μΆμνν μΈν°νμ΄μ€μ λλ€. κΈ°μ μ΄ λ°λμ΄λ μλΉμ€ λ‘μ§μ μμ ν νμκ° μμ΅λλ€.
Transaction Synchronization Manager
νΈλμμ λμ λμΌν 컀λ₯μ μ μ μ§νλλ‘ κ΄λ¦¬νλ 보κ΄μμ λλ€. κ°μ νΈλμμ λ΄μ μ¬λ¬ λ©μλκ° μμ νκ² μ»€λ₯μ μ 곡μ ν©λλ€.
Weaving (μλΉ)
νλ‘μλ₯Ό ν΅ν΄ λΆκ° κΈ°λ₯(νΈλμμ )μ μ€μ νκ² λ‘μ§μ μ°κ²°νλ ν΅μ¬ λ©μ»€λμ¦μ λλ€.
4. μ 체 μ€ν νλ¦λ
↓
λΉ νμ²λ¦¬κΈ°κ° νλ‘μ μμ±
↓
ν΄λΌμ΄μΈνΈ → νλ‘μ νΈμΆ
↓
νλ‘μ: Transaction Managerμκ² νΈλμμ μμ μμ²
↓
Synchronization Manager: 컀λ₯μ 보κ΄
↓
μ€μ λ©μλ μ€ν
↓
μ±κ³΅ → commit / μ€ν¨ → rollback
ν΅μ¬ μμ½ π‘
@Transactionalμ λ¨μν μ΄λ
Έν
μ΄μ
μ λμ΄, μ€νλ§μ AOPμ μΆμν κΈ°μ (Manager)μ΄ μ§μ½λ κΈ°λ₯μ
λλ€. μ΄λ₯Ό ν΅ν΄ κ°λ°μλ λ°μ΄ν° μ ν©μ± κ±±μ μμ΄ λΉμ¦λμ€ λ‘μ§μλ§ μ¨μ ν μ§μ€ν μ μμ΅λλ€.
'β Backend > Spring, Spring Boot' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| [Spring] Spring AOP (0) | 2026.03.31 |
|---|---|
| [μ€νλ§] νλ‘ν(Profile)μ΄λ? (1) | 2025.07.08 |
| [μ€νλ§] @RequestParam μ΄λ Έν μ΄μ (0) | 2025.07.03 |
| [μ€νλ§] μμ² λ§€ν μ΄λ Έν μ΄μ (0) | 2025.07.03 |
| [μ€νλ§] @ResponseBody, ResponseEntity (1) | 2025.07.03 |