본문 바로가기

분류 전체보기144

20230420 TIL 1. 부정적 락과 분삭락 1)Pessimistic_write 트랜잭션을 시작할 때 Shared/Exclusive Lock을 적용한다. 따라서 동시성 충돌이 잦을 것으로 예상되어 동시성을 강력하게 지켜야 할 때 사용하여 야 한다. 충돌이 빈번하게 일어난다면 Optimistic보다 성능이 좋고, 데이터 정합성이 안정적이다. 하지만 별도의 Lock을 잡기 때문에 속도가 느리고, 경우에 따라 DeadLock 의 위험성이 있음은 유의 해야 한다. 단일 테이블에 요청을 하는 경우 가능성이 적지만 여러 테이블에 Lock을 걸면서 서로 자원이 필요한 경우 데드락이 발생할 수 있으며, 비관적 락으로 해결할 수 없다. 다음과 같은 예시 상황이 있다 트랜잭션 A가 테이블1의 1번 데이터에 lock을 획득 트랜잭션 B가 테이.. 2023. 4. 19.
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.
230413 TIL 1. Lock 옵션에 따른 실험 결과 1)Lock 옵션 종류와 설명 ㄱ. Optimistic NONE : 별도의 옵션을 사용하지 않아도 Entity에 @Version이 적용된 필드만 있으면 낙관적 잠금이 적용됩니다. OPTIMISTIC(read) : Entity 수정시에만 발생하는 낙관적 잠금이 읽기 시에도 발생하도록 설정합니다. 읽기시에도 버전을 체크하고 트랜잭션이 종료될 때까지 다른 트랜잭션에서 변경하지 않음을 보장합니다. 이를 통해 diry read와 non-repeatable read를 방지 OPTIMISTIC_FORCE_INCREMENT(write) : 낙관적 잠금을 사용하면서 버전 정보를 강제로 증가시키는 옵션 ㄴ. Pessimistic PESSIMISTIC_READ : dirty read가 .. 2023. 4. 14.