-
[Spring] @Transactional과(와) Checked, Unchecked Exception 간략정리IT/JAVA | Spring 2022. 7. 26. 16:47
@Transactional과(와) Checked Exception, Unchecked Exception 간략 정리
@Transactional에 대해선 기존에 정리하였기 때문에 기존 글을 확인하시면 좋습니다.
2022.07.20 - [IT/JAVA | Spring] - [Spring] @Transactional 간략 정리 ( AOP, Proxy, 동작 원리, 특이사항 )
Checked Exception과 Unchecked Exception 그리고 Error가(이) 무엇인지 정리해보자
- Checked Exception
- 명시적으로 예외 처리를 강제하기 때문에 Checked Exception이라 부른다.
- try/catch, throw 등을 사용하여 예외를 던져야 한다.
- 예외 처리를 하지 않으면 IDE에서 컴파일 시 에러를 뱉는다.
- Complie Exception으로 Runtime Exception 하위 Exception을 제외하고 말한다.
- Unchecked Exception
- 명시적인 예외 처리를 강제하기 때문에 UnChecked Exception이라 부른다.
- 예외 처리를 하지 않아도 IDE에서 에러를 뱉지 않는다.
- Runtime Exception으로 실행 중 발생하는 Exception을 말한다.
- Runtime Exception 하위의 NullPointException, IndexOutOfBoundException 등이 있다.
- Error
- 시스템에 비정상적인 상황이 발생했을 경우에 발생
- OutofMemoryError, StackOverflowError 등
- 애플리케이션 코드에서 처리할 수 없다.
Error Checked Exception UnChecked Exception 확인 시점 실행 컴파일 실행 발생 이유 시스템의 비정상적인 상황이 발생 주로 외부의 영향으로 발생 주로 프로그래머의 실수에 의해서 발생 처리 여부 불가능 명시적 처리 강제 강제하지 않음 기본 트렌잭션 여부
( 직접 세팅하여 동작 방식을 수정할 수 있다 )Rollback Non-Rollback ( commit 처리 ) Rollback 대표 예외 OutOfMemoryError
StackOverFlowError 등IOException
FileNotFoundException
SQLException
ClassNotFoundException 등RuntimeException 하위
NullpointException
Illegal....Exception
IndexOutOfBoundException
등Spring @Transactional과 Exception
Spring @Transactional은 Checked Exception은 Non-Rollback이 기본
하지만 UnChecked Exception이라고 무조건 Rollback을 하는 것도 아니고 Checked Exception이라고 Non-Rollback은 아니다.
Checked Exception Rollback 발생시키기
1. @Transactional의 rollbackFor 옵션을 이용한다.
// FileNotFoundException은 rollback 한다. @Transactional(rollbackFor = FileNotFoundException.class)
// 여러개의 예외를 rollback 한다. @Transactional(rollbackFor = {FileNotFoundException.class, ClassNotFoundException.class})
2. Checked Exception을 throw를 이용하여 UnChecked Exception으로 처리한다.
try{ // 로직 } catch(FileNotFoundException e) { throw new RuntimeException("UnChecked Exception"); }
UnChecked Exception이 Non-Rollback 처리되는 경우
1. try/catch 처리
try{ // 로직 } catch (RuntimeException e) { // 별도 Exception 처리 로직 }
이미 RuntimeException을 처리하는 로직이 있어서 롤백이 되지 않고 커밋된다.
자세한 내용은 아래 블로그를 참고하면 좋을 것 같다.
Checked Exception과 UnChecked Exception Transaction 처리에 관한 자세한 내용
'IT > JAVA | Spring' 카테고리의 다른 글
[JAVA] 특수문자 > 숫자(0123~순, 소수점 포함) > 영어(대문자 먼저, abc~순) > 한글(ㄱㄴㄷ~순) 순서 Custom Comparator로 String 정렬 (0) 2023.01.28 [Spring] intellij Spring boot + mybatis + gradle bindingExceptiion (0) 2022.09.09 [Spring] @Transactional 간략 정리 ( AOP, Proxy, 동작 원리, 특이사항 ) (0) 2022.07.20 [JAVA] interface와 abstract 차이점과 java8의 interface, 다중상속 (0) 2022.07.09 [JAVA] Google Java Style Guide link (0) 2022.07.08 - Checked Exception