토비의 스프링을 진짜 오랜만에 펼쳐봤다,,

앞에만 보고 덮었었는데 

뒤에 알아야되는 내용이 그득 했다,, 

앞으로도 사전처럼 두고 봐야지 ㅎ_ㅎ

 


 

이번 포스팅은 @Transactional 속성에 대해서 알아보려고한당 (feat. 토비의 스프링~)

 

트랜잭션이란? 더 이상 쪼갤 수 없는 최소 단위의 작업

 

트랜잭션 매니저에서 트랜잭션을 가져올때 사용한 오브젝트는 DefaultTransactionDefinition이다.

 

Transaction status = this.transactionManager.getTransaction( new DefaultTransactionDefinition());

DefaultTransactionDefinition이 구현하고 있는 TrasactionDefinition  인터페이스는 트랜잭션 동작방식에 영향을 줄 수 있는 네가지 속성을 정의하고있다.

 


1. 트랜잭션 전파 ( Transaction propagation)

: 트랜잭션 경계에서 이미 진행중인 트랜잭션이 있을 떄 또는 없을 떄 어떻게 동작할 것인가를 결정하는 방식

 

 

  • PROPAGATION_REQUIRED

:진행 중인 트랜잭션이 없으면 새로 시작하고, 이미 시작된 트랜잭션이 있으면 이에 참여한다

 

DefaultTransactionDefinition의 트랜잭션 전파 속성

 

  • PROPAGATION_REQUIRES_NEW

: 항상 새로운 트랜잭션을 시작한다

독립적인 트랜잭션이 보장돼야 하는 코드에 적용

 

 

  • PROPAGATION_NOT_SUPPORTED

: 트랜잭션 없이 동작하도록, 진행중인 트랜잭션이 있어도 무시한다.

 

 

=> 트랜잭션 매니저를 통해 트랜잭션을 시작할때, getTransaction()을 사용하는 이유는 바로 이 트랜잭션 전파 속성이 있기 때문이다. 

 

  • PROPAGATION_SUPPORT : 부모 트랜잭션 내에서 실행, 부모 트랜잭션이 없을 경우, notransactionally로 실행
  • PROPAGATION_MANDATORY : 부모 트랜잭션 내에서 실행되며, 부모 트랜잭션이 없을 경우 예외 발생
  • PROPAGATION_NEVER : notransactionally로 실행되며 부모 트랜잭션이 존재한다면 예외 발생

2. 격리 수준

: 모든 DB 트랜잭션은 격리수준 (isolation levlel)을 가지고 있어야 한다. 

 

성능을 위해서 적절하게 격리수준을 조정해서 가능한 한 많으 트랜잭션을 동시에 진행시키면서도 문제가 발생하지 않게 하는 제어가 필요하다. 

 

격리수준은 기본적으로 DB에 설정, JDBC드라이버나 DataSource 등에서 재설정, 필요하다면 트랜잭션 단위로 조정!

 

 

DefaultTransactionDefinition에 설정된 격리수준은 ISOLATION_DEFAULT이다. 이는 DataSource설정되어 있는 디폴트 격리수준을 따른다.

 

블로그에서 더찾아볼때 더있는데,, 모르겠당 @_@

 


3. 제한시간

: 트랜잭션의 수행하는 제한시간을 설정할 수 있다. 

DefaultTransactionDefinition의 기본설정은 제한시간 음슴..

 

 

 


4. 읽기 전용

: 읽기전용(read only)로 설정하면 트랜잭션내 데이터 조작시도를 막을 수 있다. 성능이 향상 될수도 있다. 

 


 

스프링이 제공하는 TransactonInterceptor에는 예외처리 두가지 방법이 있다.

 

1. 런타임 예외 발생 -> 트랜잭션 롤백

2. 체크예외 -> 예외상황으로 해석하지 않는다. 의미가 있는 리턴방식의 한가지로 인식해서 트랜잭션을 커밋한다.

 

 

 


@Transactional 어노테이션은 인터페이스, 클래스, 메소드에 쓸 수 있다. 

 

해당 구현한 클래스에서도 모두 @Transactionl 어노테이션을 쓰고 싶으면 인터페이스에,

클래스에서만 쓰고 싶으면 클래스에

메소드별로 따로 가지고 가고싶으면 메소드에 쓰면된다

 

나같음 클래스나,,, 메소드 정도로만 쓸듯,,하다

 

 

 


 

ㅎㅎ 토비의 스프링을 보니깐 이해가 그래도 잘되는거 같당~

계속 읽어봐야짓 ㅎㅅㅎ 

 

 

 

 

+ Recent posts