spring에서는 사실 이렇게 runtimeException은 rollback되고, uncheckedException은 rollback 안되는 것으로 위에 사진에 나온것처럼 설명되어있다. 그러나, 우리가 주목해야 할 점은 default라는 점! 우리가 변경해줄 수 있다.
-> @Transactional(noRollbackFor = { ExceptionA.class, ExceptionB.class })
-> @Transactional(rollbackFor = Exception.class)
즉, rollbackFor과 noRollbackFor 설정을 사용하면 된다.
코틀린은 자바와 달리 Checked Exception을 강제하지 않는다.또한, 원하는 경우에만 try-catch를 쓸 수 있다.
자바 경우, 예를 들어, IOException을 반드시 처리해야 하기 때문에 (checked exception이므로) catch 문에 추가하거나, 함수에 throws IOException을 표기해 줘야 하지만 코틀린은 하지 않아도 컴파일에 문제가 없다.
코틀린 공식 문서를 보면, 코틀린이 Checked Exception을 강제하지 않는 이유가 나와있다.
참고) https://kotlinlang.org/docs/exceptions.html#checked-exceptions
해당 문서에서는, Checked Exception은 매 코드마다 try-catch로 예외를 처리해야하고, 이는 결국 개발자의 생산성을 낮출 뿐 아니라, 가독성 면에서도 좋지 않다라고 써져있었다.
즉, checked exception을 try-catch로 처리한 후 catch 내에서 별도로 커스터마이징된 명확한 예외인 unchecked exception을 다시 넘겨줄 바에는 아예 checked exception을 사용하지 않는 것이 더 좋을 수 있는 것을 말하고 있는 것 같다.
1) Error : 프로세스 자체에 영향
→ JVM에 영향(JVM은 한 프로세스), 주로 JVM에서 발생시키기 때문에 애플리케이션 코드에서 잡아서는 안되며, 잡아서 대응할 수 있는 방법도 없다.
2) Exception: 한 쓰레드에만 영향