상세 컨텐츠

본문 제목

[Spring] @Transactional

😎 지식/자바_스프링_테스트☕

by :부셔져버린개발자 2024. 12. 13. 17:35

본문

트랜잭션 격리 수준 (Isolation Level)

DEFAULT : 기본 격리 수준
READ_UNCOMMITED : 아직 커밋되지 않은 데이터를 읽을 수 있음

READ_COMMITED : Dirty Read를 방지하기 위해 Commit된 데이터만 읽을 수 있음

REPEATABLE READ트랜잭션이 완료될 때까지 조회한 모든 데이터에 shared lock이 걸리므로 트랜잭션이 종료될 때까지 다른 트랜잭션은 그 영역에 해당하는 데이터를 수정할 수 없음

SERIALIZABLE : 엄격한 트랜잭션 격리수준, 완벽한 읽기 일관성 모드 제공, PHANTOM READ 상태가 발생하지 않지만 동시성 처리 성능이 급격히 떨어질 수 있음
 

트랜잭션 전파 옵션 (Propagation)

어떤 트랜잭션이 동작중인 과정에서 다른 트랜잭션을 실행할 경우 어떻게 처리하는 가


REQUIRED
 : 이미 시작된 트랜잭션이 있으면 참여하고, 없으면 새로운 트랜잭션 시작

SUPPORTS : 이미 시작된 트랜잭션이 있으면 참여하고, 없으면 트랜잭션 없이 처리

REQUIRED_NEW : 항상 새로운 트랜잭션 시작, 이미 진행중인 트랜잭션이 있다면 잠시 보류

MANDATORY : 이미 시작된 트랜잭션이 있으면 참여하고, 없으면 새로운 트랜잭션을 시작하는 대신 예외를 발생시킴. 혼자서는 독립적으로 수행되면 안되는 경우에 사용

NOT_SUPPORTED : 트랜잭션을 사용하지 않고 처리함. 이미 진행중인 트랜잭션이 있다면 잠시 보류

NEVER : 트랜잭션을 사용하지 않도록 강제함. 이미 진행 중인 트랜잭션 또한 허용하지 않으며 있다면 예외 발생시킴

NESTED : 이미 실행중인 트랜잭션이 있다면 중첩하여 트랜잭션을 진행함. 부모 트랜잭션은 중첩 트랜잭션에 영향을 주지만 중첩 트랜잭션은 부모 트랜잭션에 영향을 주지 않음
 

readOnly 옵션

읽기 옵션을 설정하면 트랜잭션이 커밋되어도 영속성 컨텍스트를 Flush하지 않음
플러시할 때 수행되는 엔티티의 스냅샷 비교 로직이 수행되지 않으므로 성능을 향상 시킬 수 있음
 
 
 
 
 


 
https://docs.spring.io/spring-framework/reference/data-access/transaction/declarative/annotations.html#transaction-declarative-annotations-method-visibility

Using @Transactional :: Spring Framework

The @Transactional annotation is metadata that specifies that an interface, class, or method must have transactional semantics (for example, "start a brand new read-only transaction when this method is invoked, suspending any existing transaction"). The de

docs.spring.io

 


https://github.com/Eundms/learn-spring

GitHub - Eundms/learn-spring

Contribute to Eundms/learn-spring development by creating an account on GitHub.

github.com

 

728x90

관련글 더보기