2023-02-03-TIL

Today I Learned

Connection Timeout vs Socket Timeout, Read Timeout

스프링에서 JDBC를 이용해서 MySQL에 커넥션 설정을 할 때 사용하는 옵션 중 connection timeout과 socket timeout이 있다.

Connection Timeout은 TCP 커넥션을 시작할 때만 발생하며, 커넥션을 구성하는데 소요되는 시간의 임계치를 의미한다. 이는 일반적으로 원격 시스템이 응답하지 않는 경우에 발생한다. 이는 서버가 종료되었거나 잘못된 IP/DNS 이름, 잘못된 포트를 사용했거나 서버에 대한 네트워크 연결이 끊어졌음을 의미한다.

클라이언트와 서버가 연결된 상태 이후 보통 서버는 데이터를 클라이언트로 전송하게 되는데, 이 때 하나의 패킷이 아니라 여러 개의 패킷으로 나눠서 전송하게 된다. 각 패킷이 전송될 때 시간 Gap이 생길 수 있는데, 이 시간의 임계치를 Socket Timeout이라고 한다. 즉, Socket Timeout은 계속 들어오는 데이터 흐름을 모니터링하는 데만 사용된다. 지정된 timeout 동안 데이터 흐름이 중단되면 연결이 정지/깨진 것으로 간주된다. 물론 이것은 데이터가 항상 수신되는 연결에서만 작동합니다.

Socket Timeout을 1로 설정하면 매 밀리초마다 새 데이터가 수신되어야 한다. (데이터 블록을 현명하게 읽고 블록이 충분히 크다고 가정) 즉, 들어오는 스트림이 1밀리초 이상 중단되면 Timeout이 발생한 것이다.

Read Timeout은 Socket Timeout과 유사하다. 같은 개념으로 혼용해서 쓰기도 한다.

  • https://stackoverflow.com/questions/7360520/connectiontimeout-versus-sockettimeout
  • https://tomining.tistory.com/164
  • https://medium.com/javarevisited/what-is-the-difference-between-connecttimeout-and-sockettimeout-c2e9a0c89c60
  • https://www.ibm.com/docs/en/cics-tg-multi/9.2?topic=ctcsd-connection-timeout

JDBC Timeout, DB Timeout, Transaction Timeout

  • https://d2.naver.com/helloworld/1321
  • https://www.cubrid.org/blog/3826470
  • https://mariadb.com/kb/en/transaction-timeouts/
  • https://www.baeldung.com/spring-rest-timeout
  • https://kimdubi.github.io/mysql/timeout/

Java Memory Model

  • https://jenkov.com/tutorials/java-concurrency/java-memory-model.html
  • https://parkcheolu.tistory.com/14

@Transactional Rollback

  • https://pjh3749.tistory.com/269
  • https://medium.com/geekculture/spring-transactional-rollback-handling-741fcad043c6
  • https://sup2is.github.io/2021/03/04/java-exceptions-and-spring-transactional.html
  • https://interconnection.tistory.com/122
  • https://stackoverflow.com/questions/21188239/spring-transaction-rollback-on-exception-or-throwable

Reflections on SOLID Principles

  • https://bengribaudo.com/blog/2017/11/13/4033/reflections-on-solid-principles

Isto

특정 URL 패턴에 따라 타임아웃 조절하도록 WAS 앞에있는 isto

  • https://discuss.istio.io/t/is-it-possible-to-use-istio-as-a-reverse-proxy-similar-to-nginx-proxy-pass/6319