https://github.com/standard-Chan/aws-shop/pull/6
어려웠던 점
결제API 성공 과 DB에 결제 상태값 저장 을 하나의 트랜잭션으로 관리하기가 어려웠다.이로 인해 발생하는 문제
https://github.com/standard-Chan/aws-shop/issues/2
현재 Toss 결제 관련 흐름은 다음과 같다.
1. 우리 서버 → Toss 결제 승인 요청
2. 사용자 결제 처리
3. Toss 결제 승인 성공 (실제로 돈 결제됨)
4. Toss → HTTP 200 + DONE 응답
5. DB에 결제 COMPLETED 상태로 업데이트
그런데 Toss 결제 승인 (실제 돈 결제)까지 진행되고나서 서버 장애가 발생하면 어떻게 될까?
1. 우리 서버 → Toss 결제 승인 요청
2. 사용자 결제 처리
3. Toss 결제 승인 성공 (실제로 돈 결제됨)
4. Toss → HTTP 200 + DONE 응답
5. 💥 서버 프로세스 죽음
6. DB에 결제 상태를 COMPLETED 로 업데이트안됨 + 배송 처리도 안됨
이렇게 되면 사용자는 결제를 했음에도 불구하고, 물품을 받지 못하는 문제가 생긴다.
이에 대한 대처가 필요했다.