강의

멘토링

로드맵

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

김준기님의 프로필 이미지
김준기

작성한 질문수

REQUIRES_NEW와 예외 핸들링의 상관 관계

작성

·

55

·

수정됨

0

REQUIRES_NEW를 올바르게 사용하기 위해선, 다시 말해 외부 트랜잭션과 내부 트랜잭션(신규 트랜잭션)을 제대로 분리하기 위해선 아래와 같이 이해했습니다.

  • 외부 트랜잭션의 로직은 REQUIRES_NEW 로직에서 발생될 수 있는 예외를 반드시 핸들링 해야 한다.

 

이렇게 이해한 이유는 아래와 같습니다.

  • 가정: 트랜잭션A는 외부 트랜잭션, 트랜잭션B는 내부 트랜잭션(신규 트랜잭션)

  • 상황: 트랜잭션 A는 성공, 트랜잭션 B는 실패

 

  • 트랜잭션B에서 발생된 예외가 트랜잭션A까지 전파되면, 결론적으로 트랜잭션A까지 실패한 것으로 취급된다.

  • 결국 의도했던 트랜잭션 A는 성공 -> 커밋, 트랜잭션 B는 실패 -> 롤백이 되지 않고,

  • 트랜잭션 A 실패 → 롤백, 트랜잭션 B 실패 → 롤백 되어버린다.

 

따라서, REQUIRES_NEW 를 본래의 의도대로 사용하기 위해선, 반드시 예외 핸들링을 하여 예외 정상처리(예외를 catch하여 먹어버림)해주어야 한다고 이해하였는데, 제가 이해한게 맞을지 여쭤보고 싶습니다 🙂

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.
김준기님께서 이해하신 내용은 매우 정확합니다.

REQUIRES_NEW는 기존 트랜잭션과는 별도의 신규 트랜잭션을 열어줍니다. 따라서 외부 트랜잭션의 흐름에 영향을 주지 않도록 내부 트랜잭션에서 발생하는 예외를 적절하게 핸들링해야 합니다.

트랜잭션 B에서 발생한 예외가 트랜잭션 A로 전파되면, 트랜잭션 A까지도 롤백될 수 있기 때문에 외부 트랜잭션에서 내부 트랜잭션의 예외를 별도로 처리하여 의도한 대로 트랜잭션 간의 결과를 보장할 수 있습니다.

따라서 예외를 캐치하고 처리하여 트랜잭션 A가 원활하게 커밋될 수 있도록 설계하는 것이 중요합니다.
김준기님의 이해가 올바르며, 예외를 제대로 핸들링 하는 것이 REQUIRES_NEW의 의도를 살리는 좋은 방법입니다.

추가적인 정보는 Spring Boot Reference Documentation 에서 확인하실 수 있습니다.

김준기님의 프로필 이미지
김준기

작성한 질문수

질문하기