본문 바로가기
Programming/Spring

[Spring] Transaction

 

 

 

등록, 수정, 삭제 등을 한번에 처리해서 성공처리 해주는 것

■ transaction

★ service에서 제어한다!!

transaction begin

: autocmmit false
transaction 생성 -> Connection을 1~5번 공유 
: 개발자로 하여금 코드 생성에만 더 신경쓸 수 있도록 도와줌

ex) 주문하기 버튼 클릭

1) 주문 테이블 insert
2) 주문 상세 테이블 insert
3) 상품 테이블 재고량 감소(update)
4) 결제 테이블의 insert
5) 배송 테이블의 insert 

1) ~ 5)의 작업을 한번에 이루주는 것 

transaction end -  rollback? or commit?




■ AOP(Aspect Oriented Programming)

(핵심 기능들을 분리해놓는 것 (핵심 기능/ 공통기능))

- 공통 기능 - advice :

around, before, after, after-returning, after-throwing

- 핵심기능

  • 핵심기능 하나의 명칭 : joinpoint
  • 여러개의 joinpoint가 모여서 Pointcut이라 불림 (어드바이스의 타겟)

- springAOP.xml

<app:config>

- pointcut + Advice = Advisor

spring transsaction 모듈을 이미 AOP로 만들어져 있다. - 사전(transaction 시작), 사후처리(commit, rollback)


★ transaction의 대상은 service가 된다


 

▶ transaction의 동작원리
▶ PlatformTransactionManager
▶ pointcut의 메소드가 호출될 때 advisor을 적용해준다?
▶ 어떤 기준으로 커밋과 롤백을 해주는가? -> RuntimeExceptino 및 Error에 대해서만 롤백, 나머지 체크 예외에 대해서는 롤백하지 않는다.
즉, RuntimeExceptinon일 떄만 롤백이고 나머지 예외에는 롤백하지 않고 예외 발생 전까지 커밋한다.
▶ rollback-for/ no-rollback-for를 사용해서 롤백 여부를 커스텀마이징할 수 있다.


 

■ transaction rollback customize

  1. xml에 옵션 설정
  2. 메소드 위 Transaction(옵션 내용)
  3. 사용자 정의 예외일 경우 예외 자체를 RuntimeException로 설정하기
  4. 사용자 정의 예외가 RuntimeException가 아닌 경우 @Transactional(rollbackFor = MyException.class)로 예외 발생시 rollback 되도록 설정

주의... : throw new RuntimeException인 경우 controller의 Exception 메소드를 @ExceptionHandler(RuntimeException.class)으로 해야함


 

@RestController
@ResponseBody

주요기능
1) 가입
2) 로그인
3) banner 로딩
4) personal/ personal 메뉴는 로그인한 사용자들만