반응형

RuntimeException 2

[Spring 공식 문서 기반] Transaction 8. 왜 RuntimeException만 롤백될까

7편에서는 NESTED 전파 옵션이“이론적으로는 가능하지만, 실무에서는 거의 선택되지 않는 이유”를 살펴봤습니다.이제 Spring Transaction에서 가장 많이 오해되고, 가장 많은 장애를 만드는 질문으로 넘어가야 합니다.왜 RuntimeException만 롤백되고, Checked Exception은 기본 커밋될까?이 질문에 답하지 못하면,“분명 예외가 났는데 왜 커밋됐지?”“rollbackFor를 왜 써야 하지?”“예외 설계는 트랜잭션과 무슨 관계지?”같은 혼란을 끝없이 반복하게 됩니다.1. 먼저 사실부터 정리하자Spring의 기본 롤백 규칙은 아주 명확합니다.RuntimeException과 Error → 롤백Checked Exception → 커밋이 규칙은 버그도 아니고,JPA의 제약도 아닙니다..

[Spring 공식문서 정리] 8. @Transactional은 어떻게 동작할까 – 트랜잭션과 프록시의 만남

7편에서는 Spring AOP가 프록시 기반으로 동작하며, JDK Dynamic Proxy와 CGLIB 중 어떤 방식을 선택하는지를 살펴봤습니다.이번 글에서는 Spring에서 가장 많이 사용하면서도 가장 많이 오해되는 기능인 @Transactional이 실제로 어떻게 동작하는지를 프록시와 내부 구현 관점에서 정리해보겠습니다.1. @Transactional은 마법이 아니다먼저 가장 중요한 전제부터 짚고 가겠습니다.@Transactional은 메서드에 트랜잭션을 “붙여주는” 애노테이션이 아니다Spring에서 @Transactional은프록시를 생성하고메서드 호출 전후에트랜잭션 경계를 설정하는AOP 기반 기능입니다.즉, 실제 비즈니스 메서드 안에는 트랜잭션 관련 코드가 전혀 들어가지 않습니다.2. @Trans..

반응형