Connection/Read Timeout

2022. 8. 22. 17:23DataBase/DB 이론

Connection/Read Timeout에 대해서 알아보자

 

Connection Timeout

 Connection Timeout은 종단(EndPoint) 간 연결하는데 소요되는 최대 시간을 의미한다.

예를 들어, JAVA Application <-> JDBC API <-> DBMS 간의 소켓 통신을 이용해 통신한다. 이때 TCP 3 Way Handshake를 통해 연결을 생성하고, 이러한 연결을 소요되는 데 걸리는 시간을 의미한다.(그림 1 참고)

 

Connection Timeout을 지정하지 않게되면 어떻게 될까?

 DB와의 커넥션을 맺는 임계치를 지정하지 않으면 커넥션을 맺기 위해 무한 대기 상태에 빠지게 되어 DeadLock에 걸리게 된다. 즉 프로세스가 정상 동작하지 못하게 된다.

그림 1 - jAVA <-> DBMS 통신

 

Read Timeout

 read timeout은 연결된 종단(EndPoint)간에 데이터를 주고받을 때 소요되는 최대 시간을 의미한다.

예를 들어, JAVA Application <-> DB간의 연결된 후 Select을 조회할 때 최대 읽는 시간이거나 혹은 API 간의 통신할 때 서버로 요청을 보낸 뒤 응답을 받는 데까지 지정한 시간을 초과했다는 것을 의미한다.

 

Read Timeout을 지정하지 않게되면 어떻게 될까?

 Read Timeout을 지정하지 않는다면 Data의 요청을 보낸 뒤 응답을 받을 때까지 무한 대기상태에 DeadLock에 빠지게 된다.

 

 

아래 그림은 Endpoint간의 세션 연결 시 Connection/Read Timout의 적용 구간을 그림으로 설명한다.

그림 2- Connection/Read Timeout

 

그렇다면 최적의 Connection/Read Timeout 시간은 무엇일까?

 내가 생각하기에는 꼭 정답이 있다라고 생각하지는 않는다. 실제 운영 환경에 대한 여러 가지 테스트를 적용해서 올바른/효율적인 타임아웃을 설정하여 장애를 줄여나가는 것이 맞지 않을까?라고 생각이 든다.

 

 


참고자료

반응형

'DataBase > DB 이론' 카테고리의 다른 글

트랜잭션 2편  (0) 2022.08.05
트랜잭션 1편  (0) 2022.07.26
Connection Pool  (0) 2022.07.24