facade 패턴 적용 및 service 에서 락 재흭득 처리 후 문제 질문
693
작성한 질문수 14
facade 패턴 적용에 대한 질문
강의를 듣고 facade 패턴에 대해서 조금 공부해봤습니다.
강의에서 facade 패턴을 적용한 이유가 락 흭득 관련한 반복 로직을 service 레이어에서 분리하기 위함이라고 이해했습니다.
현재 service 레이어에는 메서드가 하나라서 facade 에 메서드가 하나인 것인가? 라는 생각이 들었습니다.
1. 락 처리(동시성 문제 처리)를 하는 메서드만 facade 로 분리를 해주는 것인가요?
2. 아니면 service 레이어에 있는 모든 메서드에 대해서 facade 패턴으로 분리한 클래스에 메서드 호출을 넣어야하는 것인가요?
만약 1번이 맞다면 컨트롤러에서 일반 service layer 와 facade 둘다 컨트롤러에서 의존성을 갖고 있도록 해야할텐데 이는 컨트롤러에에서 락처리를 하는 facade.decrease 와 stockService.decrease 둘다 참조 가능한 것이 이상하다는 생각이 들었습니다.
---
이와 별개로 facade 를 적용하지않고 service 에서 decrease 에 대해 락 흭득 재흭득 처리를 하면 단순하게 아래 처럼 처리 할 수 있다고 생각했습니다..
그랬더니 동시성 문제가 해결되지 않고 테스트를 돌려보니 51 만큼만 감소가 이루어 지더라구요... 이유가 뭔지 궁금합니다.
@Service
public class OptimisticLockStockService {
private final StockRepository stockRepository;
public OptimisticLockStockService(StockRepository stockRepository) {
this.stockRepository = stockRepository;
}
@Transactional
public void decrease(Long id, Long quantity) throws InterruptedException {
while (true) {
try {
Stock stock = stockRepository.findByIdWithOptimisticLock(id);
stock.decrease(quantity);
stockRepository.saveAndFlush(stock);
} catch (Exception e) {
Thread.sleep(50);
}
}
}
}
답변 1
0
최지환님 안녕하세요.
1번 질문과 2번질문의 대한 답은 Facade 클래스는 필요한 경우에만 사용한다고 생각하시면 좋을 것 같습니다.
재고를 감소할때는 StockService.decrease 를 외부로 노출시키지 않고싶다면 접근제어자를 이용하여 노출을 안시킬 수 있을 것 같습니다.
오류관련해서는 소스가 올라가있는 깃헙을 공유해주실 수 있으실까요 ?
51개 나오는게 아니라 무한루프가 돌아야되는거 아닌가해서요!
레디선 테스트코드에서 채널이름은 없어도 되는건가요?
0
40
2
낙관적 락을 사용할 떄 차이점
0
118
2
동시성 검증 코드에 관한 문의
0
91
2
단일연산
0
69
2
낙관적락vs. 레디스락
0
106
2
안녕하세요. 레디슨 질문있습니다..!!
0
66
2
@Lock(OPTIMISTIC)이 필요한 이유
0
89
2
get_lock 의 timeout이 3000초 이던데 너무 긴거 아닌가요?
0
128
2
DataSource Hikari 사용 이유
0
145
2
saveAndFlush 사용 이유 문의
0
111
3
비관적 락 VS 네임드 락
0
158
3
application.yaml 에 redis 정보
0
99
2
왜 클래스 이름에 Facade 가 붙나요?
0
181
2
@Transactional 으로 인한 동시성 문제 발생 원인이 궁금합니다.
0
218
2
@modifying 이용한 동시성 제어
0
168
2
DB락과 분산락
0
260
2
NamedLock 테스트 실패
0
186
2
테스트에서 트랜잭션 어노테이션 질문 있습니다.
0
171
2
optimistic Lock 재시도 질문입니다.
0
229
2
낙관적 락 테스트 실패
0
239
2
오류?
0
1624
4
LettureLockStockFacadeTest에서 오류가 발생합니다.
1
267
2
Pessimistic Lock 전체 테스트 오류 문의
0
357
3
비관적 락 vs 레디스(Lettuce)락 비교 관련 질문
0
458
2





