관리 메뉴

공부한것들을 정리하는 블로그 입니다.

Timeout : Connection Timeout / Socket Timeout / Read Timeout 본문

CS 운영체제 네트워크 등/공부

Timeout : Connection Timeout / Socket Timeout / Read Timeout

호 두 2022. 5. 18. 14:51
반응형

https://drsggg.tistory.com/573

 

2022.05.14 BC카드사 장애 발생 (부제: 장애대응/설정)

공부한것들을 정리하는 블로그 입니다. 2022.05.14 BC카드사 장애 발생 (부제: 장애대응/설정) 본문 (2022) 미공개2 2022.05.14 BC카드사 장애 발생 (부제: 장애대응/설정) 호 두 2022. 5. 18. 17:38 Prev 1 2 3 4 5 6

drsggg.tistory.com

 


# Timeout : Connection Timeout / Socket Timeout / Read Timeout

# Connection

- 웹 브라우저는 3 way handshak 방식으로 서버와 연결을 맺는다.
- 그리고 위 작업이 수행되는 데 걸린 총 시간을 Connection Time 이라고 한다.
- 그런데 Connection Time을 무한으로 설정할 순 없으므로 일정 시간을 지정하게 되는데 그 시간이 초과하면 발생하는 게 Connection Timeout이다.
- 즉 Connection Timeout은 Connection을 구성하는데 소요되는 시간의 임계치를 의미한다.

# Socket

- 보통 서버는 클라이언트와 연결을 맺은 후 여러 개의 패킷으로 데이터를 클라이언트에게 전송한다.
- 각 패킷이 전송될 때 시간 Gap이 생길 수 있는데 이 시간의 임계치를 Socket Timeout이라고 한다.
- 즉 Socket Timeout은 개별 패킷에 대한 시간의 임계치이다.

주의
- Socket Timeout의 Target은 전체 응답 시간이 아닌 개별 응답 시간이다.

Socket Timeout : 1초
응답 패킷 : 3개
각 패킷 도착 시각 : 0.9초
총 응답 시간 : 2.7초
- 위와 같은 상황에서는 Socket Timeout이 발생하지 않는다.
- 개별 패킷들이 1초 안에 도착하였기 때문이다.

 

# Read

- Read Timeout은 Socket Timeout과 유사하다고 볼 수 있다.
  - If the timeout expires before there is data available for read, a java.net.SocketTimeoutException is raised
  - 읽을 수 있는 데이터가 있기 전에 시간 초과가 만료되면 java.net.SocketTimeoutException이 발생합니다.

/**
 * Sets the read timeout to a specified timeout, in
 * milliseconds. A non-zero value specifies the timeout when
 * reading from Input stream when a connection is established to a
 * resource. If the timeout expires before there is data available
 * for read, a java.net.SocketTimeoutException is raised. A
 * timeout of zero is interpreted as an infinite timeout.
 *
 * @since 1.5
 */
public void setReadTimeout(int timeout) {
   if (timeout < 0) {
      throw new IllegalArgumentException("timeout can not be negative");
   }
   readTimeout = timeout;
}

 

# Example

(Connection Timeout)
- A는 최대 10분까지 맛집을 가기 위해 기다릴 생각이 있다.
- 10분을 넘게 기다렸지만 A(=클라이언트)는 맛집(=서버)을 들어가지 못해 떠났다.
- 이처럼 서버에 클라이언트가 접근을 시도했을 시 적용되는 것이 Connection Timeout이다.
- 즉 접근을 시도하는 시간 제한(=10분)이 Connection Timeout이 되는 것이다.

(Read Timeout)
- 만약 A가 10분 안에 맛집에 들어갔다고 가정해보자.
- 그리고 A는 음식을 기다리는데 최대 5분을 소요할 생각이 있다.
- 5분이 지난 A는 그냥 가게를 나왔다.
- 즉 클라이어트가 서버에 접속은 성공했으나 클라이언트가 원하는 요청에 대해
- 서버가 너무 오랫동안 응답을 못 해 클라이언트가 연결을 해제하는 것이 Read Timeout이다.
- 이런 경우 클라이언트는 현 상황을 오류로 인지하고(=음식이 안나옴)
- 서버는 계속 요청(=요리 중)을 수행하고 있으므로 요청을 성공으로 인지한다.
- 이로 인해 클라이언트와 서버 간 싱크가 맞지 않아 문제가 발생할 확률이 높다.

 

# Summary

- 정리하자면 Connection Timeout과 Socket Timeout 설정은 모두 필요하다.

Q. 만약 두 가지 Timeout을 설정하지 않으면 어떤 일이 벌어질까?
- URL 접속 시 무한 대기가 발생할 수 있다.

 



참고 : 
https://webcache.googleusercontent.com/search?q=cache:dmh3yMg9oVoJ:https://goodgid.github.io/Server-Various-Types-of-Timeout/+&cd=1&hl=ko&ct=clnk&gl=kr

 

 

https://tyrionlife.tistory.com/m/790

반응형

'CS 운영체제 네트워크 등 > 공부' 카테고리의 다른 글

쿠키 vs 세션  (0) 2022.08.25
웹서비스 / SOAP, WSDL, UDDI  (0) 2022.08.18
SOAP vs REST 학습  (0) 2022.08.17
그래프와 트리의 정의 및 차이점  (0) 2022.05.19
자료구조와 알고리즘  (0) 2022.05.18
운영체제  (0) 2022.05.18
네트워크  (0) 2022.05.18
TCP/IP 소켓 통신  (0) 2020.06.11
Comments