μΌ | μ | ν | μ | λͺ© | κΈ | ν |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- νμ΄νλ‘κ·Έλλ°
- spring data jpa
- μλ°
- Publishing
- HTML
- μλ£κ΅¬μ‘°
- λ°μΌλ¦¬μ½λ©
- κΉνλΈ
- λ°±μ€μκ³ λ¦¬μ¦
- testing
- Spring Data JDBC
- λ°±μλ
- μ€νλ§
- CSS
- μ λ€λ¦μ€
- CLIλͺ λ Ήμ΄
- λ¬Έμμ΄λ€μ§κΈ°
- κ±°λμ κ³±
- FilterChain
- κ³μ°κΈ°λ§λ€κΈ°
- μκ³ λ¦¬μ¦
- fibonacci
- 그리λ
- 컬λ μ νλ μμν¬
- 첫κΈμλλ¬Έμ
- νκ³
- λΆνΈμΊ ν
- μΈν 리μ μ΄
- Spring Security
- java
Archives
- Today
- Total
λμ λͺ¨μ
052 | Transaction λ³Έλ¬Έ
πνΈλμμ μ΄λ?
- μ¬λ¬κ°μ μμ λ€μ νλλ‘ λ¬Άμ΄μ μ²λ¦¬νλ μ²λ¦¬ λ¨μμ΄λ€.
- λ°μ΄ν°μ 무결μ±μ 보μ₯νλ ν΅μ¬μ μΈ μν μ νλ€.
𧩠ACID μμΉ
- μμμ±(Atomicity)
- νλμ λ Όλ¦¬μ κΈ°λ₯μ μννκΈ° μν μμ μ κΈ°λ³Έ λ¨μμ΄λ€.
- μν λ³νλ All or Nothing λ μ€ νλλ‘ μ²λ¦¬λμ΄μΌ νλ€.
- μΌκ΄μ±(Consistency)
- νΈλμμ μ±κ³΅ ν μΌκ΄λ DB μνλ₯Ό 보쑴ν΄μΌ νλ€.
- κ³ λ¦½μ±(Isolation)
- μ¬λ¬ κ°μ νΈλμμ μ΄ μ€νλ κ²½μ° κ°κ° λ 립μ μΌλ‘ μ€νμ΄ λμ΄μΌ νλ€.
- μ§μμ±(Durability)
- νΈλμμ μ±κ³΅ ν κ²°κ³Όλ μ§μμ μΌλ‘ DBμ μ μ₯λμ΄μΌ νλ€.
𧩠컀λ°(commit)
- λͺ¨λ μμ μ DBμ μ΅μ’ λ°μνλ λͺ λ Ήμ΄μ΄λ€.
- commitμ νλ©΄ λ³κ²½λ λ΄μ©μ΄ λ°μ΄ν°λ² μ΄μ€μ μꡬμ μΌλ‘ μ μ₯λ ν μ’ λ£λλ€.
- commitμ νμ§ μμΌλ©΄ μμ μ κ²°κ³Όκ° λ°μ΄ν°λ² μ΄μ€μ μ΅μ’ μ μΌλ‘ λ°μλμ§ μκ³ μ’ λ£λλ€.
𧩠둀백(rollback)
- μμ μ€ λ¬Έμ κ° λ°μλλ©΄ μνλ μμ λ€μ μ·¨μνκ³ νΈλμμ μμ μ΄μ μνλ‘ λλμκ°λ€.
@Configuration
public class Entity {
private EntityManager
private EntityTransaction tx;
@Bean
public CommandLineRunner jpaRunner(EntityManagerFactory emFactory){
this.em = emFactory.createEntityManager();
this.tx = em.getTransaction();
return args -> {
tx.begin();
// transaction
tx.commit();
};
}
}
πAnnotation Transaction
- Springμμ κ°μ₯ κ°λ¨νκ² νΈλμμ μ μ μ©ν μ μλ λ°©λ²μΌλ‘, @Transactionalμ μ¬μ©νλ€.
@Service
@Transactional
public class Service {
// ...
}
- JPA λ‘κ·Έ λ 벨 μ€μ
- application.ymlμ μ€μ μ μΆκ°νλ©΄ νΈλμμ λ‘κ·Έλ₯Ό νμΈν μ μλ€.
- λ‘κ·Έ λ 벨μ βDEBUGβ λ λ²¨λ‘ μ€μ νλ©΄ JPA λ΄λΆμμ μ§μ ν λΆλΆμ λ‘κ·Έλ₯Ό νμΈν μ μλ€.
- loggingνκ·Έλ μ΅μμ λ 벨μ΄λ―λ‘ ν μμ΄ μΌμͺ½μ λΆμ¬μ μ¨μΌ νλ€.
logging:
level:
org:
springframework:
orm:
jpa: DEBUG
𧩠ν΄λμ€ λ 벨
- νΈλμμ
μ μ© νμΈ
- Creating new transaction: μλ‘μ΄ νΈλμμ μμ±
- Committing JPA transaction on EntityManager: μ»€λ° μ€νμ€
- after transaction: νΈλμμ μ’ λ£
- Closing JPA EntityManager: JPA EntityManager μ’ λ£μ€
- μμΈ λμ§κΈ° - RuntimeException


- check exception
- @Transactional μ λν μ΄μ λ§ μΆκ°ν΄μλ rollbackμ΄ λμ§ μλλ€.
- λ³λμ μμΈ μ²λ¦¬λ₯Ό νμ§ μμλ λλ€λ©΄ @Transactional(rollbackFor = {Exception1.class, Exception2.class, ...})μ κ°μ΄ ν΄λΉ μ²΄ν¬ μμΈλ₯Ό μ§μ μ§μ ν΄μ£Όκ±°λ μΈμ²΄ν¬ μμΈ(unchecked exception)λ₯Ό νμ©ν΄ rollbackμ΄ λμνλλ‘ ν μ μλ€.
𧩠λ©μλ λ 벨
@Transactional(readOnly = true)
public Entity findEntity(long Id) {
return findVerifiedEntity(Id);
}
- @Transactional(readOnly = true)λ νΈλμμ μ μ½κΈ° μ μ©μΌλ‘ μ€ννλ€. JPA λ΄λΆμ μΌλ‘ μμμ± μ»¨ν μ€νΈλ₯Ό flushνμ§ μλλ€. λ μ½κΈ° μ μ© νΈλμμ μΌ κ²½μ°, λ³κ²½ κ°μ§λ₯Ό μν μ€λ μ· μμ±λ μ§ννμ§ μλλ€.
- μ½κΈ° μ μ© νΈλμμ μΌ λλ λ³κ²½κ°μ§λ₯Ό νμ§ μμ λΆνμν μΆκ° λμμ μ€μΌ μ μκΈ° λλ¬Έμ find~() λ©μλμλ JPA μ체μ μΌλ‘ μ±λ₯μ μ΅μ ννκΈ° λλ¬Έμ readOnlyλ₯Ό trueλ‘ μ§μ νλκ²μ΄ μ’λ€.
𧩠νΈλμμ μ μ© μμ
- μ°μ μμ : ν΄λμ€λ 벨 < λ©μλλ 벨
𧩠νΈλμμ μ ν(Transaction Propagation)
- νΈλμμ μ κ²½κ³μμ μ§ν μ€μΈ νΈλμμ μ΄ μ‘΄μ¬νκ±°λ μ‘΄μ¬νμ§ μμ λ, μ΄λ»κ² λμν κ²μΈμ§ κ²°μ νλ λ°©μμ΄λ€. νΈλμμ μ΄ νλλ§ μλ€λ©΄ λ€λ₯Έ νΈλμμ μ μ κ²½ μΈ νμκ° μμ§λ§ νΈλμμ μ΄ nκ° μ΄μ λ μμ μ μλ€λ©΄ κ²½κ³μμ μν©μ λ°λΌ λ€λ₯΄κ² λμ²ν΄μΌ νλ€.
- νΈλμμ
μ νλ propagation Attributeλ₯Ό ν΅ν΄μ μ€μ ν μ μλ€.
- Propagation.REQUIRED (default): μ§ν μ€μΈ νΈλμμ μ΄ μμΌλ©΄ ν΄λΉ νΈλμμ μ μ°Έμ¬νκ³ μ§ν μ€μΈ νΈλμμ μ΄ μμΌλ©΄ μλ‘ μμ±νλ€.
- Propagation.REQUIRES_NEW: μ΄λ―Έ μ§νμ€μΈ νΈλμμ κ³Ό 무κ΄νκ² μλ‘μ΄ νΈλμμ μ΄ μμλλ€. κΈ°μ‘΄μ μ§νμ€μ΄λ νΈλμμ μ μλ‘ μμλ νΈλμμ μ΄ μ’ λ£ν λκΉμ§ μ€μ§λλ€.
- Propagation.MANDATORY: μ§ν μ€μΈ νΈλμμ μ΄ μμΌλ©΄ μμΈλ₯Ό λ°μμν¨λ€.
- Propagation.NOT_SUPPORTED: μ§ν μ€μΈ νΈλμμ μ΄ μμΌλ©΄ λ©μλ μ€νμ΄ μ’ λ£λ λ κΉμ§ μ€μ§λκ³ , λ©μλ μ€νμ΄ μ’ λ£λλ©΄ κ³μ μ§ννλ€.
- Propagation.NEVER: νΈλμμ μ μ¬μ©νμ§ μκ³ , μ§ν μ€μΈ νΈλμμ μ΄ μ‘΄μ¬ν κ²½μ°μλ μμΈλ₯Ό λ°μν¨λ€.
𧩠νΈλμμ 격리 μμ€(Isolation Level)
- νΈλμμ
μ λ€λ₯Έ νΈλμμ
μ μν₯μ μ£Όμ§ μκ³ κ²©λ¦¬μ±(λ
립μ μΌλ‘ μ€ν)μ΄ λ³΄μ₯λμ΄μΌ νλ€. κ·Έλμ Springμ μ¬λ¬ νΈλμμ
μ΄ λμμ μ€νλ λ 격리μ±μ μ‘°μ ν μ μκ² @Transactionalμμ isolation Attributeλ₯Ό μ 곡νκ³ μλ€.
- Isolation.DEFAULT (default): λ°μ΄ν°λ² μ΄μ€μμ μ 곡νλ κΈ°λ³Έ κ°μ΄λ€.
- Isolation.READ_UNCOMMITTED: λ€λ₯Έ νΈλμμ μμ 컀λ°νμ§ μμ λ°μ΄ν°λ₯Ό μ½λ κ²μ νμ©νλ€.
- Isolation.READ_COMMITTED: λ€λ₯Έ νΈλμμ μ μν΄ μ»€λ°λ λ°μ΄ν°λ₯Ό μ½λ κ²μ νμ©νλ€.
- Isolation.REPEATABLE_READ: λμμ λ΄μμ ν λ² μ‘°νν λ°μ΄ν°λ₯Ό λ°λ³΅ν΄μ μ‘°νν΄λ κ°μ λ°μ΄ν°κ° μ‘°νλλλ‘ νλ€.
- Isolation.SERIALIZABLE: λμΌν λ°μ΄ν°μ λν΄μ λμμ λ κ° μ΄μμ νΈλμμ μ΄ μνλμ§ λͺ»νλλ‘ νλ€.
πAOP Transaction
- @Transactionalμ λΉμ¦λμ€ λ‘μ§μ μ μ©νμ§ μκ³ νΈλμμ μ μ μ©νλ λ°©λ²μ΄λ€.
- AOP ꡬμ±
- Advisor: Adviceμ pointcut ν¬ν¨νκ³ μλ€.
- Pointcut: λΉμ¦λμ€ λ‘μ§μ μ 보λ₯Ό κ°μ§κ³ μλ€.
- Advice: pointcutμμ μ€νλ 곡ν΅κ΄μ¬μ¬μ΄λ€.
'SEB > TIL' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
058 | Asciidocs, Asciidoctor (2) | 2022.09.15 |
---|---|
057 | API Documentation, Swagger, SpringRest (0) | 2022.09.14 |
046 | Spring Data JDBC (0) | 2022.08.26 |
045 | Checked / Unchecked / Customised Exception (0) | 2022.08.25 |
044 | Exception Handling in Spring MVC (0) | 2022.08.24 |