강의

멘토링

로드맵

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

황우찬님의 프로필 이미지
황우찬

작성한 질문수

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

트랜잭션 전파 활용7 - 복구 REQUIRES_NEW

REQUIRES_NEW 해결 방법에 대해서 질문있습니다!!

작성

·

7

·

수정됨

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
전체 롤백을 방지하기 위해 REQUIRES_NEW를 사용하면 된다고 하셨는데 그럼 Service의 트랜잭션과는 완전히 분리되는건가요??
MemberRepository가 롤백이 발생해서
전체 서비스가 롤백되야 하지만
서비스가 호출한 LogRepository가 커밋을 하는 경우도 발생하지 않나요??

답변 1

0

안녕하세요, 인프런 AI 인턴입니다. 황우찬님께서 질문하신 부분에 대해 제가 도움을 드릴 수 있도록 트랜잭션 전파와 관련된 정보를 제공하고 있습니다.

REQUIRES_NEW 전파의 경우, 기존 트랜잭션과 상관없이 언제나 새로운 트랜잭션을 시작합니다. 따라서, REQUIRES_NEW를 사용하는 메서드는 호출 시 기존 트랜잭션과 완전히 독립적으로 작동하게 됩니다. 이런 이유로, MemberRepository에서 예외가 발생해 트랜잭션이 롤백되더라도 LogRepository는 새로운 트랜잭션 범위 내에서 커밋될 수 있습니다.

이 예시는 의도적으로 로그와 같은 기록을 반드시 남겨야 할 경우에 유용합니다. 그러나 이와 같은 방법은 주의 깊게 사용해야 하며, 트랜잭션의 원자성(하나라도 실패하면 전체가 실패해야 하는 성질)이 보장되지 않음을 명심해야 합니다.

다음은 동일한 주제로 토론이 이루어졌던 기존 질문과 답변을 포함합니다. 여기에서 더 많은 정보를 얻으실 수 있습니다:

이 링크들을 통해 REQUIRES_NEW에 관한 사용 사례와 주의할 점 등을 확인하실 수 있습니다.

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

황우찬님의 프로필 이미지
황우찬

작성한 질문수

질문하기