Skip to content

[test] Stock 재고 감소 동시성 테스트 #1

@hellonaeunkim

Description

@hellonaeunkim

🛩️ Description

Stock 도메인 재고 감소 로직 (decreaseStock) 테스트 코드 작성

☑️ Todos

  • 재고 감소 시 1개의 요청에 대한 테스트 : 단일 스레드 환경
    • 정상 케이스 : 충분한 재고에서 감소 시 재고가 정확히 감소
    • 예외 케이스 : 재고 부족 시 예외/에러 처리 검증
  • 재고 감소 시 동시에 100개의 요청에 대한 테스트 : 멀티 스레드 환경
    • 동시에 N개의 스레드/요청이 같은 재고를 감소시키는 시나리오 작성
    • 현재 구현 상태에서 테스트가 실패(레이스 컨디션 등)하는 것 확인 및 기록
  • 동시성 제어 방식 선정 (ex. DB Optimistic Lock, Pessimistic Lock, synchronized, 분산락 등)
  • 재고 감소 로직 리팩토링 및 동시성 처리 적용
  • 멀티 스레드 테스트 재실행하여 통과 확인

🧪 테스트 시나리오 예시

단일 스레드

  1. 재고 10개인 상품에 대해 3개 감소 요청 → 최종 재고 7
  2. 재고 2개인 상품에 대해 3개 감소 요청 → 예외 발생 (정의된 에러 타입/메시지 확인)

멀티 스레드

  • 리팩토링 전 (실패 시나리오)
  1. 재고 100, 감소 요청 각 1개씩, 스레드 100개 동시 실행
    → 최종 재고 0이 되지 않으며 레이스 컨디션 발생(테스트 실패)
  2. 재고 10, 감소 요청 각 2개씩, 스레드 10개 동시 실행
    → 재고 음수 발생 또는 예외 처리 불안정(테스트 실패)
  • 리팩토링 후 (성공 시나리오)
  1. 재고 100, 감소 요청 각 1개씩, 스레드 100개 동시 실행
    → 최종 재고 정확히 0, 동시성 문제 없음(테스트 성공)
  2. 재고 10, 감소 요청 각 2개씩, 스레드 10개 동시 실행
    → 실제로는 10개만 감소되고 나머지는 재고 부족 예외로 처리(테스트 성공)

Metadata

Metadata

Assignees

Labels

refactorCode refactoring without changing external behaviortestWork related to writing, updating, or refactoring test code

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions