Skip to content

Latest commit

 

History

History
175 lines (93 loc) · 5.31 KB

KafkaTestMulti200.md

File metadata and controls

175 lines (93 loc) · 5.31 KB

주문 전 테이블 확인 및 주문 수량 확인


상품 테이블

  • 한 주문당 구매할 상품
    4번 상품(길럭시북 그래파이트 15.6인치 코어 i5 - 512GB) - 2개
    5번 상품(김럭시북9 그려파이트 14인치 코어 16GB - 2TB - 인도우11 PRO) - 1개
// 예시
주문1: {
	주문정보: { ... },
	주소: { ... },
	상품리스트: [ { 4 상품, 수량 2 }, { 5 상품, 수량 1 } ]
}
  • 위의 주문을 200건 동시에 요청할 계획 입니다.



주문 테이블

  • 주문 테이블은 현재 어떤 주문도 받지 않은 상태 입니다.


테스트 전에 기대하는 결과

한 주문당 4번의 상품을 2개씩 주문하니

  • 4번의 상품이 재고가 0개가 되는 시점은 30개 - (2개 * 15번 주문) = 재고 0개
    -> 즉, 15개의 주문이 들어왔을 때 4번 상품의 재고가 0개, 상태가 SOLD_OUT 되고
    재고 수량은 더 이상 마이너스로 줄어들지 않기를 기대합니다.

  • 4번의 재고가 0개가 되는 시점에
    5번 상품은 20개 - (1개 * 15번 주문) = 5개
    -> 즉, 하나로 묶인 주문이니 4번의 재고가 부족할 때 주문 자체가 불가능 해야 하므로
    5번 상품의 재고는 5개의 재고가 남을 것으로 기대합니다.



테스트 코드 실행

  • 스레드 풀 200개를 준비 합니다.

  • 동시 요청 할 200건의 태스크를 준비 합니다.
    (한 개의 태스크 당 1건의 주문 - 4번 상품 2개, 5번 상품 1개 )

  • 200건의 동시 요청 실행 합니다.



결과 진행 상황 확인


상품 테이블

  • 4번 상품 재고 0개, 상태 SOLD_OUT - 기댓 값과 일치 합니다.
  • 5번 상품 재고 5개 - 기댓 값과 일치 합니다.


주문 테이블 들어온 전체 주문 수

  • 200건의 요청이 한 번에 들어왔을 때

  • 주문 요청 자체에서
    상품의 상태가 SOLD_OUT임을 확인 한 시점 102
    102개 지점 부터는 더 이상 요청 자체를 받지 않았습니다.


102건 주문의 처리 상태 확인

  • 4번 상품의 SOLD_OUT된 시점이 2개씩 주문 * 15 = 0, 즉 15번 째 주문 이므로
    실제 주문 처리될 건은 15건, 반려(거절) 처리될 건은 87건으로 기대해 볼 수 있습니다.

  • 동시 다발로 들어온 주문 102건 중
    실제 주문 받을 15건을 제외 하고

  • 나머지 87건의 주문은 재고가 부족 하였을 것이기 때문에
    카프카에 의해 반려 처리 중인 것을 확인합니다.


상품 서비스에서 orderReject 토픽을 생산하는 과정

  • 해당 상품이 소진 되었기 때문에 orderReject토픽을 생산합니다.


주문 서비스에서 orderReject 토픽을 소비하는 과정

  • orderReject토픽을 소비합니다. 해당 주문 건을 찾아 주문 상태를 REJECT로 변경 합니다.



최종 결과 정리

  • 200건의 동시 요청 중 상품 상태가 SOLD_OUT 임을 확인 한 시점 부터 요청을 받지 않았으며

    그 사이엔 102건의 요청이 들어 왔습니다.

  1. 최종 결과 주문을 정상적으로 받아야 하는 건수는 15건 입니다.

  2. 최종 결과 재고 부족으로 주문을 카프카에 의해 반려 처리 되어야 할 건수는 87건 입니다.

  3. 상품의 재고는 4번 상품 0개 - SOLD_OUT, 5번 상품 5개 입니다.


15건 을 제외한 나머지 주문 87건은 전부 반려 처리 되었음을 확인합니다.


  • 주문 상품 테이블 - 주문 카운트, 주문 반려 카운트


  • 주문 - 전체


  • 상품 테이블



이 후 조치 사항

  • orderReject 토픽을 소비하는 다른 Queue System을 추가하여 반려된 87건의 주문에 대해서는

    브라우저로 알림을 보내주는 SSE(Server Sent Events)기능이나

    직접 사용자에게 전달 하는 다른 메시징 시스템을 활용하여

    사용자에게 주문이 재고 부족으로 거절/반려 처리 되었다는 알림을 보낼 수 있겠습니다.