본문 바로가기

공부 자료/Spring

[Spring MVC] 트랜잭션 전파/격리 레벨

[트랜잭션 전파(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