2022. 8. 22. 17:23ㆍDataBase/DB 이론
✅ Connection/Read Timeout에 대해서 알아보자
Connection Timeout
Connection Timeout은 종단(EndPoint) 간 연결하는데 소요되는 최대 시간을 의미한다.
예를 들어, JAVA Application <-> JDBC API <-> DBMS 간의 소켓 통신을 이용해 통신한다. 이때 TCP 3 Way Handshake를 통해 연결을 생성하고, 이러한 연결을 소요되는 데 걸리는 시간을 의미한다.(그림 1 참고)
Connection Timeout을 지정하지 않게되면 어떻게 될까?
DB와의 커넥션을 맺는 임계치를 지정하지 않으면 커넥션을 맺기 위해 무한 대기 상태에 빠지게 되어 DeadLock에 걸리게 된다. 즉 프로세스가 정상 동작하지 못하게 된다.
Read Timeout
read timeout은 연결된 종단(EndPoint)간에 데이터를 주고받을 때 소요되는 최대 시간을 의미한다.
예를 들어, JAVA Application <-> DB간의 연결된 후 Select을 조회할 때 최대 읽는 시간이거나 혹은 API 간의 통신할 때 서버로 요청을 보낸 뒤 응답을 받는 데까지 지정한 시간을 초과했다는 것을 의미한다.
Read Timeout을 지정하지 않게되면 어떻게 될까?
Read Timeout을 지정하지 않는다면 Data의 요청을 보낸 뒤 응답을 받을 때까지 무한 대기상태에 DeadLock에 빠지게 된다.
아래 그림은 Endpoint간의 세션 연결 시 Connection/Read Timout의 적용 구간을 그림으로 설명한다.
그렇다면 최적의 Connection/Read Timeout 시간은 무엇일까?
내가 생각하기에는 꼭 정답이 있다라고 생각하지는 않는다. 실제 운영 환경에 대한 여러 가지 테스트를 적용해서 올바른/효율적인 타임아웃을 설정하여 장애를 줄여나가는 것이 맞지 않을까?라고 생각이 든다.
참고자료
'DataBase > DB 이론' 카테고리의 다른 글
트랜잭션 2편 (0) | 2022.08.05 |
---|---|
트랜잭션 1편 (0) | 2022.07.26 |
Connection Pool (0) | 2022.07.24 |