@Transactional을 사용하면 기본적으로 모든 예외에 대해 롤백하는 줄 알았지만, 해당 어노테이션은 기본적으로 @RuntimeException과 Error에 대해서만 롤백을 하고, Exception에 대해서는 롤백하지 않는다.
@Transactional
@RuntimeException
Error
Exception
즉, unchecked exception이 발생하면 롤백, checked exception이 발생하면 커밋을 한다.