Spring Boot 프로젝트를 진행하던 중 평소처럼 서비스단에서 transaction 처리를 해주던 중 transaction이 제대로 구현되지 않는 문제가 발생했다.
알고 보니 특정 케이스에 대해 명시적으로 throw 해준 부분(Checked Exception)에 대해서는 자동으로 @Transactional 어노테이션이 작동하지 않았다. 추가 옵션으로 롤백할 클래스명을 지정해줘야한다는..!
@Trasaction(rollbackFor = {Exception.class}
단, try catch로만 명시적으로 처리해줄때에는 해당 Exception을 catch문에서 잡기때문에 Spring이 감지하여 transaction 처리를 해줄수 없기때문에 try catch를 쓰지않고 throw하거나 catch 문에서 throw를 해줘야한다. (
후 역시 공부는 해도해도 끝이 없는것같다.
찾아본김에 적는 자바의 Exception 종류도 정리해보았다.
Error (java.lang.Error)
주로 시스템(VM)에서 발생시키는 에러 상황. 애플리케이션단에서 처리는 어렵고 보통은 컴파일단에서 나타남
Checked Exception
개발자가 작성한 코드내에서 발생할 수 있는 예외상황.
Checked Exception은 Exception클래스의 자식 클래스이지만 RuntimeException 클래스은 상속받지 않음
Unchecked Exception
java.lang.RuntimeException 클래스를 상속받은 예외상황
예를 들어 NullPointerException, IllegalArgumentException 등등 개발자의 부주의로 발생할 수 있는 예외를 정의해놓은 클래스들.