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

조D영래님의 프로필 이미지

작성한 질문수

실습으로 배우는 선착순 이벤트 시스템

ApplyService#apply 트랜잭션 문제

해결된 질문

작성

·

119

0

안녕하세요~

강의 중 ApplyService#apply 트랜잭션 관련해서 질문이 있습니다.

apply 메서드가 appliedUserRepository#add 만 호출되거나 couponCountRepository#increase 까지만 호출되고 에러, 시스템 다운 등 특정 이유로 couponCreateProducer#create 는 호출되지 않게 되었을 때에 대한 처리가 필요할 것 같습니다.

어떻게 처리하는 것이 좋을까요??

 

@Service
@RequiredArgsConstructor
public class ApplyService {

    private final CouponRepository couponRepository;
    private final CouponCountRepository couponCountRepository;
    private final CouponCreateProducer couponCreateProducer;
    private final AppliedUserRepository appliedUserRepository;

    public void apply(final Long userId) {
        final Long applied = appliedUserRepository.add(userId);
        if (applied != 1) {
            return;
        }

        final long count = couponCountRepository.increase();

        if (count > 100) {
            return;
        }

        couponCreateProducer.create(userId);
    }
}

답변 1

1

최상용님의 프로필 이미지
최상용
지식공유자

조D영래님 안녕하세요.
여러가지 방법이 있을듯합니다.

  1. applied user 에서 제거와 coupon count 1 감소하여 추후 동일한 유저가 다시 시도 가능하도록 함

  2. 유저의 id 를 기록한 후 별도의 저장소에 저장하여 추후 재시도를 통해 쿠폰발급

감사합니다.