woowa-techcamp-2024/Team1-3K1K

[고도화] 결제시 동일한 카트에 대한 중복 결제 문제

Closed this issue · 0 comments

동작 과정

image

배경

사용자는 카트에 담긴 상품들을 결재할 수 있다. 따라서 결재하기에 앞서 주문하고자 하는 상품을 카트에 담는 과정이 선행되어야 한다.

  • 결제할 리스트를 만들기 위한 시퀀스
    1. 카트repository에 저장된 cart를 받아온다.
    2. cart에 저장된 아이템들의 validation을 진행한다.
    3. 모든 validation이 통과하면 order를 만든다
    4. cart를 flush한다.
    5. validation이 통과하지 못하면 cart는 그대로 유지된다.

현재의 코드는 동시성 제어가 부재인 상황이기 때문에, 사용자의 중복 요청(일명 따닥)이 발생하는 경우 중복 결재가 발생할 우려가 있다.

  • 발생 예시
    1. 1번 쓰레드와 2번 쓰레드 모두 customerID가 일치함.(따닥이기때문에)
    2. 1번 쓰레드가 카트repository에 저장된 cart를 받아온다.
    3. 1번 쓰레드가 validation을 진행한다.
    4. 2번 쓰레드도 카트repository에 저장된 cart를 받아온다.
    5. 2번 쓰레드가 validation을 진행한 뒤, 1번과 2번 쓰레드 모두 결제를 진행하여 order를 생성함 ⇒ 중복결제