인프런 강의
트랜잭션 예외별 롤백,커밋
유당불내증이 있는 개발자
2023. 12. 6. 23:58
스프링은 체크예외(Exception) 발생 시 커밋하고, 언체크(RuntimeException) 예외는 롤백하게 된다.
스프링 기본적으로 체크 예외는 비즈니스 의미가 있을 때 사용하고, 런타임(언체크) 예외는 복구 불가능한 예외로 가정 한다.
Exception : 비즈니스 의미가 있을 때 사용
RuntimeException : 복구 불가능한 예외
비즈니스예외란 무엇일까?
예시로 주문로직에서 주문은 잔고부족으로 주문이 실패했다면? 주문상태를 대기로 처리하고 주문정보를 저장해야한다.
어떠한 심각한 복구불가한 문제가 아닌 비즈니스 상황에서 충분히 일어날 수 있는 예외라고 이해하면 좋을거 같다.
1. **정상**: 주문시 결제를 성공하면 주문 데이터를 저장하고 결제 상태를 `완료` 로 처리한다.
2. **시스템 예외**: 주문시 내부에 복구 불가능한 예외가 발생하면 전체 데이터를 롤백한다.
3. **비즈니스 예외**: 주문시 결제 잔고가 부족하면 주문 데이터를 저장하고, 결제 상태를 `대기` 로 처리한다.
이 경우 **고객에게 잔고 부족을 알리고 별도의 계좌로 입금하도록 안내한다.**
이때 결제 잔고가 부족하면 `NotEnoughMoneyException` 이라는 체크 예외가 발생한다고 가정하겠다. 이 예외는 시 스템에 문제가 있어서 발생하는 시스템 예외가 아니다. 시스템은 정상 동작했지만, 비즈니스 상황에서 문제가 되기 때문 에 발생한 예외이다. 더 자세히 설명하자면, 고객의 잔고가 부족한 것은 시스템에 문제가 있는 것이 아니다. 오히려 시스 템은 문제 없이 동작한 것이고, 비즈니스 상황이 예외인 것이다. 이런 예외를 비즈니스 예외라 한다. 그리고 비즈니스 예 외는 매우 중요하고, 반드시 처리해야 하는 경우가 많으므로 체크 예외를 고려할 수 있다.
출처 - 김영한 스프링 DB 2편 - 데이터 접근 활용 기술 강의자료