[DB락] MYSQL INNODB 락 관련 게시물 참고
https://mangkyu.tistory.com/298
- 자바/리팩토링
- · 2023. 10. 24.
더티 리드 (Dirty Read)트랙잭션 A 가 아직 커밋되지 않은 변경을 만든 경우,트랜잭션 B 가 해당 변경을 읽는 현상@Transactional(isolation = Isolation.READ_UNCOMMITTED) public void dirtyReadSimulation() { User user = userRepository.findById(1L).orElseThrow(); user.setBalance(user.getBalance() - 100); // 이 지점에서 다른 트랜잭션에서 사용자의 잔액을 읽을 수 있으며 더티 리드가 발생할 수 있습니다. }반복 불가능 리드 (Non-repeatable Read)트랜잭션 A가 같은 레코드를 두 번 읽고그 사이에 트랜잭션 B 가 해당 레코드를 변경하고 커밋..
트랜잭션의 격리 Transaction Isolation ACID 속성 (원자성, 일관성, 격리, 지속성) 중 하나입니다. 동시에 실행되는 트랜잭션 사이에서 변경사항이 어떻게 서로에게 보여지는지를 설명함 격리 수준에 따른 특징 DEFAULT 데이터베이스의 기본 격리 수준을 준수합니다. 기본값으로 설정되어있습니다. READ_UNCOMMITTED (읽기 미수정) 가장 낮은 수준의 격리 다른 트랜잭션의 수정이 끝나지 않았어도, 그 변경 내용을 읽을 수 있음. 장점 높은 동시성 제공가능 단점 모든 3가지의 동시성 부작용에 대해 경험가능 ㅇ.ㅇ 더티 리드, 비 반복 리드, 팬텀 리드 더티 리드, 비 반복 리드, 팬텀리드란? 링크 READ_COMMITTED (읽기 수정) 커밋된 데이터만 읽을 수 있음 대부분의 RDB..
https://mangkyu.tistory.com/298
1. @Mock의미@Mock 어노테이션은 Mockito에게 해당 필드를 모의 객체로 만들어야 함을 알림.사용 시기테스트할 클래스의 외부 의존성을 모킹할 때 사용함. @Mock private CartPersistence cartPersistence; @Mock private CartMapper cartMapper; 2. @InjectMocks의미@InjectMocks 어노테이션은 테스트 대상 클래스의 인스턴스를 생성하고, 모의 객체를 해당 클래스의 필드에 주입함.사용 시기테스트할 클래스의 인스턴스를 생성하고 모의 객체를 주입할 때 사용함. @InjectMocks private CartServiceImpl cartService; 3. when(...)의미when 메서드는 모의 객체의 메서드가 호출됐을 때 어..
동시성을 고려하여 pessimisstic lock 을 통해 select 이후 해당 행에 대한 잠금을 수행하고, 업데이트 delete 등을 수행하였다.그렇다면,,? 서비스를 테스트할때는 어떻게 동시적으로 서비스를 수행하는 사용자에 대한 고려를 반영할 수 있을까 고민이 되었다.병렬처리를 위한 Java ExecutorService 와 Future 여러 스레드를 사용하여 비동기 작업을 수행하고 결과를 관리할 수 있도록 해주는 컴포넌트입니다.ExecutorService 와 그 역할Java 의 쓰레드 풀을 관리하는 서비스쓰레드의 생성, 실행 및 종료를 관리할 수 있다.int numberOfThreads = 100; ExecutorService executorService = Executors.newFixedThre..
출고 배송 도착 등의 로직을 별도 DB 에 구성해둘 수 있다.데이터베이스 구성데이터베이스에서는 Order와 OrderStatus 두 개의 테이블을 구성하여 주문과 주문 상태를 관리합니다.Order 테이블: 주문 관련 정보를 저장하며, ORDER_STATUS 필드를 통해 현재 주문의 상태를 기록합니다.OrderStatus 테이블: 가능한 주문 상태와 그에 대한 설명을 저장합니다. OrderStatus 테이블의 CODE_NAME 필드에 정의된 상태 값만이 Order 테이블의 ORDER_STATUS 필드에 기록될 수 있습니다.어플리케이션 로직어플리케이션에서는 ORDER_STATUS라는 ENUM 클래스를 사용하여 주문 상태를 관리합니다.ENUM 클래스: DB의 OrderStatus 테이블과 동일한 상태 값을 가..