Transaction 전파) UnexpectedRollbackException

알파로그·2023년 11월 1일
0

Error

목록 보기
36/37
post-custom-banner

✏️ 발단

  • 비즈니스 로직이 수행되고 결과값을 반환할 때 commit 이 되지 않고 Rollback 이 되 오류가 발생했다.
@Override
public CodeReviewDto codeReview(Long memberId, CreateCodeReviewDto dto) {
    isNew(dto.getProblemStatusId());

    CodeReview codeReview = repository.save(
            CodeReview.write(memberId, dto)
    );
    return new CodeReviewDto(codeReview);
}

private void isNew(Long problemStatusId) {
    try {
        codeReviewQueryUseCase.byProblemStatusId(problemStatusId);
        throw new InvalidDuplicateException("이미 등록된 게시물");
    } catch (NotFoundException e) {}
}

✏️ 원인

isNew 에서 호출하고있는 byProblemStatusId **메서드도 별도의 transaction 이 존재하는데
설정값을 기본으로 할경우
하위 transaction 이 상위에 흡수되
한번이라도 오류가 발생하면 비즈니스 로직이 완료된 뒤 rollback 된다고 한다.**

✏️ 문제 해결

  • 각 객체에 선언된 transaction 의 전파 옵션을 수정해 문제를 해결했다.
@Service
@Transactional(readOnly = true, propagation = REQUIRES_NEW)
@RequiredArgsConstructor
public class CodeReviewQueryService implements CodeReviewQueryUseCase {
profile
잘못된 내용 PR 환영
post-custom-banner

0개의 댓글