Checked Exception은 컴파일러가 체크하는 체크 예외입니다. 체크 예외는 잡아서 처리하거나, 또는 밖으로 던지도록 선언해야 합니다. 그렇지 않으면 컴파일러 오류가 발생합니다. 개발자가 모든 체크 예외를 반드시 잡거나 던지도록 처리해야 하는게 장점이자 단점입니다. 일반적으로 비즈니스적으로 의미있는 예외일 때 많이 사용합니다.
Unchecked Exception은 런타임 예외라고도 불립니다. 체크 예외와 달리 thorws
를 선언하지 않고 생략할 수 있습니다.
해당 객체와 상관 없는 예외를 무시하고 그냥 던질 수 있는 것이 장점입니다. 하지만 실수로 예외가 누락될 수 있는 것은 단점입니다.
스프링에서 rollback 대상은 unchecked exception입니다.
초기에 자바가 사용되던 환경은 엔터프라이즈 서버 환경이 아니었습니다. Swing, AWT 같이 사용자와 일대일로 대응하던 시절에는 IOEXception이 발생해도 복구를 했어야했기 때문입니다. 예를 들어 어떤 파일을 입력하려고 했는데 그 파일이 존재하지 않는다고해서 애플리케이션이 꺼지면 안됐던 것입니다.
CheckedException에는 IOException, SQLException 등이 있고 Unchecked Exception은 IllegalStateException, IllegalArgumentException 등이 있습니다.
@Repository를 붙이면 persistence 계층의 예외를 잡아서 스프링의 통일된 Unchecked Exception으로 바꿔 던져줍니다.
이걸 위해서 PersistenceExceptionTranslationPostProcessor
가 있어야 하는데, 스프링부트를 쓰면 이미 등록되어있습니다.