- 김영한님의 모든 개발자를 위한 HTTP 웹 기본 지식을 수강하면서 정리한 내용입니다.
HTTP 메시지에 모든 것을 전송한다.
HTTP/1.1 (1997년) : 가장 많이 사용, 우리에게 가장 중요한 버전 ⭐HTTP/1.1, HTTP/2 같은 경우에는 TCP 프로토콜 위에서 동작을 한다.
HTTP/3은 UDP 프로토콜 기반으로 개발이 되어 있다. TCP는 3 way handshake도 해야 되고 기본적으로 데이터도 많고 매커니즘 자체가 속도가 느린 편이다. 그래서 UDP 프로토콜 위에 애플리케이션 단계에서 성능을 최적화하도록 새로 설계한다.
현재는 HTTP/1.1 주로 사용하지만, HTTP/2, HTTP/3 도 점점 증가하고 있다.

💬 클라이언트와 서버를 개념적으로 분리한다. 분리함으로써 각각 독립적으로 진화할 수 있다.
클라이언트는 UI, 사용성
서버는 비즈니스 로직, 데이터
ex) 유튜브 사이트
사용자가 유튜브에 로그인 후 영상을 시청하다가 1분에 영상을 종료 → 다시 재생 시
상태 유지 (Stateful)
사용자가 종료한 시점이 서버에 저장되어 있고, 다시 영상을 재생시켰을 경우 서버에서 영상 정보 및 종료 시점 등을 받아와 종료한 시점부터 재생
서버 증설은 불가능 : A 서버에 사용자 종료한 시점이 지정되어 있을 경우, B 서버에는 종료한 시점을 보내줄 수가 없다.
무상태 (Stateless)
서버에 상태를 저장하므로 항상 같은 서버가 유지되어야 한다.
중간에 서버가 장애나면, 해당 서버를 바라보고 있던 유저의 상태가 소실된다. 처음부터 다시 해야 된다.
서버가 클라이언트의 상태를 보관하지 않기 때문에 아무 서버나 호출해도 된다.
중간에 서버가 장애나면, 클라이언트가 필요한 정보들을 이미 담고 있어서 다른 서버에 요청하면 된다.
서버 확정성(스케일 아웃)이 높다.


여러 클라이언트에서 서버로 응답을 요청하면 서버는 요청이 들어온 클라이언트 마다 TCP/IP 연결을 유지해서 상태를 저장한다.
클라이언트를 사용하지 않아도 서버를 계속 유지하는 서버 자원이 소모되는 단점이 있다.

클라이언트가 요청할 때마다 서버는 응답만 보내고 TCP/IP 연결을 종료하기 때문에 서버가 최소한의 자원을 사용한다.


연결을 유지 하면서 종료하기 전까지 내부 매커니즘으로 요청하고 응답을 다 하고 종료하면 속도가 빠르다.
서버 개발자들이 어려워하는 업무가 정말 같은 시간에 딱 맞추어 발생하는 대용량 트래픽발생할 때가 어렵다. 이럴 때는 Sateless하게 설계하는 게 제일 중요하다.
ex) 선착순 이벤트, 명절 KTX 예약, 수강 신청
ex) 저녁 6:00 선착순 1000명 치킨 할인 이벤트 → 수만명 동시 요청


• HTTP 메서드 (GET: 조회)
• 요청 대상 (/search?q=hello&hl=ko)
• HTTP Version
request-line = method SP(공백) request-target SP HTTP-version CRLF(엔터)
method (HTTP 메서드)
request-target (요청 대상)
HTTP-version (HTTP 버전)

status-line = HTTP-version SP status-code SP reason-phrase CRLF
HTTP-version (HTTP 버전)
status-code (상태 코드)
reason-phrase (이유 문구)
field-name ":" OWS field-value OWS (OWS:띄어쓰기 허용)
- HTTP 메시지에 모든 것을 전송
- HTTP 역사 HTTP/1.1을 기준으로 학습
- 클라이언트 서버 구조
- 무상태 프로토콜(stateless)
- HTTP 메시지
- 단순함, 확장 가능
- 지금은 HTTP 시대