반응형
Timeout 이란?...
- 사전적으로 프로그램이 특정 시간 내에 성공적으로 수행되지 않아 진행이 자동적으로 중단되는 것
- 응답을 무한정 기다릴 수 없기 때문에 기다릴 시간을 지정해야 한다.
- EX)서버에서 맺을 수 있는 커넥션 수를 초과했다면, 커넥션을 맺기 위해 무한정 대기한다.
Timeout 활용 사례
- Socket(양방향 통신),Http(단방향 통신)에서 다양하게 활용 됨
- JDBC
- JDBC Dirver Type4는 소켓을 사용해 DBMS에 연결
- DB커넥션을 요청했으나, 시간 내에 연결이 안될 때 → Connection Timeout 발생
- 채팅 프로그램
- 채팅 프로그램에서, 서버로부터 특정 시간 응답이 없을 때 → SocketTimeout 발생
- WEB
- 클라이언트에서 서버로 요청을 보낸 후, 연결 되지 않은 상태로 특정 시간 대기 → Connection Timeout 발생
Socket 관련 Timeout
- Connection Timeout
- Socket/Read Timeout
Connection Timeout
클라이언트가 서버와 Connection을 맺길 원하지만, 서버의 장애로 Connection조차 맺어지지 못할 때 발생하는 timeout → Handshake가 진행될 시간제한이다.
- Connection 과정
- TCP소켓 통신에서 클라이언트와 서버가 연결될때 3-Way-HandShake 절차를 진행한다. 즉, Connection Timeout은 이 절차가 진행되지 않았음을 뜻한다.
Socket Timeout
클라이언트와 서버가 연결된 후, 데이터를 전송할 수 있다. 이때 데이터는 하나의 큰 덩어리가 아니라, 여러개의 패킷으로 나눠 전송하게 되는데, 각 패킷이 전송될 때 시간 차이가 있다. 이런 시간 차이의 임계치를 SocketTimeout 이라고 한다.
- Read Timeout과의 관계
- 클라이언트와 서버가 Connection은 맺었지만, IO작업이 길어지거나, 락이 걸려 요청이 처리되지 못하고 있을 때, 클라이언트는 더 이상 기다리지 못하고 Connection을 끊는다. 이런 상황을 Read Timeout이라고 한다.
Read Timeout
Read Timeout이란, 서버로 요청을 보낸 뒤 응답을 받는데 까지 기정한 시간을 초과 했다는것이다. Socket Timeout과 비슷한데, 조금 다르다.
커넥션이 맺어진 후, 읽어드릴 수 있는 데이터가 지정된 시간동안 없을 때 발생한다.
Feedback
Timeout에 대해서 알아보았다. 그냥 시간제한 이라고만 막연히 생각해왔는데, 역시 Timeout도 종류가 있고, 그에 따라서 오류가 날때 이느 부분을 찾아봐야 할지 좀더 알게되었다. 관련해서 NaverD2의 JDBC Internal 해결 포스팅을 봤는데, 아직은 완벽히 이해하지 않아 이번 게시물에는 내용을 기재하지 않았다. 후에 JDBC Internal관련 된 포스팅을 또 해보도록 하자.
알게된 점
- Timeout 이란 무엇인가
- ConnectionTimeout
- SocketTimeout
- ReadTimeout
알아야할 점
- JDBC Intenal의 이해
References
다양한 Timeout을 알아보자 : Connection Timeout / Socket Timeout / Read Timeout
반응형