Connection, Connectionless, HTTP 지속 연결
Connection과 Connectionless
: 클라이언트와 서버 간 연결(connection) 유지 여부에 따라 나뉘는 특성이다.
Connection(연결)
: 클라이언트와 서버가 항상 TCP/IP 연결을 유지하고 있는 상태이다.
- 클라이언트 수만큼 연결 수가 늘어나기 때문에 연결 유지 위해 자원을 소모한다.
- 요청을 하고 있지 않는 클라이언트와도 연결을 유지 해야한다.
// 많은 사람들이 서비스를 이용해도 실제 서버에서 동시에 처리하는 요청 자체는 많지 않다.
- 장점
1) 새로운 연결 과정 불필요(항상 연결)
2) 요청에 대한 빠른 응답 속도
- 단점
1) 연결을 위한 자원 낭비 발생
2) 클라이언트가 지속적으로 요청 보낼거라는 보장 없음
Connectionless(비연결)
: 클라이언트가 서버에 요청을 하고 응답을 받을 시 바로 TCP/IP 연결을 끊어버리는 것이다.
1) 3 Way HandShake 과정으로 TCP/IP 연결을 한다.
2) 연결 후 하나의 요청을 서버로 보내고 서버가 응답을 보내 처리가 끝난다.
3) 연결을 바로 끊는다.
- 예시
비연결 방식: 웹페이지 접속한 후 인터넷을 끊어버려도 요청을 통해 노출된 홈페이지는 유지된다.
연결 방식: 웹페이지 접속 후 인터넷을 끊어버리면 에러 페이지가 뜬다.
- 장점
1) 서버 자원 효율적 사용 가능
- 단점
1) 요청 추가 발생 시 매번 새로 3 Way HandShake 과정을 통한 연결 필요
=> 요청에 대한 응답 시간 증가
2) 웹사이트의 html, css, img 등의 정적 자원 모두 재다운로드
=> 캐시, 브라우저 캐싱으로 해결
=> 단점을 HTTP 지속 연결로 해결
HTTP 지속 연결
: 어떤 요청과 연관된 요청들이 모두 응답될 때까지 연결을 유지하는 것이다.
- 장점
1) 연결을 한 번만 맺고 끊기 때문에 Connectionless 방식보다 연결 횟수 적음
=> 속도 빨라짐