본문 바로가기

전체 글159

230419 TIL 1. 테스트 코드 작성하기 Service @Transactional public void bookorder(Long bookid, Integer quantity, Member member){ Book book = entityManager.find(Book.class,bookid,LockModeType.PESSIMISTIC_FORCE_INCREMENT); Long inven = book.getInventory()-quantity; if (inven new JumoonWorker(members.get(0),book,3,countDownLatch)) .limit(20) .collect(Collectors.toList()); workers.forEach(worker -> new Thread(worker).sta.. 2023. 4. 19.
230414 TIL 1. Spring batch 책 주문이 쌓이면 02시에 전날 02시 부터 쌓였던 주문들을 탐색하고 주문을 완료시킨다(취소 못하게 한다) 해당 주문들을 통해 어떤 책이 얼마나 팔렸는지 분석하여 ranking을 만들고 redis 서버에 rank 키 이름으로 올린다. 만약 불의의 사고로 redis서버의 데이터가 날아간 경우 서비스 단에서 redis에 랭킹을 다시 만들어 준다. 이것은 아래에 더 자세히 설명할 것이다. 2. 작성한 코드 1)BatchScheduler @Slf4j @Component public class BatchScheduler { @Autowired private JobLauncher jobLauncher; @Autowired private FakejumoonConfig fakejumoonC.. 2023. 4. 14.
[JPA, Redis, Lock] 동시성 제어를 위한 LOCK 기능 테스트와 Redis 분산락 적용 0.  미리 보는 결론도서 주문 서비스에서 주문 폭주 상황에서 동시성 제어를 하기 위해 Lock기능을 도입했다.현재 단일 서버 상황에서 부정락 기능만 이용해도 충분히 동시성 제어가 가능했지만 추후 다중 서버로 확장까지 고려하여 Redisson 분산 락을 도입했다.1.  Lock 옵션에 따른 실험 결과 1)Lock 옵션 종류와 설명   ㄱ. OptimisticNONE : 별도의 옵션을 사용하지 않아도 Entity에 @Version이 적용된 필드만 있으면 낙관적 잠금이 적용됩니다.OPTIMISTIC(read) : Entity 수정시에만 발생하는 낙관적 잠금이 읽기 시에도 발생하도록 설정합니다.읽기시에도 버전을 체크하고 트랜잭션이 종료될 때까지 다른 트랜잭션에서 변경하지 않음을 보장합니다.이를 통해 diry .. 2023. 4. 14.
20230410 Jmeter 실험일지 1. 실험 개요 1) 1000만건의 책데이터가 있고 각각의 책 데이터는 아래와 같은 칼럼과 내용을 가지고 있다. id(PK), 재고량, 출발년, 출판월, 가격, 출판사, 별점, 제목, 작가, 소분류,대분류, 이미지 2) 책의 재고량은 기본 20으로 설정되어 있고, 순간적으로 주문을 폭주시켜도 주문들이 정상 작동하는지 파악해보자. 3) 과정은 http request의 세션을 이용하여 어떤 유저가 주문을 했고, url을 통해 어떤책을 몇권 주문했는지 파악하고 재고량보다 같거나 적게 주문한 경우에만 주문이 정상작동하도록 설계했다. 4)book table 예시 5)Jumoon table 예시 2. 다양한 Lock의 종류와 Spring에서 해당 Lock들을 구현하는 방법 비관적 락 : 트랜잭션이 시작될 때 Sha.. 2023. 4. 11.