우아한테크코스 레벨 2 방탈출 미션에서 토스 결제 연동하는 것을 진행했다.
연동하면서 배웠던 토스 결제 flow를 정리해봤다.
결제를 위한 단계는 크게 5 단계로 나눌 수 있다.
먼저 결제를 하기 전에 사용자로부터 결제에 필요한 정보를 백엔드 서버에 조회한다. 이는 결제할 상품, Success URL, Fail URL 등을 포함할 수 있다.
받아온 결제 정보를 바탕으로 결제 위젯을 웹 페이지에 렌더링한다. 사용자는 여기서 결제를 진행할 수 있다.
레더링된 위젯은 아래와 같이 사용자에게 보여진다.
사용자가 결제를 진행하기 위해 결제 수단을 선택하면, 해당 결제 정보를 토스 페이먼츠에 전송하여 결제를 요청한다.
그 후 토스 페이먼츠에서 생성된 식별 정보(payment_key, ...)를 바탕으로 Success URL로 리다이렉트한다.
결제를 승인하고 처리하기 위해 서버에게 결제 승인을 요청한다. 이 단계에서 결제가 성공적으로 완료된다.
결제 승인 API 호출 후, 상점 서버는 결제 승인 결과를 받아와 처리한다. 이를 통해 결제가 성공적으로 완료되었는지, 실패했는지 등을 확인할 수 있다.
타임아웃(timeout)은 외부 API 호출 시에 일정 시간이 지나도 응답이 오지 않으면 요청을 중단하고 오류를 발생시키는 기능을 의미한다. 이는 시스템이 무한정 응답을 기다리는 것을 방지하고, 리소스를 효율적으로 관리하기 위해 설정한다.
타임아웃은 일반적으로 Connection Timeout과 Read Timeout, 두 가지 유형으로 설정할 수 있다.
Connection Timeout은 클라이언트가 서버에 연결을 시도할 때 최대 대기 시간을 설정하는 것이다. 연결이 시도되고 있는 동안, 서버가 응답하지 않거나 네트워크가 느린 경우 일정 시간 내에 연결이 성립되지 않으면 연결 시도를 중단한다.
Read Timeout은 클라이언트가 서버에 요청을 보낸 후, 응답 데이터를 읽기 시작할 때까지의 최대 대기 시간을 설정하는 것이다. 요청이 성공적으로 서버에 도달했더라도, 서버가 응답 데이터를 보내지 않는 경우 일정 시간 내에 응답을 받지 못하면 타임아웃을 발생시킨다.
토스페이먼츠 문서에서는 API의 Read Timeout은 30초에서 60초로 설정하라고 권고한다.