TIL (Today I learned
2024/01/25 목요일 TIL Spring boot @Transactional Annotation
코딩준우
2024. 1. 25. 21:53
@Transactional
트랜잭션이 필요한 영역에 추가한다.
클래스 레벨, 메서드 레벨에 @Transactional을 적용할 수 있다.
- 클래스 레벨에만 @Transactional이 적용된 경우, 해당 클래스의 모든 메서드에 일괄 적용된다.
- 클래스 레벨과 메서드 레벨에 @Transactional이 함께 적용된 경우, 메서드 레벨의 @Transactional만 적용되며, 만약 메서드레벨에 @Transactional이 적용되지 않으면, 클래스 레벨의 @Transactional이 적용된다.
readOnly attribute
- @Transactional(readOnly = true)
- 읽기 전용 트랜잭션이 적용되며, 주로 조회하는 메서드(Get method)에 사용한다.
- commit만 진행되고, flush와 스냅샷 생성을 하지않으므로 불필요한 추가 동작을 줄일 수 있다.
propagation attribute
- 트랜잭션 전파(Transaction Propagation)
- 트랜잭션의 경계에서 진행 중인 트랜잭션이 존재할 때 또는 존재하지 않을 때, 어떻게 동작할 것인지 결정하는 방식
- 일반적으로 Propagation.REQUIRED을 많이 사용하며, 진행 중인 트랜잭션이 없으면 새로 시작하고, 진행 중인 트랜잭션이 있으면 해당 트랜잭션에 참여한다.
- 서로 다른 클래스에 존재하는 여러 개의 작업을, 하나의 트랜잭션으로 묶기 위해 사용한다
- isolation attribute
- 트랜잭션 격리 레벨(Isolation Level)
- ACID 원칙 중 격리성에 관한 속성이다
- (격리성 : 트랜잭션은 다른 트랜잭션에 영향을 주지 않고, 독립적으로 실행되어야 한다)
- Isolation.DEFAULT : 데이터베이스에서 제공하는 기본 값
- Isolation.READ_UNCOMMITTED : 다른 트랜잭션에서 커밋하지 않은 데이터를 읽는 것을 허용한다
- Isolation.READ_COMMITTED : 다른 트랜잭션에 의해 커밋된 데이터를 읽는 것을 허용한다
- Isolation.REPEATABLE_READ : 트랜잭션 내에서 한 번 조회한 데이터를 반복해서 조회해도 같은 데이터가 조회되도록 한다
- Isolation.SERIALIZABLE : 동일한 데이터에 대해서 동시에 두 개 이상의 트랜잭션이 수행되지 못하도록 한다