SERIESPonsLink Product Operations
[PonsLink] 결제 성공 화면만으로 세션을 열 수는 없었다
·2 min read·120 views
PonsLinkWebhookPayment AccessOperations
결제 성공 화면은 기분 좋은 초록색이다. 하지만 그 화면만 보고 세션을 열면 안 됐다. 브라우저는 성공을 먼저 보여줄 수 있고, 웹훅은 늦게 도착할 수 있다. 같은 이벤트가 중복으로 들어오는 경우도 있다. 화면과 서버 상태를 같은 진실로 취급하면 권한 없는 입장이 열릴 수 있다.

성공과 입장을 분리하기
성공 UI 뒤에는 pending access 상태가 필요했다. 서버가 결제 확정을 반영하기 전까지는 방을 열지 않고, 사용자는 지금 결제 확인 중이라는 사실을 알아야 한다. “결제 확인 중”과 “입장 가능”을 같은 화면 문장으로 뭉개면 기다림이 오류처럼 느껴진다.

웹훅이 기준이 되는 이유
입장 권한의 기준은 웹훅을 반영한 서버 상태여야 했다. 브라우저의 성공 화면은 안내이고, 서버의 확정 상태가 권한 판정이다. 이 분리는 결제와 권한을 한 번에 처리하는 코드보다 길어 보이지만, 지연과 중복 이벤트를 설명할 수 있는 유일한 경계였다.

대기 상태를 숨기지 않으면 사용자는 무엇을 기다리는지 알 수 있고, 운영자는 권한이 열리지 않은 이유를 추적할 수 있다. 결제 완료와 세션 입장을 분리한 것은 보수적인 선택이 아니라 제품 신뢰를 위한 선택이었다.
마치며
성공 화면은 결제가 접수됐다는 안내일 뿐, 방을 열 권한의 증거가 아니다. 입장 권한은 서버가 확인한 상태에서만 만들어야 한다.