모든 개발자를 위한 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>