[E-commerce] 동시성 문제 해결하기 (비관적 락, 네임드 락, 분산 락)
·
트러블슈팅
이커머스 서비스에서 발생할 수 있는 동시성 문제들을 정리하고, 다양한 방법으로 동시성 문제를 해결해 보며 겪은 경험들을 공유해 보자 합니다. 동시성 문제가 발생할 수 있는 유즈케이스Case 1 (조회한 상품 재고 수량이 맞지 않는 경우)1. 사용자 A가 재고가 5개인 상품을 조회하고 재고 1개 차감 요청, 트랜잭션 시작2. 사용자 B가 동시에 동일 상품의 상품을 조회, A의 트랜잭션이 아직 커밋되지 않았기 때문에 재고가 5개인 것으로 확인3. 사용자 A의 트랜잭션이 커밋되어 실제 재고는 4개로 업데이트4. 실제 상품의 재고는 4개이지만 사용자 B가 조회한 상품의 재고는 5개로 재고 정합성 불일치 문제 발생 Case 2 (동시에 상품을 주문할 때, 상품의 재고가 부족한 경우)1. 사용자 A가 재고 3개 차..
[JPA] @Transactional(readOnly = true)의 효과와 사용 시 주의할 점
·
Java/Spring
기존 프로젝트에서 @Transactional으로 설정해 준 서비스에 readOnly 속성을 사용하지 않고 있었는데 데이터를 읽기만 하는 서비스에 readOnly = true를 적용해 읽기 전용 모드로 설정해 주는 것이 좋을 것 같다는 이야기를 듣고 읽기 전용으로 설정해 주면 어떤 효과를 얻을 수 있는지 알아봤다.@Transactional(readOnly = true)Spring에서 @Transactional 어노테이션을 사용할 수 있는데 트랜잭션을 readOnly = true로 설정해 주면 읽기 전용 모드로 변경할 수 있다. 그러면 @Transactional(readOnly = true) 속성을 적용함으로써 얻을 수 있는 이점에 대해 알아보자. 우선 @Transactional(readOnly = true..