일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 알고리즘
- 자바
- 베타락
- ddl-auto
- id생성
- expired key
- 이분탐색
- java
- queue
- BFS
- 백준
- DP
- 타임아웃
- 트라이 자료구조
- JPA
- 예외처리
- 스택
- Stack
- prg패턴
- 외부 서비스 장애
- 캐시 스탬피드
- 다중 서버
- thundering herd
- Entity Manager
- 벌크헤드패턴
- 낙관적 락
- 이진탐색
- 비관적 락
- 슬라이스 테스트
- session인증
- Today
- Total
Coding 01
TimeOut 본문
TimeOut에는 크게 3가지가 있다.
Connection Timeout, Socket TImeout, Read Timeout이다.
Connection TimeOut은 클라이언트가 서버에 연결을 시도할 때, 일정 시간 내에 연결이 이루어지지 않으면 발생하는 타임아웃이다. 주로 서버가 다운되었거나 네트워크 연결이 불안정할 때 발생한다.
TCP 소켓 통신에서 클라이언트와 서버가 연결될 때, 정확한 전송을 보장하기 위해 사전에 세션을 수립하는데, 이 과정을 3-way-handshake라고 한다.
3-way-handshake는 3단계로 이루어져있다. 이 단계를 통해 양방향 통신이 가능한지 확인한다.
Connection Timeout은 이 3-way-handshake가 일정 시간 내에 완료되지 않을 때 발생한다.
서버의 장애나 응답 지연으로 인해 연결을 맺지 못하면 Connection Timeout이 발생한다.
Socket Timeout은 Connection Timeout 이후에 발생할 수 있는 타임아웃이다. 소켓 연결이 유지되는 최대 시간을 의미한다. 이미 연결된 소켓에서 데이터를 읽거나 쓸 때의 전체 시간을 제한한다.
클라이언트와 서버가 연결된 후, 서버는 데이터를 클라이언트에게 전송한다. 이때 하나의 데이터 덩어리가 아니라 여러 개의 패킷 단위로 쪼개서 전송되는데, 각 패킷이 전송될 때의 시간 차이 제한을 Socket Timeout이라고 한다. 서버가 일정 시간 내에 다음 패킷을 보내지 않으면, 클라이언트는 Socket Timeout을 발생시키고 연결을 종료할 수 있다.
Read Timeout은 클라이언트와 서버가 연결된 후, 특정 I/O작업이 일정 시간 내에 완료되지 않으면 발생하는 타임아웃이다. 서버로부터 데이터를 읽는 작업의 최대 대기 시간을 의미한다.
클라이언트와 서버가 연결된 상태에서, 서버의 응답이 지연되거나 I/O작업이 길어져 요청이 처리되지 않을 때 클라이언트는 연결을 끊는다. Read Timeout은 이러한 상황을 방지하기 위해 설정된 타입아웃으로, 일정 시간 내에 데이터가 읽혀지지 않으면 클라이언트가 연결을 종료한다.
대용량 데이터를 다운로드하는 경우처럼, 데이터를 수신하는 과정에서 발생한다.
타임아웃이 필요한 이유는 자원절약이다. 외부 서비스를 사용할 때 요청이 무한정 길어질 수 있고, 서비스의 요청이 자원을 가지고 있으면, 서비스의 자원이 고갈되어 장애가 발생할 수 있다. 타임아웃을 설정하면 이렇게 요청이 무한정 길어지는 상황을 예방할 수 있다.
'기술면접' 카테고리의 다른 글
Stack (0) | 2025.01.08 |
---|---|
SSR과 CSR (0) | 2025.01.07 |
private 메서드와 @Transactional (0) | 2025.01.03 |
CORS (1) | 2025.01.02 |
HTTP 메서드에서 멱등성이란? (0) | 2024.12.27 |