ShimSeongbo / study

0 stars 0 forks source link

Tomcat Connector Timeout #18

Open ShimSeongbo opened 1 year ago

ShimSeongbo commented 1 year ago

Tomcat Connector Timeout

<Connector port="80" protocol="HTTP/1.1"
                     connectionTimeout="30000"
                     redirectPort=8443"   />

connectionTimeout 설정은 Tomcat의 Connector에서 사용되며, 이는 클라이언트와 서버 사이의 TCP 연결을 유지하는 데 걸리는 시간을 밀리초 단위로 설정합니다. 예를 들어, connectionTimeout="20000"인 경우, 클라이언트가 요청을 보내고 응답을 기다리는 최대 시간은 20,000 밀리초, 즉 20초입니다. 이 시간 내에 클라이언트가 요청을 완료하지 않으면, 연결이 종료됩니다.

이 설정은 서버의 리소스를 효율적으로 관리하고, 무한정 대기하는 것을 방지하여 성능을 최적화하는 데 도움이 됩니다.

이 시간은 클라이언트가 서버와의 초기 연결을 설정하고 HTTP 요청을 시작하기까지의 시간을 제한하는 것입니다.

초기 연결을 설정하고 HTTP 요청을 시작하기까지의 시간

connectionTimeout 설정은 TCP 연결이 수립된 이후 클라이언트가 실제 HTTP 요청을 보내기 시작하기까지의 최대 대기 시간을 나타냅니다. 이 시간은 다음과 같은 단계를 거쳐 계산됩니다:

TCP 연결 수립: 클라이언트가 서버에 연결을 요청하고, 서버가 이를 수락하여 TCP 연결이 수립됩니다. HTTP 요청 시작 대기: TCP 연결이 성공적으로 이루어진 후, 클라이언트는 HTTP 요청을 보내기 시작해야 합니다. connectionTimeout 설정은 이 단계에서 클라이언트가 얼마나 빨리 요청을 보내야 하는지를 제한합니다. 즉, TCP 연결이 성공적으로 이루어진 후, 서버는 connectionTimeout에 설정된 시간 동안 클라이언트로부터의 HTTP 요청을 기다립니다. 이 시간 내에 요청이 수신되지 않으면, 서버는 연결을 종료합니다.

이 설정은 서버 리소스를 보호하는 데 유용합니다. 예를 들어, 어떤 악의적인 사용자나 잘못 구성된 클라이언트가 서버에 연결만 맺고 실제 요청을 하지 않는 경우, 이런 연결들이 누적되면 서버 리소스에 부하를 줄 수 있습니다. connectionTimeout은 이런 종류의 문제를 미연에 방지할 수 있게 도와줍니다.

connectionTimeout 을 설정하지 않으면?

connectionTimeout을 설정하지 않으면, 서버는 클라이언트로부터의 HTTP 요청을 무한정 기다릴 수 있게 됩니다. 이로 인해 다음과 같은 문제가 발생할 수 있습니다:

리소스 고갈: 클라이언트에서 연결만 성립시키고 실제 요청을 보내지 않을 경우, 서버의 리소스가 점점 소모되어 결국에는 다른 정상적인 요청까지 처리하지 못할 수 있습니다. DoS 공격 취약성: 악의적인 클라이언트가 이러한 특성을 이용하여 서버에 수많은 연결을 시도하고, 실제로는 데이터를 전송하지 않을 수 있습니다. 이렇게 되면 서버는 과도한 리소스를 사용하게 되어 서비스 거부(DoS) 상태에 빠질 수 있습니다. 응답 지연: 불필요한 연결이 많이 생기면, 실제로 데이터를 요청하는 클라이언트까지 응답 시간이 늘어날 수 있습니다. 디버깅 어려움: 시스템에 문제가 발생했을 때, 어디에서 문제가 발생했는지 파악하기가 더 어렵습니다. 불필요한 연결이 계속 유지되고 있을 수 있기 때문입니다. 따라서 connectionTimeout 같은 설정을 통해 이러한 문제를 미리 방지할 수 있습니다.