🧠 이번 주에 새로 배운 것
- CAS, AtomicXxxx, ConcurrentHashMap 등 코드 레벨에서 동시성을 제어하는 Lock-Free한 방식을 알게 되었습니다.
- Race Condition, Lost Update, Deadlock에 대한 개념을 확실히 다질 수 있게 되었습니다.
- 낙관적 락 선택시 version 대신 update 시간으로 적용하면 이슈가 생기는 이유를 알았습니다. 중요한 건 각 버전마다 고유한 값을 보장하는 것임을요.
- mysql 유니크 제약 조건에서 동시 삽입이 발생시 DeadLock이 발생할 수 있다는 사실을 알게 되었습니다.
💭 이런 고민이 있었어요
- Lock-Free한 방식은 어떤 방식이 있고, 사용가능한 자원에서 최선의 방법이 어떤 것이 있을까 고민했습니다.
- 따닥 이슈 방어시 중복 요청을 멱등하게 가져가는 방법이 궁금했습니다. 주문키를 어디서 생성해서 관리해야 하는지 고민 포인트였습니다.
- MVCC가 동시성 제어와 무슨 관계가 있는지 고민하였습니다. MVCC는 읽기 성능을 높이기 위한 방식이며, 동시성 제어는 별도임을 후에 깨달았습니다.
💡 앞으로 실무에 써먹을 수 있을 것 같은 포인트
- 동시성 이슈가 발생할 가능성이 높은 부분과, 해소를 위한 상황에 맞는 적절한 방식을 선택할 수 있는 지식이 생겼습니다.
- CountDownLatch, CompletableFuture를 사용하여 동시성 테스트를 적용할 수 있을 것 같습니다.
🤔 아쉬웠던 점 & 다음 주에 해보고 싶은 것
- 시간이 부족하여 주문 정보를 보관하는 Payment 객체를 분리하지 못했습니다.
- 쿠폰 충전시 동시성 이슈를 고려하지 못했습니다. 외부 결제 API를 연동하는 점도 고려하여 추후 구현예정입니다.