HTTP 연결성과 비연결성(connectionless)
연결성
연결성은
클라이언트와 서버 간에 요청과 응답을 주고받기 위해 TCP/IP 연결을 맺는다.
하나의 연결로 하나의 요청과 응답을 처리하므로 연결의 개수가 줄어들어 성능이 향상됩니다.
요청과 응답 사이에 발생하는 지연이 적다.
여러 개의 리소스를 요청하는 경우, 매번 새로운 TCP 연결이 맺어져야 하므로 지연이 발생되고.
동시에 여러 개의 요청을 처리하는 데에는 한계가 존재한다.
비연결성
비연결성은
HTTP의 비연결성은 기본적으로 연결을 유지하지 않는 모델입니다. 비연결성의 이러한 특징으로 인해 일반적으로 초 단위의 이하의 빠른 속도로 응답한다.
이로인해, 1시간 동안 수천 명이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 수십 개 이하로 매우 작다.
📌예) 웹 브라우저에서 계속해서 검색 버튼을 누르지는 않는다. 이로 인해 서버 자원을 매우 효율적으로 사용할 수 있다.
비연결성의 한계와 한계극복
HTTP의 비 연결성(Connectionless)은 연결을 새로 맺어야 한다는 한계를 가지고 있다. 클라이언트가 서버에 요청을 보내면, 서버는 이를 처리하고 응답을 반환한 후 연결을 종료하고, 다음 요청이 오면 다시 연결을 맺는다.
이때, 연결을 맺기 위해 TCP/IP 연결을 새로 맺어야 하는데 이는 3-way handshake라는 과정이 필요하므로 시간적인 오버헤드가 발생한다.
또한, 웹 브라우저로 사이트를 요청하면 HTML 뿐만 아니라 자바스크립트, CSS, 추가 이미지 등 수 많은 자원이 함께 다운로드되어야 합니다. 이로 인해 데이터 전송에 시간이 더 걸리고, 연결이 자주 끊어지는 상황에서는 웹 페이지 로딩 속도가 느려지는 문제가 발생할 수 있다.
이러한 문제를 해결하기 위해 HTTP에서는 지속 연결(Persistent Connections)을 도입하였으며. 이를 통해 클라이언트와 서버 간의 연결을 유지하여 연결을 재사용할 수 있게 되었습니다. 이를 통해, 같은 연결을 통해 여러 요청과 응답을 처리할 수 있으므로, 불필요한 TCP/IP 연결을 줄이고 웹 페이지의 로딩 속도를 높일 수 있다.
최근에는 HTTP/2와 HTTP/3에서 더 많은 최적화가 이루어지고 있다.
예를 들어, HTTP/2에서는 다중화(Multiplexing)를 도입하여, 한 번에 여러 요청과 응답을 처리할 수 있게 되었으며,
💡 HTTP/3에서는 UDP 프로토콜을 사용하여 더욱 빠른 속도와 안정성을 제공합니다.
번외 - 동시다발적 트래픽폭주할 경우
비연결성 서버에서 트래픽 폭주에 대응하기 위해 Stateless 스케일아웃을 활용할 수 있다.
서버가 상태를 저장하지 않기 때문에 여러 대의 서버를 동일하게 운영해도 서버 간에 충돌이나 문제가 발생하지 않기때문에. 서버를 여러 대 운영하여 트래픽 폭주에 대응할 수 있다.
출처 : 인프런 - 모든 개발자를 위한 HTTP 웹 기본지식 by 우아한형제 김영한이사님