2024-02-01-TIL

Today I Learned

Connection Timeout vs Socket Timeout

  • https://tomining.tistory.com/164
  • https://www.baeldung.com/java-socket-connection-read-timeout
  • https://stackoverflow.com/questions/7360520/connectiontimeout-versus-sockettimeout

Server Connection Timeout Default Value

스프링 부트로 내장 톰캣 서버를 이용해 구동되는 서버에서 타임아웃에 걸릴만한 지점은 여러개 있다. 먼저, LB가 앞쪽에 붙어있는 구조인데, LB 타임아웃을 체크해야하고, 톰캣 서버의 타임아웃 설정을 확인해야한다. 별도의 설정이 없다면 기본 설정인 60초가 적용될 것이다. 그리고 OS Level의 타임아웃도 확인해봐야할텐데 이 부분은 기본값이 무제한일 가능성이 크다.

DB 소켓 타임아웃은 datasource 설정과 함께 옵션으로 application.yml 설정에 보통 설정하는데, 이는 API 통신과는 관계가 없다.

RestTemplate을 사용하여 외부와 통신할 때 직접 타임아웃을 지정할 수 있는데, 다음과 같이 설정할 수 있다. 그런데 기본값으로는 타임아웃 설정이 없다고 한다.

import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;

public class MyRestClient {
    private RestTemplate restTemplate;

    public MyRestClient() {
        HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
        factory.setConnectTimeout(5000); // 5 seconds
        this.restTemplate = new RestTemplate(factory);
    }
}

그런데 찾다보니 Hikary 타임아웃과 Tomcat의 타임아웃이 어떻게 다르고, 어떤게 먼저 걸리는지 모르겠다.

The number of milliseconds this Connector will wait, after accepting a connection, for the request URI line to be presented. Use a value of -1 to indicate no (i.e. infinite) timeout. The default value is 60000 (i.e. 60 seconds) but note that the standard server.xml that ships with Tomcat sets this to 20000 (i.e. 20 seconds). Unless disableUploadTimeout is set to false, this timeout will also be used when reading the request body (if any).

  • https://github.com/spring-projects/spring-boot/issues/11955
  • https://www.baeldung.com/spring-rest-timeout
  • https://docs.spring.io/spring-integration/reference/http/timeout.html
  • https://oingdaddy.tistory.com/387
  • https://stackoverflow.com/questions/44274982/spring-boot-application-what-is-default-timeout-for-any-rest-api-endpoint-or-a
  • https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/html/application-properties.html
  • https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#appendix.application-properties
  • https://howtodoinjava.com/spring-boot/spring-boot-rest-api-timeout-examples/
  • https://www.baeldung.com/spring-boot-hikari
  • https://stackoverflow.com/questions/64569292/spring-boot-hikaricp-connection-timeout-vs-connectiontimeout
  • https://perfectacle.github.io/2022/09/25/hikari-cp-time-config/
  • https://medium.com/javarevisited/hikari-connection-pooling-5600d765e5ae
  • https://www.masterspringboot.com/data-access/jpa-applications/hikari-connection-pool-with-spring-boot-made-simple/
  • https://www.javadevjournal.com/spring-boot/spring-boot-hikari/
  • https://tomcat.apache.org/tomcat-8.5-doc/config/http.html#:~:text=The%20default%20value%20is%2060000,note%20that%20the%20standard%20server.

HikariCP

  • https://adjh54.tistory.com/73#1.%20HikariCP-1
  • https://www.baeldung.com/hikaricp
  • https://p-bear.tistory.com/11
  • https://escapefromcoding.tistory.com/712

JDBC Connection Pool, DBCP

  • https://medium.com/javarevisited/choosing-the-right-jdbc-connection-pool-c9ef90588d55
  • https://hudi.blog/dbcp-and-hikaricp/
  • https://velog.io/@tco0427/HikariCP-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0

Timeout

  • https://effectivesquid.tistory.com/entry/Timeout%EC%97%90-%EA%B4%80%ED%95%9C-%EC%A0%95%EB%A6%AC

Linux Timeout

  • https://www.baeldung.com/linux/tcp-timeout

Go

  • https://gobyexample.com/