Skip to content

[사전과제] 동시성 제어#19

Open
SooLee99 wants to merge 1 commit intohanghae-skillup:mainfrom
SooLee99:main
Open

[사전과제] 동시성 제어#19
SooLee99 wants to merge 1 commit intohanghae-skillup:mainfrom
SooLee99:main

Conversation

@SooLee99
Copy link

@SooLee99 SooLee99 commented Jan 6, 2025

제목(title)

  • [사전과제] 재고 관리 및 현재 주문 정보 동시성 문제 해결

작업 내용

(1) OrderInfo 클래스 추가

(2) OrderService 클래스 추가

  • 상품 재고를 ConcurrentHashMap을 사용하여 스레드 관리를 하였습니다.
  • 최신 주문 정보를 ThreadLocal을 이용하여 각 스레드별로 독립적으로 저장하고 관리합니다.
  • order 메서드를 통해 동시 다발적인 주문 요청을 원자적으로 처리하여 재고의 일관성을 유지합니다.
  • 재고 조회 및 스레드별 주문 정보 조회 메서드를 추가하였습니다.
  • 스레드 풀 환경에서의 데이터 혼동을 방지하기 위해 removeThreadLocalData 메서드를 구현하였습니다.

(3) OrderServiceTest 클래스 추가

  • JUnit을 사용하여 OrderService의 동시성 처리 로직을 검증하는 단위 테스트를 작성하였습니다.
  • 다수의 스레드가 동시에 주문을 수행할 때 재고 수량이 올바르게 유지되는지 확인합니다.

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

문제 1

  • 다수의 사용자가 동시에 같은 상품을 주문할 경우, 재고 수량이 정확하게 감소되지 않아 음수로 내려가는 데이터 불일치 문제가 발생했습니다.

해결 1

  • ConcurrentHashMap의 compute 메서드를 활용하여 각 상품에 대한 재고 업데이트를 원자적으로 처리하였습니다. 또한, ThreadLocal을 사용하여 각 스레드별로 독립적인 주문 내역을 관리함으로써 데이터의 일관성을 유지하였습니다.

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

  • 동시성 제어: 다수의 스레드가 동시에 접근할 때 데이터의 일관성을 유지하기 위해 ConcurrentHashMap과 ThreadLocal을 적절히 활용하는 방법에 대해 고민하였습니다.
  • ThreadLocal 사용 시 메모리 누수 방지: 스레드 풀 환경에서 ThreadLocal 사용 시 발생할 수 있는 메모리 누수를 방지하기 위해 요청이 끝난 후 removeThreadLocalData 메서드를 통해 ThreadLocal 데이터를 정리하는 방안을 고려하였습니다.

리뷰 포인트

  • 동시성 처리 로직 검토: OrderService 클래스 내에서 ConcurrentHashMap과 ThreadLocal을 활용한 동시성 제어 로직이 올바르게 구현되었는지 확인 부탁드립니다.

  • ThreadLocal 데이터 정리: 스레드 풀 환경에서의 ThreadLocal 데이터 정리가 제대로 이루어지고 있는지 검토 부탁드립니다.


기타 질문

(1) 현업에서는 이와 유사한 동시성 문제를 어떻게 해결하고 있나요?

  • 다양한 동시성 제어 메커니즘 중 어떤 방법들이 주로 사용되는지, 그리고 그 이유는 무엇인지 궁금합니다.

(2) 스레드 풀 환경에서 ThreadLocal을 사용할 때 주의해야 할 점은 무엇인가요?

  • 메모리 누수 방지나 데이터 일관성 유지 측면에서 고려해야 할 사항들이 있는지 알고 싶습니다.

- OrderInfo 클래스를 생성하여 주문 정보를 불변 객체로 관리하도록 구현했습니다.

- OrderService 클래스에서 productDatabase의 자료 구조를 HashMap에서 ConcurrentHashMap으로 변경하였습니다.

- OrderService 클래스의 order 메서드에서 ConcurrentHashMap의 compute 함수를 활용하여 재고 조회 및 업데이트를 원자적으로 처리하도록 수정했습니다.

- JUnit을 사용하여 OrderService의 동시성 처리 로직을 검증하는 단위 테스트를 작성하였습니다.
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