안녕하세요! 강사님 예외처리에 대한 질문이 있습니다.
366
42 câu hỏi đã được viết
현재 강의에서는 정상적인 코드면 무한루프가 종료되는걸로 생각하고 있습니다.하지만1. 재고가 감소시켜야 하는 수량 보다 적을 경우는 무한루프를 도는것을 확인했습니다.어떻게 예외처리를 해야할 지 잘 모르겠어서 질문드립니다 ㅠ
public class Stock {
// ...
public void decrease(Long quantity) {
if (this.quantity - quantity < 0) {
throw new RuntimeException("재고 수량이 부족합니다.");
}
this.quantity -= quantity;
}
}public class OptimisticLockService {
private final StockRepository stockRepository;
@Transactional
public void decrease(Long id,Long quantity){
Stock stock = stockRepository.findByIdWithOptimisticLock(id);
if (stock.getQuantity() < quantity) {
throw new RuntimeException("재고 수량이 부족합니다.");
}
stock.decrease(quantity);
}
}stock 클래스에서 예외처리를 하는것이 좋을지 서비스 클래스에서 예외처리를 좋을지?!
예외를 주고 OptimisticLockStockFacade에 대한 무한루프를 어떻게 처리할지..
강의 잘 들었습니다 답변 부탁드려용 ..
@Component
@RequiredArgsConstructor
public class OptimisticLockStockFacade {
private final OptimisticLockService optimisticLockService;
public void decrease(Long id, Long quantity) throws InterruptedException {
while (true) {
try {
optimisticLockService.decrease(id, quantity);
break;
}catch(Exception e) {
Thread.sleep(50);
}
}
}
}
현재 아래코드를 실행하면 무한루프가 나갑니다.!
@Test
@DisplayName("재고가 없을시 재고감소 로직 요청시 예외가 일어난다.")
void decreaseStockZero() {
//given
//when
//then
assertThatThrownBy(() -> optimisticLockStockFacade.decrease(1L, 101L))
.isInstanceOf(RuntimeException.class)
.hasMessage("이미 품절된 상품입니다.");
}
Câu trả lời 2
1
qheogus55 님 안녕하세요!
좋은 질문 감사합니다!
보통은 재시도를 하지 않아도 되는 예외클래스를 만든 후 재고가 부족할 때 해당 예외를 throw 합니다.
그리고 while 문 안에서 해당 에러가 발생하였을 때는 재시도를 하지 않는 방식으로 해결할 수 있을 것 같습니다.
감사합니다.
레디선 테스트코드에서 채널이름은 없어도 되는건가요?
0
46
2
낙관적 락을 사용할 떄 차이점
0
126
2
동시성 검증 코드에 관한 문의
0
97
2
단일연산
0
70
2
낙관적락vs. 레디스락
0
108
2
안녕하세요. 레디슨 질문있습니다..!!
0
67
2
@Lock(OPTIMISTIC)이 필요한 이유
0
90
2
get_lock 의 timeout이 3000초 이던데 너무 긴거 아닌가요?
0
132
2
DataSource Hikari 사용 이유
0
148
2
saveAndFlush 사용 이유 문의
0
113
3
비관적 락 VS 네임드 락
0
161
3
application.yaml 에 redis 정보
0
101
2
왜 클래스 이름에 Facade 가 붙나요?
0
185
2
@Transactional 으로 인한 동시성 문제 발생 원인이 궁금합니다.
0
220
2
@modifying 이용한 동시성 제어
0
168
2
DB락과 분산락
0
262
2
NamedLock 테스트 실패
0
186
2
테스트에서 트랜잭션 어노테이션 질문 있습니다.
0
174
2
optimistic Lock 재시도 질문입니다.
0
233
2
낙관적 락 테스트 실패
0
242
2
오류?
0
1631
4
LettureLockStockFacadeTest에서 오류가 발생합니다.
1
268
2
Pessimistic Lock 전체 테스트 오류 문의
0
362
3
비관적 락 vs 레디스(Lettuce)락 비교 관련 질문
0
462
2

