1. 서비스 계층의 분리 - 비지니스 로직의 분리

  계층 설명
  Controller 
( @Controller )
 Presentation Layer
 Spring MVC에서 사용자 요청을 받아 흐름을 제어.
  DAO
( @Service  )
Business Layer
트렌잭션 적용하기 적합
서비스 계층은 여러 컨트롤러에서 재사용 가능한 서비스를 제공하여 프레젠테이션 계층과 데이터 액세스 계층 간의 중재자 역할
(데이터 유효성 검사, 데이터 조작 및 데이터 처리와 같은 애플리케이션의 비즈니스 논리 구현을 담당)
  DAO 
( @Repository )
Persistance Layer
DB에 접근해서 DB를 다룸.


2. Transaction Manager란?

DAO의 각 메서드는 개별 Connection을 사용. 그런데, 트랜잭션은 1개의 Connection에서 이루져야함.
( why? 에러시 rollback처리해야하는데 개별이면 바로 commit하기에 불가능)

이 문제를 해결하기 위해 나온게 Transaction Manager


3. TransactionManager로 Transaction 적용하기


4. @Transactional : AOP를 이용한 핵심기능과 부가기능의 분리

@Transactional은 클래스나 인터페이스에도 붙일 수 있다. (즉 모든메서드에 적용 )

 


TransactionManager 직접생성

 


TransactionManager를  bean으로 등록 (root-context.xml)

 



 

 

 


5. @Transactional의 속성

  속성 설명
  propagation Tx의 경계 (boundary)를 설정하는 방법을 지정
  isolation Tx의 isolation level을 지정.
DEFAULT,
READ_UNCOMMTIED,
READ_COMMITTED,
REPEATEABLE_READ,
SERIALIZABLE
  readOnly Tx이 데이터를 읽기만 하는경우, true로 지정하면 성능이 향상
  rollbackFor 지정된 예외가 발생하면, Tx을 rollback
RuntimeException과 Error는 자동 rollback
  noRollbackFor 지정된 예외가 발생해도, Tx을 rollback하지 않음
  timeout 지정된 시간(초) 내에 Tx이 종료되지 않으면, Tx을 강제종료

6. propagation속성의 값

  설명
  REQUIRED Tx이 진행중이면 참여하고, 없으면 새로운 Tx시작 ( 디폴트 )
  REQUIRES_NEW Tx이 진행중 무관하게, 새로운 Tx시작 ( Tx안에 다른 Tx )
  NESTED Tx이 진행중이면, Tx의 내부 Tx으로 실행 ( Tx안에 subTx )
  MANDATORY 반드시 실행중인 Tx내에서만 실행가능. 아니면 예외발생
  SUPPORTS Tx이 진행중이건 아니건 상관없이 실행
  NOT_SUPPORTED Tx없이 처리. Tx이 진행중이면 잠시 중단 ( suspend )
  NEVER Tx없이 처리. Tx이 진행중이면 예외발생

7. REQUIRED와    REQUIRES_NEW 

REQUIRED


 REQUIRES_NEW 



@Transactional을 쓰지 않고, 직접 경계 설정

 

 

 

 


참고 :

남궁성, 스프링의 정석

+ Recent posts