🧠 이번 주에 새로 배운 것
- 동시성을 제어하고, 이를 테스트할 수 있는 방법에 대해서 알게 되었다.
- ForkJoinPool, CompletableFuture, Executor, CountDownLatch
- `@Transactional`의 필요성에 대해 생각해보게 되었다.
- 상품 재고 차감에서 데드락이 발생할 수 있음을 알게 되었다.
💭 이런 고민이 있었어요
- SELECT FOR UPDATE 가 거는 락의 범위가 예상과 달라서 어려웠다.
- 한 트랜잭션에서 여러 상품의 재고 차감이 이루어지는 경우, 데드락이 발생한다.
- 비관적/낙관적 락의 결정이 특정한 근거로 정해져야할 것 같다고 느꼈다.
💡 앞으로 실무에 써먹을 수 있을 것 같은 포인트
- 비관적 락이 필요한 경우, 락의 범위가 예상치 못하게 넓진 않은지 확인하기
- Executor와 CountDownLatch를 통한 동시성 제어 테스트
- 한 트랜잭션에서 여러 레코드에 락을 거는 경우, 트랜잭션을 분리하거나 순서를 지정하는 방식으로 데드락을 방지할 수 있다.
- 동시성 문제를 락을 통해 제어할 수 있지만, 가장 좋은 것은 “동시에 접근하지 않는 설계”를 하는 것이다.
- 비관적/낙관적 락은 비즈니스나 상황에 따라 유동적이다.
🤔 아쉬웠던 점 & 다음 주에 해보고 싶은 것
- 동시성 테스트 도구에 대해서 더 학습하기
- ForkJoinPool, CompletableFuture, Executor 각 병렬 처리가 어떻게 이루어지는지 이해해보기
- 트랜잭션 필요성에 대해 나만의 언어로 정리해보자.
- 주문과 결제 분리하기
- MVCC 관련 개념에 대해서 스스로 정리하기