[전문가를 위한 스프링5]
9장 트랜잭션 관리
9.3 트랜잭션 살펴보기
9.3.1 TransactionDefinition 인터페이스
※ 표 9-1. 트랜잭션 격리 수준.
[격리 수준]
- ISOLATION_DEFAULT
: 데이터 저장소의 기본 격리 수준입니다.
- ISOLATION_READ_UNCOMMITTED
: 가장 낮은 수준의 격리입니다.
이 트랜잭션은 다른 트랜잭션이 아직 커밋하지 않은 수정 데이터를 볼 수 있으므로 트랜잭션 기능을 거의 수행하지 않습니다.
- ISOLATION_READ_COMMITTED
: 대부분의 데이터베이스에서 기본 수준입니다.
트랜잭션은 다른 트랜잭션이 커밋하지 않은 데이터는 읽을 수 없습니다.
하지만 어떤 트랜잭션이 특정 데이터를 읽은 상태에서 다른 트랜잭션이 해당 데이터를 수정할 수 있습니다.
- ISOLATION_REFEATABLE_READ
: ISOLATION_READ_COMMITTED 보다 엄격합니다.
트랜잭션 내에서 일단 한 번 데이터를 읽어오면 다시 읽어올 때마다 동일한 데이터를 읽어옵니다.
한 트랜잭션이 읽은 데이터를 다른 트랜잭션이 수정할 수 없지만 새 데이터를 삽입할 수는 있으며
이렇게 새로 삽입된 데이터는 다른 트랜잭션에서도 읽을 수 있습니다.
- ISOLATION_SERIALIZABLE
: 가장 비용이 크고 신뢰할 수 있는 격리 수준입니다.
모든 트랜잭션은 하나씩 차례대로 실행되는 것처럼 처리됩니다.
-> 가장 높은 격리 수준이며, 유지보수 비용이 많이 듭니다.
---------------------------------------------------------
*getPropagationBehavior() 메서드는 현재 이미 시작돼 진행 중인 트랜잭션이 있는지 없는지에 따라
새 트랜잭션 호풀이 발생할 때 어떻게 처리할지 지정한다.(표 9-2)
※ 표 9-2 트랜잭션 전파 유형.
[전파 유형]
- PROPAGATION_REQUIRED
: 이미 존재하는 트랜잭션을 지원합니다.
트랜잭션이 없으면 새 트랜잭션이 시작됩니다.
- PROPAGATION_SUPPORTS
: 이미 존재하는 트랜잭션을 지원합니다.
트랜잭션이 없으면 비트랜잭션으로(nontransactionally) 실행됩니다.
- PROPAGATION_MANDATORY
: 이미 존재하는 트랜잭션을 지원합니다.
진행 중인 트랜잭션이 없으면 예외를 던집니다.
- PROPAGATION_REQUIRED_NEW
: 항상 새로운 트랜잭션을 시작합니다.
진행 중인 트랜잭션이 있다면 해당 트랜잭션은 일시적으로 중단됩니다.
- PROPAGATION_NOT_SUPPORTED
: 진행 중인 트랜잭션과 함께 실행할 수 없습니다.
항상 비트랜잭션으로 실행하고 기존 트랜잭션을 일시 중단합니다.
- PROPAGATION_NEVER
: 진행 중인 트랜잭션이 있더라도 항상 비트랜잭션으로 실행됩니다.
진행 중인 트랜잭션이 존재하는 경우는 예외를 던집니다.
- PROPAGATION_NESTED
: 진행 중인 트랜잭션이 있는 경우 중첩 트랜잭션(nested transaction)으로 실행됩니다.
진행 중인 트랜잭션이 없으면 PROPAGATION_REQUIRED가 설정된 것처럼 실행됩니다.
[전문가를 위한 스프링5] 11.2 hibernate annotation @type error (0) | 2023.11.28 |
---|---|
[전문가를 위한 스프링5] HibernateException casting error (0) | 2023.10.17 |
[전문가를 위한 스프링5] 6장 MYSQL FUNCTION 생성 에러 (0) | 2023.10.05 |
[전문가를 위한 스프링5]스프링에서 제공하는 어드바이스 (0) | 2023.09.06 |
[전문가를 위한 스프링5] 자바 구성 애너테이션 목록 (0) | 2023.09.04 |