전체 글
-
-
-
-
-
OptimisticLock / Pessimistic Lock / Named LockBackEnd/실습 2022. 9. 26. 15:41
DB 를 통해 동시성을 제어할 때는 Pessimistic Lock, Optimistic Lock, Named Lock 세가지 방법이 있다. 이미 mysql 사용한다면 별도의 비용 없이 동시성을 제어할 수 있고, 어느 정도 트래픽까지 문제없이 사용할 수 있다. 더 좋은 성능이 필요하다면 redis 를 사용해 동시성 제어가 가능하다. Pessimistic lock 은 미리 동시에 접근한다고 가정하고 방어하기 때문에 충돌이 잦은 경우에, Optimistic lock 은 update 하는 시점에 select 해온 버전에서 데이터가 변경이 없는지 확인하고 update 를 하는데, 충돌이 거의 일어나지 않는 상황에 사용하기 적절하다. Optimistic Lock 은 버전이 달라졌을 경우 재시도하는 로직을 함께 구현..
-
동시성 제어 syncronized와 @TransactionalBackEnd/스프링 2022. 9. 26. 14:51
서비스에 @Transactional 어노테이션만 붙이면 동시에 자원에 접근하는 스레드들에 레이스 컨디션이 발생했을 경우, 기대와 다르게 동작할 수 있다. @RequiredArgsConstructor @Service public class StockService { private final StockRepository stockRepository; @Transactional public void decrease(Long id, Long quantity){ Stock stock = stockRepository.findById(id).orElseThrow(); stock.decrease(quantity); stockRepository.saveAndFlush(stock); } } 1. 트랜잭션이 시작되는 메서드..
-
-
계층형 아키텍처는 데이터베이스 주도 설계를 유도한다.카테고리 없음 2022. 9. 24. 19:03
계층형 아키텍처는 계층을 잘 이해하고 구성한다면 웹 계층이나 영속성 계층에 독립적으로 도메인 로직을 작성할 수 있다. 원한다면 도메인 로직에 영향을 주지 않고 웹계층과 영속성 계층의 사용 기술을 바꿀 수도 있다. 잘 만든다면 선택의 폭을 넓히고, 변하는 요구사항에 빠르게 대응할 수 있지만, 나쁜 습관이 스며들기 쉽고, 시간이 지날수록 소프트웨어를 점점 더 변경하기 어렵게 만드는 허점이 있다. 아래 구조는 영속성계층과 도메인 계층의 강한 결합이 생긴다. 서비스는 영속성 모델을 비지니스 모델처럼 사용하고, 서비스가 도메인 로직뿐만 아니라, 즉시/지연 로딩, 트랜잭션, 캐시 플로시 등 영속성 계층과 관련된 일을 하게 된다. 영속성 코드가 사실상 도메인 코드에 녹아들어가, 둘 중 하나만 바꾸는 것이 어려워진다...