예매·결제 내역 프론트엔드 엔지니어
결제 요청 중 타임아웃이 났다면, 그냥 다시 요청해도 괜찮을까요?
API 권한 검증, 개인화 데이터 캐시 격리, 멱등성 키(Idempotency Key)를 이용한 안전한 재시도와 결제 확정을 설계합니다.
상황 배경
로그인한 사용자의 예매 내역을 보여주고 결제 확정을 요청하는 화면입니다. 계정 전환 시 다른 사용자의 예매 내역이 섞여 보이면 안 되고, 네트워크가 끊겨 응답을 받지 못했다는 이유로 같은 주문이 중복 결제되어서도 안 됩니다.
설계 제약 조건
- 개인화된 예매·결제 데이터는 다른 사용자나 로그아웃 이후 세션에 노출되면 안 됩니다.
- 프론트엔드의 라우트 가드나 버튼 숨김 처리가 백엔드 API의 권한(인가) 검증을 대신할 수 없습니다.
- 서버는 현재 주문 상태 조회 API와 동일 주문 재시도를 식별하는 멱등성 키(Idempotency Key) 계약을 제공합니다.
- 결제 최종 확정은 브라우저 화면 전환 여부가 아니라 서버 간 검증 결과에 따라 결정되어야 합니다.
각 선택지의 예상 결과와 트레이드오프를 비교하는 설계 연습 시나리오입니다. 서비스 요구사항에 따라 다른 선택도 가능하며, 연결된 코드 실습은 아래 링크에서 바로 실행해 볼 수 있습니다.
질문 1 / 4
프론트엔드에서 비로그인 접근을 막았을 때
프론트엔드에서는 로그인하지 않으면 주문 상세 페이지로 이동하지 못하게 막아 두었습니다. 하지만 API 엔드포인트 자체는 브라우저 바깥에서도 호출할 수 있습니다.
화면에서 라우팅을 막았더라도 API 서버에서 주문 소유자를 다시 검증해야 할까요?
1 / 4