TIL

TIL - 결제 로직 변경

kinim329 2026. 3. 6. 23:53

승인 API만 호출하는 방식에서 벗어난 이유

초기에는 외부 요청을 통해 결제 완료 정보가 들어오면, 그 결과를 저장하기만 하면 된다고 생각했다.

하지만 이 방식은 외부 요청 메시지를 100프로 신뢰해야 한다는 문제가 있었다.

만약 금액이 조작되어 들어오거나 중복요청이 발생할 때 서버측에서 검증할 수단이 없었기 떄문이다.

왜 생성단계가 필수인가?

단순 승인구조에서 생성->승인 순서로 구조를 변경했다.

 

  • 금액 조작 방지 : 서버가 미리 "이 주문은 2만 원이다"라고 장부에 적어둔다. 나중에 외부에서 "100원 결제됐다"고 알려오면, 미리 적어둔 장부와 대조해 즉시 거절할 수 있다.
  • 중복 결제 방지: DB의 주문 번호에 유니크 제약을 걸어 '결제 장부'가 주문당 딱 하나만 만들어지게 했다. 덕분에 똑같은 결제 요청이 실수로 두 번 들어와도 중복 결제가 일어나는 사고를 막았다.
  • 중도 포기 확인: 결제 도중 오류가 나거나 사용자가 그만두더라도, '결제 시도 흔적'이 장부에 남는다. 이를 통해 어떤 주문에서 결제가 안 되고 있는지 원인을 파악할 수 있게 됐다.

마무리

결제 로직에서 생성은 기록이 아니라 검증을 위한 필수요소임을 깨달았다