Connection Timeout은 클라이언트가 서버에 연결을 시도할 때, 일정 시간 내에 연결이 이루어지지 않으면 발생하는 타임아웃입니다. 예를 들어 TCP 3-way-handshake가 일정 시간 내에 완료되지 않으면 발생합니다. 즉, 서버의 장애나 응답 지연으로 인해 연결을 맺지 못하면 Connection Timeout이 발생합니다.
Socket Timeout은 Connection Timeout 이후에 발생할 수 있는 타임아웃입니다. 클라이언트와 서버와 연결된 후, 서버는 데이터를 클라이언트에게 전송합니다. 이때 여러 개의 패킷 단위로 쪼개서 전송되는데, 각 패킷이 전송될 때의 시간 차이 제한을 Socket Timeout이라고 합니다. 만약 서버가 일정 시간 내에 다음 패킷을 보내지 않으면 클라이언트는 Socket Timeout을 발생시키고 연결을 종료할 수 있습니다.
Read Timeout은 클라이언트와 서버가 연결된 후, 특정 I/O 작업이 일정 시간 내에 완료되지 않으면 발생하는 타임아웃입니다. 클라이언트와 서버가 연결된 상태에서 서버의 응답이 지연되거나 I/O 작업이 길어져 요청이 처리되지 않을 때 클라이언트는 연결을 끊습니다. Read Timeout은 이러한 상황을 방지하기 위해 설정하는 타임아웃으로, 일정 시간 내에 데이터가 읽히지 않으면 클라이언트가 연결을 종료합니다.
네트워크 통신에 타임아웃이 필요한 이유는 무엇인가요?
타임아웃 설정으로 자원을 절약할 수 있기 때문입니다. 예를 들어 외부 서비스로 요청을 보냈지만 해당 요청이 무한정 길어질 수 있습니다. 이때 서비스가 스레드, 데이터베이스 커넥션 등 자원을 점유하고 있다면, 쉽게 서비스의 자원이 고갈되어 장애가 발생할 수 있습니다. 타임아웃을 설정하면 이렇게 요청이 무한정 길어지는 상황을 예방할 수 있습니다.
타임아웃 테스트는 어떻게 해볼 수 있을까요?
가상 서버를 띄우고 임의로 지연을 추가하여 타임아웃을 테스트할 수 있습니다. 하지만 테스트 환경을 구축하기 위한 비용과 자동화된 테스트에 지연 시간이 추가되는 것이 단점입니다. 타임아웃 테스트를 하여 얻을 수 있는 것에 대한 트레이드오프를 신중히 고민해야 합니다.
'백엔드 면접' 카테고리의 다른 글
| 자료구조 스택에 대해서 설명해 주세요. (1) | 2024.12.27 |
|---|---|
| 서버 사이드 렌더링과 클라이언트 사이드 렌더링의 차이점은 무엇인가요? (2) | 2024.12.26 |
| private 메서드에 @Transactional을 선언하면 트랜잭션이 동작할까요? (0) | 2024.12.24 |
| 포워드 프록시와 리버스 프록시의 차이에 대해 설명해 주세요. (0) | 2024.12.23 |
| CORS란 무엇인가요? (1) | 2024.12.21 |