결제 CheckOut 구현하기
Checkout 이란?
Checkout 기능은 사용자가 상품을 구매하기 위해 결제를 요구하는 기능을 말합니다.
즉 결제를 요청하는 이벤트가 생성하는 단계 입니다. Checkout 기능을 통해 응답으로 orderId 값 (주문아이디값 그리고 멱등성 키) 을 반환 하게 됩니다.
응답 받은 orderId 값으로 최종 confirm 과정 통해 최종 결제가 등록되는 프로세스 입니다.
굳이 왜 중간에 Checkout 단계가 있어야 하는지 궁금 할수도 있습니다. 1번 사용자가 A 상품을 결제 신청을 한다고 가정 하겠습니다.
1번 사용자는 A 이라는 상품을 초기 결제는 딱 한번만 이루어집니다. 이후 자동으로 결제가 진행 될테니깐요.
초기 결제 승인시 불행하게도 시스템 내부적으로 문제가 발생되어서 다시 결제를 진행해야 되는 경우가 만약 발생된다고 하면
특정 결제 아이디값 (1번 사용자가 A 상품을 결제시 유니크한 식별자값) 을 통해 다시 결제가 진행해도 기존에 진행되었던 결제 이력을 이용해 정상적으로 처리 해야 하기 위함 입니다.
1 | /** |
또한 서비스 주문 신청시 orderId 값 경우 동일한 orderId 로 다시 신청 할 수 없도록 데이터베이스 상에 unique 로 지정 했습니다. (2번 이상 결제 등록 하는 과정을 회피 하기 위한 방도도 있음)
즉 2번 이상 호출시 무결성 제약 으로 실패 하게 됩니다.
이러한 멱등성 키 원리를 이용 하기 위해 UUID 생성 경우 UUID Version 3 를 이용해서 요청 파라미터를 이용해 생성 하도록 했습니다.
결제 Checkout 시퀀스 다이어그램
- User 가 PaymentCheckOutApiService 로 호출 통해 멱등성 키를 생성합니다.
- PaymentEventService 호출해서 PaymentEvent 및 PaymentOrder 값을 저장 합니다.
Copyright 201- syh8088. 무단 전재 및 재배포 금지. 출처 표기 시 인용 가능.