인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

한현진님의 프로필 이미지

작성한 질문수

스프링 DB 2편 - 데이터 접근 활용 기술

트랜잭션 전파 기본 - UnexpectRollbackException 관련 질문

작성

·

38

0

만약에 @Transactional 어노테이션을 사용해서 트랜잭션을 만들었을때
내부 트랜잭션에서 롤백이 발생했다는건
일반적인 상황에서는 database에서 뭔가 예외가 발생해서 그런거라고 생각되는데,
그러면 예외처리기에서 알아서 runtimeException을 상속받은 예외로 바뀔것이고
외부 트랜잭션에서도 롤백이 발생한다는건
이 경우는 database에서 발생했던 예외가 외부 트랜잭션까지 넘어와서 자연스럽게 롤백된거라고 생각합니다.
그래서 UnexpectRollbackException이 발생하지 않는다고 생각됩니다.

 

  1. 제 생각이 맞나요?


  2. 그러면 UnexpectRollbackException 이 발생할 수 있는 경우는 뭐가 있나요?

     

 

강의에서 처럼 의도적으로 문제를 일으키는게 아니면 생각나는 경우가 딱히 없습니다.
하지만 제가 생각하지 못하는 것이지 예외가 발생한다는 경우가 있긴 있다는것이겠죠?

 

  1. 그렇다면 트랜잭션을 이용하는 순간부터는 그냥
    @ControllerAdvice 에서
    @ExceptionHandler로
    UnexpectRollbackException을 캐치해줘서 처리하는 코드를 거의 무조건 작성해야할까요??

 

답변 2

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 한현진님

AI 인턴의 설명에 추가로 다음 내용들을 보시면 도움이 되실거에요.

https://techblog.woowahan.com/2606/

https://velog.io/@minnseong/UnexpectedRollbackException-%EB%B0%9C%EC%83%9D

참고로 자주 발생하는 문제는 아니니 실제 문제가 발생했을 때 고민하셔도 괜찮습니다.

감사합니다.

한현진님의 프로필 이미지
한현진
질문자

답변 감사합니다. 참고 되었습니다.

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. 한현진님.

트랜잭션 전파에서의 UnexpectedRollbackException은 조금 혼란스러운 주제일 수 있습니다. 다음은 관련 설명 및 유사한 질문들에 대한 답변입니다.

스프링 트랜잭션 전파에서는 내부 트랜잭션에서 롤백이 발생해도 외부 트랜잭션에서 이를 처리하지 못하면 UnexpectedRollbackException이 발생할 수 있습니다. 이는 주로 외부 트랜잭션이 정상적으로 커밋될 것이라 예측했으나, 내부에서 롤백된 경우 발생하는 상황입니다.

  1. 한현진님의 이해: 말씀하신 것처럼, 외부 트랜잭션에서의 롤백은 데이터베이스 예외가 전달되어 발생할 수 있습니다. 그러나 UnexpectedRollbackException은 주로 내부 트랜잭션에서 예외가 발생하여 롤백되었음에도 외부 트랜잭션이 롤백을 예상하지 못하고 커밋을 시도할 때 발생합니다.

  2. UnexpectRollbackException 발생 경우: 이 예외는 내부 메서드의 롤백이 외부 메서드에 전파되지 않을 때 주로 발생합니다. 외부 메서드에서는 트랜잭션이 정상 커밋될 것이라 예상했지만, 내부 메서드의 예외로 인해 롤백되어 결과가 예상치 못한 경우입니다.

관련 질문과 답변:
- 트랜잭션 전파 관련 질문 있습니다에서는 비슷한 논의를 하고 있습니다. 내부 트랜잭션과 외부 트랜잭션의 롤백/커밋이 각각 어떻게 처리되고 예외가 날 수 있는지에 대한 설명입니다.

ExceptionHandler 사용: @ControllerAdvice에서 @ExceptionHandlerUnexpectedRollbackException을 처리하는 코드 작성은 운동장 정책이긴 하지만, 실제 예외 발생 상황과 프로젝트의 로깅 및 에러 처리 정책에 따라 다릅니다. 트랜잭션 오류를 보다 명확히 이해하기 위해 로깅 또는 알림 시스템을 설정하는 것도 좋습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.