API를 만들다보면, Timeout에 관한 얘기들을 많이 듣곤한다.
일정 시간동안 응답이 없으면, 실패처리해주세요. 몇 초 동안 기다렸다가 응답이 안오면, retry를 해주세요. 등등
처음에 Timeout의 종류를 들으면 상당히 헷갈리는데, 헷갈릴때마다 참고하기 위해.. 정리를 해둔다.
Connection Timeout
클라이언트가 어떤 사유로 인해서 서버에 접근자체를 실패했을시 적용되는 것이 Connection Timeout이다.
접근을 시도하는 시간제한이 Connection Timeout이 된다.
예를 들어, Connection Timeout이 5초인 Apache 서버가 있다.
그런데 이 Apache서버에 요청이 몰려서, 요청이 처리되려면 상당시간 기다려야 한다.(5초 이상) 그렇게 되면 클라이언트에서 서버로 request를 날렸을 때 서버와 연결이 되지않은 상태로 5초 이상 대기해야하기 때문에 Connection Timeout이 발생하게 된다.
웹 브라우저가 서버에 접속하기 위해서는 3-way Hanhshake방식이 일어나기 되는데, 3-way Handshake가 정상적으로 끝나야지 Connection이 됬다고 표현할 수 있다. 따라서 Connection Timeout은 Connection을 구성하는데 소요되는 시간의 임계치라고도 할 수 있다.
Socket Timeout
클라이언트와 서버가 연결된 후에 서버는 데이터를 클라이언트에게 전송하게 된다. 이 때 하나의 데이터 덩어리가 아닌 여러개의 패킷으로 나눠서 전송하게 되는데, 각 패킷이 전송될 때 시간 차이(Gap)의 임계치를 ScoketTimeout 이라고 한다.
=> java에서는 ScoketTimeout Exception이 발생
connection은 맺어졌지만 I/O작업이 길어지거나 어떠한 상황때문에 요청이 처리되지 못하고 있는 상황
'프로그래밍 노트 > WEB' 카테고리의 다른 글
서버인증방식종류_세션/쿠키, 토큰방식 (0) | 2021.01.20 |
---|---|
[웹 사이트 최적화 기법] HTTP의 이해 (0) | 2020.03.16 |
REST API 보안_인가(Authorization) (0) | 2019.06.07 |
REST API 보안_인증(Authentication) (0) | 2019.06.07 |
REST API 보안_1 (0) | 2019.05.30 |