Skip to content

[사전 과제] 동시성 이슈 해결#6

Open
soyoungcareer wants to merge 2 commits intohanghae-skillup:mainfrom
soyoungcareer:week0
Open

[사전 과제] 동시성 이슈 해결#6
soyoungcareer wants to merge 2 commits intohanghae-skillup:mainfrom
soyoungcareer:week0

Conversation

@soyoungcareer
Copy link

작업 내용

이번 PR에서 진행된 주요 변경 사항을 기술해 주세요.

코드 구조, 핵심 로직 등에 대해 설명해 주시면 좋습니다. (이미지 첨부 가능)

ex: ConcurrentOrderService에 동시 주문 요청 처리 기능 추가

    1. 상품 DB 를 ConcurrentHashMap 으로 변경
    1. 가장 최근 주문 정보를 저장하는 DB 를 ThreadLocal 로 변경
    1. 검증로직 assertNotEquals -> assertEquals 로 변

발생했던 문제와 해결 과정을 남겨 주세요.

ex) 문제 1 - 다수의 사용자가 동시에 같은 리소스를 업데이트할 때 재고 수량이 음수로 내려가는 데이터 불일치 문제 발생

해결 방법 1 - Redis SET 명령어에 NX(Not Exists)와 PX(Expire Time) 옵션을 활용해 락을 설정했습니다. 이유는 ~

  • 문제 1 - ConcurrentMap의 put, get을 사용하면서 초기 상품 데이터를 AtomicInteger 로 변경하여 처리했을 때, 동시성 문제가 해결되지 않았음.
  • 해결 방법 1 - ConcurrentMap의 compute 메서드를 사용하여 동시성 문제 해결함.

이번 주차에서 고민되었던 지점이나, 어려웠던 점을 알려 주세요.

과제를 해결하며 특히 어려웠던 점이나 고민되었던 지점이 있다면 남겨주세요.

  • 처음 알게 된 개념이 많아서 이해가 어려웠음.

리뷰 포인트

리뷰어가 특히 의견을 주었으면 하는 부분이 있다면 작성해 주세요.

ex) Redis 락 설정 부분의 타임아웃 값이 적절한지 의견을 여쭙고 싶습니다.

기타 질문

추가로 질문하고 싶은 내용이 있다면 남겨주세요.

ex) 테스트 환경에서 동시성 테스트를 수행하였고, 모든 케이스를 통과했습니다. 추가할 테스트 시나리오가 있을까요?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant