[트랜잭션 전파(Transaction Propagation)]
: 트랜잭션의 경계에서 진행 중인 트랜잭션이 존재할 때 또는 존재하지 않을 때, 어떻게 동작할 것인지 결정하는 방식을 의미
: 트랜잭션의 동작을 설정하는데 사용
1. Propagtion.REQUIRED
: propagtion 유형의 디폴트 값
: 진행 중인 트랜잭션이 없으면 새로 시작하고, 진행 중인 트랜잭션이 있으면 해당 트랜잭션에 참여함
2. Propagation.REQUIRES_NEW
: 이미 진행중인 트랜잭션과 무관하게 새로운 트랜잭션이 시작되며, 기존에 진행중이던 트랜잭션은 새로 시작된 트랜잭션이 종료할 때까지 중지
3. Propagation.MANDATORY
: 진행중인 트랜잭션이 없으면 예외를 발생시킴
4. Propagation.*NOT_SUPPORTED*
: 트랜잭션을 필요로 하지 않음
: 진행중인 트랜잭션이 있으면 메서드 실행이 종료될 때까지 진행중인 트랜잭션은 중지되며, 메서드 실행 종료시 트랜잭션을 계속 진행
5. Propagation.*NEVER*
: 트랜잭션을 필요로 하지 않음
: 진행중인 트랜잭션이 존재할 경우 예외를 발생시킴
[트랜잭션 격리 레벨(Isolation Level)]
: ACID 원칙처럼 트랜잭션은 다른 트랜잭션에 영향을 주지 않고, 독립적으로 실행되어야 하는 격리성 보장이 필요함
이 격리성은 @Transactional 애너테이션에서 Isolation 애트리뷰트를 통해 제공함
1. Isolation.DEFAULT
: DB에서 제공하는 기본값
2. Isolation.READ_UNCOMMITTED
: 다른 트랜잭션에서 커밋하지 않은 데이터를 읽는 것을 허용
: 레벨 0
3. Isolation.READ_COMMITTED
: 다른 트랜잭션에 의해 커밋된 데이터를 읽는 것을 허용
: 레벨 1
4. Isolation.REPEATABLE.READ
: 트랜잭션 내에서 한 번 조회한 데이터를 반복해서 조회해도 같은 데이터가 조회되도록 함
: 레벨 2
5. Isolation.SERIALIZABLE
: 동일한 데이터에 대해서 동시에 두 개 이상의 트랜잭션이 수행되지 못하도록 함
: 레벨 3
'공부 자료 > Spring' 카테고리의 다른 글
[Spring Security] HTTPS (HTTP+Secure) (0) | 2022.11.22 |
---|---|
[Spring] 애너테이션 Annotation 정리 (계속 추가중) (1) | 2022.11.05 |
[Spring MVC] 트랜잭션 기본 및 적용 (0) | 2022.11.04 |
[Spring MVC] JPA / 영속성 컨텍스트 관련 JPA API (0) | 2022.11.01 |
[Java MVC] DDD(Domain Driven Design) (0) | 2022.10.30 |