송민준의 개발노트
checked, unchecked exception이란? 본문
어떻게 나누어지는가?
Exception은 Checked Exception과 Unchecked Exception으로 구분이 되는데 Unchecked Exception은 runtime Exception을 상속하기 때문에 별다른 처리를 안해줘도 롤백이 되고 Checked Exception은 상속하지 않기 때문에 rollback이 안된다.
예를 들어 SQLException이나 IOException인 경우 Checked Exception에 해당되고 Exception 처리를 안해주면 Rollback이 안된다.
해서 Checked Exception은 명시적으로 처리를 해줘야하기 때문에 throws나 try catch로 처리를 해줘야 하고 반면 Unchecked Exception은 묵시적으로 된다.
왜 Checked Exception은 Rollback이 가능하지 않을까?라는 이유는 복구가 가능하다는 메커니즘을 가지고 있다고 한다. 즉 복구전략을 가질 수 있다는 것이다.
나 같은 경우는 SQLException 같은 것은 DAO를 실행시키고 반환 받는 갯수를 기준으로 커스텀된 RuntimeException을 던져줬다.
int result = dao.insert(~~);
if(result < 1) {
throw new customException("어쩌고 저쩌고~");
}
아니면 롤백 전략을 애초에 'Exception'으로 해주면 Checked 구분 없이 된다...!!
Exception 계열의 모든 부모클래스가 Exception이기 때문에... 혹은 더 상위에 Throwable....
더 나아가서 트랜잭션이 걸리지 않은 서비스의 메소드에서 트랜잭션이 AOP가 걸린 메소드를 호출하면 트랜잭션이 적용될 것인가???
결과는 적용이 안된다.
이유는 AOP가 적용되지 않은 것에서부터 실행을 하면 트랜잭션 어드바이저를 안거치고 가서 트랜잭션 관리가 안된다.
더 나아가 Transaction Manager 에 대해서 도표로 자세하게 설명된 블로그가 있었는데 아래를 참조하면 된다.
narusas.github.io/2019/07/17/Spring-Transaction-Note.html
'웹 > Spring Framework' 카테고리의 다른 글
MYBATIS DB에서 이미지(blob)을 뽑는 방법 (0) | 2021.01.06 |
---|---|
ThreadLocal이란 뭘까? (0) | 2020.12.04 |
[406] path variable email을 사용하는 경우 에러 해결방안 (2) | 2020.11.11 |
[spring] 테스트 중 Unable to initialize 'javax.el.ExpressionFactory' 해결하기 - validator 2.0.0(JSR-380) 적용 (0) | 2020.10.21 |
mybatis procedure 사용법 (0) | 2020.10.19 |