[Spring] @Transactional과(와) Checked, Unchecked Exception 간략정리
@Transactional과(와) Checked Exception, Unchecked Exception 간략 정리
@Transactional에 대해선 기존에 정리하였기 때문에 기존 글을 확인하시면 좋습니다.
2022.07.20 - [IT/JAVA | Spring] - [Spring] @Transactional 간략 정리 ( AOP, Proxy, 동작 원리, 특이사항 )
[Spring] @Transactional 간략 정리 ( AOP, Proxy, 동작 원리, 특이사항 )
@Transactional의 동작 원리와 @Transactional을 사용하면서 생기는 이슈들에 대한 간략 정리 1. DB Transaction ACID 원자성(Atomicity) - 트랜잭션에 속한 각각의 문(데이터를 읽기, 쓰기, 업데이트 또는 삭제..
kangyb.tistory.com
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 처리에 관한 자세한 내용