네트워크 타임아웃(Timeout)은 서버로 요청을 보냈지만 일정 시간 동안 답변을 받지 못하면 발생해요. 요청을 보내고 일정 시간을 기다렸다가 응답이 없으면 최초 요청을 실패 처리하고 다시 요청을 보내는 거예요.
타임아웃은 왜 필요할까요? 리소스를 절약하기 위해서인데요. 서버는 여러 클라이언트와 동시에 연결을 생성해요. 응답 시간이 길어지는 연결이 많으면 리소스가 모두 소진되어 장애로 이어질 수 있어요. 예를 들어, 네트워크 문제로 서버가 여러 요청을 처리하지 못하면, 대기하는 요청이 많아지고 리소스가 모두 소진될 수 있어요. 타임아웃을 사용하면 오래 걸리는 요청을 중단하고 다른 요청을 받을 수 있죠.
타임아웃 유형에는 대표적으로 'Connection Timeout'과 'Read Timeout'이 있는데요. 각 유형의 특징과 원인을 자세히 알아볼게요.
Connection Timeout은 클라이언트에서 설정한 시간까지 서버에 연결되지 않으면 발생해요. 서버와 연결이 안 되는 상황에서 클라이언트가 계속 멈춰 있으면 안 되기 때문이죠.
토스페이먼츠 결제 연동 과정에서 Connection Timeout을 해결하려면 방화벽 설정을 다시 확인해주세요. 클라이언트의 방화벽에서 토스페이먼츠 IP의 접근을 허용해야 연결 요청이 정상적으로 서버로 전달돼요. 토스페이먼츠 IP를 클라이언트에서 허용하지 않는다면, 연결 요청이 전달되지 않아요. 대부분의 Connection Timeout 원인은 방화벽 문제에요.
Read Timeout은 클라이언트에서 설정한 시간까지 서버에서 응답이 오지 않으면 발생해요. 클라이언트와 서버가 연결은 됐지만, 서버가 클라이언트의 요청을 정상적으로 처리 못 했을 때 일어나요. Read Timeout은 클라이언트에서 너무 많은 데이터를 조회했거나, 서버가 요청을 처리하는데 시간이 오래 걸려서 발생하는 경우가 많아요.
토스페이먼츠 API의 Read Timeout은 30초에서 60초로 설정하면 돼요. 자세한 내용은 API 레퍼런스 목록에서 확인해보세요. 타임아웃 이후에 결제 승인과 같이 민감한 API가 두 번 호출되는 게 걱정된다면 멱등키로 안전하게 같은 요청을 다시 보낼 수 있어요.