- Spring Transaction 42022년 09월 28일
- starryeye
- 작성자
- 2022.09.28.:16
트랜잭션 내부 로직 수행도중... 예외가 터지면 어떻게 될까..?
예외가 발생할 경우의 트랜잭션 처리에 대해 알아보자..
앞선 @Controller, @Service, @Repository 포스팅에서 잠시 알아보긴 했었다..
https://starryeye.tistory.com/97
더 자세하게 알아보자..
스프링 트랜잭션 AOP는 예외 종류에 따라 트랜잭션을 커밋하거나 롤백한다.
<참고>
Java의 예외
이전 포스팅 https://starryeye.tistory.com/52 참조
언체크 예외(RuntimeException, Error와 그 하위 예외)
-> 트랜잭션 롤백
체크 예외(Exception과 그 하위 예외)
-> 트랜잭션 커밋
스프링은 기본적으로 체크 예외는 비즈니스 의미가 있을 때 사용하고,
언체크 예외(런타임 예외)는 복구 불가능한 예외로 가정한다.
예를 들면..
사용자가 주문을 하는데 결제 잔고가 부족할 경우의 예외를 생각해보자..
이 경우는 시스템에 문제가 있어서 발생하는 예외가 아니다.
시스템은 정상동작이고 비즈니스 상황에서 문제가 있는 경우이다.
따라서, 이 경우엔 체크 예외로 두고 try-catch 등으로 예외를 잡아서
다른 로직을 태워야 하는 것이다.
(주문한 데이터를 보존하고 다른 결제방식으로 유도해야함)
-> 물론.. 예외로 처리하지 않고 어떤 리턴이나 로직으로 처리 해도 된다.
체크 예외이지만 롤백을 하고싶다?
-> @Transaction(rollbackFor = 예외클래스명.class) 사용
그 반대는 noRollbackFor 요소
'Spring > DB, Cache 연동' 카테고리의 다른 글
JPA 핵심 정리 - 정의 (0) 2023.02.22 Spring Transaction 5 (0) 2022.09.28 Spring Transaction 3 (0) 2022.09.22 Spring Transaction 2 (0) 2022.09.22 Spring Transaction 1 (0) 2022.09.22 다음글이전글이전 글이 없습니다.댓글