IT/프로그래밍

@Transactional의 동작

Collin 2025. 12. 13. 08:10
반응형
@Transactional(rollbackFor = Exception.class)

🔹 기본 동작

  • @Transactional은 기본적으로 RuntimeException과 Error가 발생하면 롤백합니다.
  • 즉, 체크 예외(Exception의 하위 클래스지만 RuntimeException이 아닌 것들)는 기본적으로 롤백 대상이 아닙니다.

🔹 rollbackFor 옵션의 의미

  • rollbackFor = Exception.class라고 지정하면, 체크 예외까지 포함해서 모든 예외가 발생하면 롤백하도록 강제합니다.
  • 기본값이 "모든 예외 롤백"이 아니라 "런타임 예외만 롤백"이기 때문에, 위처럼 명시적으로 지정하는 경우가 많습니다.

🔹 왜 이렇게 쓰는가?

  • 비즈니스 로직에서 IOException, SQLException 같은 체크 예외가 발생했을 때도 트랜잭션을 롤백하고 싶을 수 있습니다.
  • 기본 설정만 쓰면 이런 체크 예외는 롤백되지 않고 커밋될 수 있어, 데이터 정합성 문제가 생길 수 있습니다.
  • 그래서 rollbackFor = Exception.class를 붙여 모든 예외 상황에서 안전하게 롤백되도록 하는 거죠.

✅ 정리하면:
rollbackFor가 기본 true가 아니라, 기본은 런타임 예외만 롤백입니다.
체크 예외까지 롤백하려고 rollbackFor = Exception.class를 명시하는 거예요.


 

728x90
반응형