개발바닥

[ 지식 공유 ] 이중 결제 방지하는 방법 본문

ETC

[ 지식 공유 ] 이중 결제 방지하는 방법

라이언 2023. 4. 18. 20:44
반응형

결제 시스템에서 발생할 수 있는 가장 심각한 문제 중 하나는 고객에게 이중으로 청구되는 것이다.

그래서 결제 시스템을 설계할 때 결제에 대해서 정확히 한 번만 실행하도록 하는 것이 중요하다.

 

한 번만 실행시키는 방법은 다음과 같습니다.

1. 적어도 한 번은 실행된다. (Retry)
2. 최대 한 번만 실행한다. (Idempotency)

 

Retry 와 Idempotency 하는 방법을 아래 그림을 통해 이해해봅시다.



재시도 (Retry)

네트워크 오류나 시간 초과로 인해 결제 거래를 다시 시도해야 하는 경우가 있습니다.

위 그림처럼 결제 실패시 결제 성공할 때 까지 재시도를 함으로써 재시도는 적어도 한 번에 결제를 보장합니다.

하지만, 재시도를 무한으로 하게 될 경우 계속 실패하게 된다면 서버 리소스를 잡아 먹기 때문에 무한으로 설정하는 것은 좋지 않은 선택입니다.

 

 

무효화 (Idempotency)

동일한 요청을 여러 번 수행해도 결과가 항상 동일하게 나오도록 하는 개념이다.

다시 말해, 동일한 요청을 여러 번 수행하더라도 시스템에 영향을 미치지 않고 오류를 방지하는 방법이다.

동일한 결제 요청이 중복으로 전송되어도 결제가 한 번만 이루어지도록 보장할 수 있다.

이는 결제 요청이 네트워크 문제 또는 다른 문제로 인해 중복으로 전송될 수 있는 경우에 특히 유용하다.

결제 요청시 일정 시간이 지나면 만료되는 고유한 식별자 (UUID)를 생성해서 요청시 같이 전송을 한다.

서버는 해당 식별자를 기반으로 요청을 처리하고 응답한다.

이러한 식별자를 사용하여 중복 요청을 거부하고 이미 결제가 처리되었음을 나타낼 수 있다.

 

 

 

 

반응형
Comments