상세 컨텐츠

본문 제목

[전문가를 위한 스프링5] 9.3 트랜잭션 프로퍼티 살펴보기

용어 공부

by dajingjing 2023. 11. 15. 22:10

본문

[전문가를 위한 스프링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가 설정된 것처럼 실행됩니다.

 

관련글 더보기