HTTP 역사

HTTP/1.1, HTTP/2는 TCP 기반이며 HTTP/3는 UDP 기반 프로토콜이다.
HTTP 특징
- 클라이언트 서버 구조
- Request Response 구조
- 클라이언트는 서버에 요청을 보내고, 응답을 대기
- 서버가 요청에 대한 결과를 만들어 응닫
- 무상태 프로토콜
- 비연결성
- HTTP 메세지
- 단순함, 확장 가능
상태 유지와 무상태란?
상태유지
- 클라이언트 A의 요청을 서버 1이 기억하고 있기 때문에 항상 서버 1이 응답해야한다.
- 만약 서버1이 장애가 발생한다면 유지되던 상태 정보가 다 날아가 버리므로 처음부터 다시 서버에 요청해야 한다.
무상태
- 클라이언트 A가 요청할 때 이미 필요한 데이터를 다 담아서 보내기 때문에 아무 서버나 호출해도 된다.
- 만약 서버 1에 장애가 생기더라도 다른 서버에서 응답을 전달하면 되기 때문에 클라이언트는 다시 요청할 필요가 없다.
- 갑자기 클라이언트 요청이 증가해도 서버를 대거 투입할 수 있다.
- 무상태는 응답 서버를 쉽게 바꿀 수 있다 (무한한 서버 증설 가능)
무상태의 한계
모든 것을 무상태로 설계할 수 있는 경우도 있고 없는 경우도 있다. 로그인이 필요 없는 단순한 서비스 소개 화면 같은 경우엔 무상태로 설계할 수 있지만 로그인이 필요한 서비스라면 로그인했다는 상태를 서버에 유지해야 하기 때문에 브라우저 쿠키, 서버 세션, 토큰 등을 이용해 상태를 유지해야 한다.
비연결성
TCP/IP는 기본적으로 연결을 유지하여 서버의 자원이 계속 소모되지만, 비연결성을 가지는 HTTP에서는 실제 요청을 주고받을 때만 연결을 유지하고 응답을 주고 나면 TCP/IP 연결을 끊어 최소한의 자원으로 서버 유지를 가능하게 한다.
- 트래픽이 많지 않고, 빠른 응답을 제공할 수 있는 경우, 비연결성의 특징은 효율적으로 작동한다. 하지만 트래픽이 많고, 큰 규모의 서비스를 운영할 때에는 비연결성은 한계를 보이게 된다.
비연결성의 한계와 극복
웹 브라우저로 사이트를 요청하면 HTML뿐만 아니라 자바스크립트, css 추가 이미지 등 많은 자원이 함께 다운로드 된다. 해당 자원들을 각각 보낼 때마다 연결 끊고 다시 연결하고를 반복하는 것은 비효율적이기 때문에 지금은 HTTP 지속 연결로 문제를 해결한다.
HTTP 초기 - 연결, 종료 낭비

HTTP 초기에는 각각의 자원을 다운로드하기 위해 연결과 종료를 반복해야 했다.
HTTP 지속 연결(Persistent Connections)

HTTP 지속 연결에서는 연결이 이루어지고 난 뒤 각각의 자원들을 요청하고 모든 자원에 대한 응답이 돌아온 후에 연결을 종료한다.