뉴렉처 과정 기록 (Backend)/Spring

06/11 Spring 스프링 트랜잭션 2 (전파모드, Isolation 고립성)

yeonee3219 2021. 6. 11. 10:23

 

 

 

 SUPPORTS 

   -> 두개 이상의 문장을 실행하고 있음에도 불구하고 Supports로 하면

       트랜잭션을 물고들어오면 유지하는데 지원하겠고 , 나 혼자서는 트랜잭션 안지키겠다 (원자성 안지킴) 

 

 REQUIRED 

   -> 트랜잭션을 물고들어오면 유지하는데 지원하겠고 , 나 혼자서도 트랜잭션 지키겠다

       (기본옵션) 전파옵션 설정하지 않으면 알아서 선택되는 옵션임

 

 REQUIRED_NEW 

   -> 물고들어오는 트랜잭션 ? 모르겠고 내꺼는 새로운 트랜잭션 만듬

 

 NOT_SUPPORTED 

   -> 트랜잭션 지원 안할거임

 

 NEVER 

   -> 트랜잭션 하면 에러낼거임! 문제일으킬거임!

 

 MANDATORY 

   -> 트랜잭션 물고 들어오지 않으면 화낼거임 / 나혼자는 트랜잭션 마련하지 않을거임

       나를 호출하는 녀석은 트랜잭션을 무조건 가지고 있어야 함 (독단적으로 사용되지 않음)

 

NESTED

   -> 트랜잭션을 중첩해서 실행함 

 

 

이런식으로 설정하면 됨

 

 

 

 

 

 

 

 

 

이제 고립도에 관련해서....

 

 

이런식으로 설정

 

 

 

지원되는 고립도 수준은 네가지 정도

 

1. READ UNCOMMITTED (Dirty reads are allowed)

 -> dirty read를 읽는다고 함

 

2. READ COMMITTED (Phenomenon can occur)

 -> Phenomenon가 발생함 - dirty read는 발생하지 않지만

 

내가 읽어들이는 레코드 다른애가 와서 지울 수 없게끔 락을 걸어야 함

 

 

 

3. REPEATABLE READ (Phanotom reads can occur) - 기본옵션

 -> Phanotom 가 발생 

 

내가 읽어들인 행에 대해서 락을 거는 것

 

 

 

 

4. SERIALIZABLE 

 -> 테이블 전체를 락을 걸어버림( 고립도 끝판왕 - 성능되게 안좋음)

     ex) 내가 화장실쓸거니까 이 건물에 들어오지마