Spring Transactional에서 Unchecked Exception 발생 시, 기본적으로 롤백이 수행됨
Kotlin 환경에서 Checked Exception이 UndeclaredThrowableException으로 변환되어 롤백될 수 있음
REQUIRES_NEW 전파 옵션 사용 시, 부모 트랜잭션과 자식 트랜잭션의 독립적인 롤백 보장
Spring은 Unchecked Exception 발생 시, rollbackFor 설정을 통해 롤백 여부를 결정한다. 구체적으로, TransactionInterceptor가 예외 발생 시 롤백 마킹을 수행한다. 따라서, try-catch 블록으로 Unchecked Exception을 잡아도 롤백될 수 있다. 반면, Checked Exception은 기본적으로 롤백 대상이 아니다.
Kotlin에서는 Checked Exception에 대한 throws 선언이 필수가 아니므로, Java와 다른 동작을 보인다. 따라서, IOException과 같은 Checked Exception이 발생해도, UndeclaredThrowableException으로 래핑되어 롤백될 수 있다. 결과적으로, Kotlin 환경에서는 예외 처리에 더욱 주의해야 한다.
REQUIRES_NEW 전파 옵션을 사용하면, 새로운 트랜잭션이 생성되어 부모 트랜잭션과 독립적으로 동작한다. 구체적으로, 자식 트랜잭션에서 RuntimeException이 발생해도 부모 트랜잭션은 롤백되지 않는다. 따라서, 데이터 무결성을 유지하면서 장시간 트랜잭션 문제를 해결할 수 있다.