
모든 개발자를 위한 HTTP 웹 기본 지식 강의 수강 후, 정리한 글입니다.
HTTP(HyperText Transfer Protocol)는 기존에는 html을 전송하는 프로토콜이었으나, 현재는 모든 형태의 데이터를 주고 받는 프로토콜이다.
거의 모든 형태의 데이터를 전송할 수 있으며, 서버 간에 데이터를 주고 받을 때에도 대부분 HTTP를 사용한다.
HTTP/1.1이 우리에게 가장 중요한 버전!
| 버전 | 년도 | 특징 |
|---|---|---|
| HTTP/0.9 | 1991 | GET 메서드만 지원, HTTP 헤더 없음 |
| HTTP/1.0 | 1996 | 메서드, 헤더 추가 |
| HTTP/1.1 | 1997 | 대부분의 기능 들어 있음, 가장 많이 사용, TCP |
| HTTP/2 | 2015 | 성능 개선, TCP |
| HTTP/3 | 진행중 | TCP 대신 UDP 사용, 성능 개선 |
Chrome > F12 > "Hello" 검색 > Network의 Protocol을 통해 h3을 확인할 수 있다. http3을 사용하고 있다는 것을 의미한다.

Chrome > F12 > naver.com으로 이동 > Network의 Protocol을 통해 h2을 확인할 수 있다. http2을 사용하고 있다는 것을 의미한다.


클라이언트에서 요청(Request)하고 응답을 무한정 대기한다. 그리고 서버에서 요청에 대한 결과를 만들어 클라이언트에 응답(Response)하는 구조이다.
클라이언트는 UI, 사용성에 집중하고 서버는 비즈니스 로직이랑 데이터에 집중하여 양쪽이 독립적으로 진화할 수 있다.
예시 1: 점원 동일
고객: 2개 구입하겠습니다.
점원: 200만 원입니다. 신용카드, 현금 중에 어떤 걸로 구매하시겠어요?
(노트북, 2개 상태 유지)
고객: 신용카드로 구매하겠습니다.
점원: 200만 원 결제 완료되었습니다.
(노트북, 2개, 신용카드 상태 유지)
예시 2: 점원 변경
① 로그인하는 경우에 사용자가 로그인했다는 상태를 서버에 유지해야 함
② 브라우저 쿠키와 서버 세션 등을 사용해서 상태를 유지하는 기능을 씀
③ 서버에 세션이 날아가거나 세션 서버가 죽어버리면 전체적으로 로그인이 풀려버리게 됨
상태유지는 최소한으로 꼭 필요한 경우에만 사용한다.
예시: 점원이 같을 때와 다를 때 결과 동일
무상태는 응답 서버를 쉽게 바꿀 수 있다.
① 로그인이 필요없는 단순한 서비스 소개 화면의 경우 설계가 쉬움
② 클라이언트가 필요한 정보를 보내야 해서 데이터량이 많음
🗒️ scale out
각 클라이언트와 서버가 TCP/IP 연결하고 유지하며 서버 자원을 소모한다.

각 클라이언트와 서버가 TCP/IP 연결을 하고 클라이언트의 Request와 서버의 Response 후에 TCP/IP 연결 종료함으로써 최소한의 자원을 사용한다.

1시간 동안 수천 명이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 수십 개 이하로 매우 적음

같은 시각에 맞춰 발생하는 대용량 트래픽에는 Stateless하게 설계하는 게 중요하다.
예시 1: 선착순 이벤트 예시 2: 명절 KTX 예약
예시 3: 학교 수강신청 예시 4: 선착순 1000명 이벤트


start line
request target
HTTP 버전
start line
header
body
<html>
<body> ... </body>
</html>