HTTP❓
- HyperText Transfer Protocol
- HTTP메시지에 모든 것을 전송
- HTML, TEXT
- IMAGE, 음성, 영상, 파일
- JSON, XML (API)
- 거의 모든 형태의 데이터 전송 가능
- 서버간에 데이터를 주고 받을 때도 대부분 HTTP 사용
서버가 클라이언트의 이전 상태를 보존하는 것
예를 들어, 고객이 레스토랑에서 주문을 하고, 이후 다른 점원으로 서빙을 받아도 주문 내역이 유지되어야 하는 상황을 뜻한다.
항상 같은 서버가 유지되어야 한다.
중간에 서버에 장애가 생기면, 클라이언트에서 처음부터 다시 요청해야 한다.
서버가 클라이언트의 이전 상태를 보존하지 않는 것
예를 들어, 각각의 고객이 레스토랑에서 주문할 때, 서빙받는 점원이 다를 수 있지만, 주문 내역은 고객 스스로 관리하고, 점원 간에 상태 정보를 공유하지 않는 상황을 뜻한다.
-> 갑자기 고객이 증가해도 점원을 대거 투입할 수 있다
갑자기 클라이언트 요청이 증가해도 서버를 대거 투입할 수 있다
무상태는 응답 서버를 쉽게 바꿀 수 있다 -> 무한한 서버 증설 가능
아무 서버나 호출해도 된다.
중간에 서버에 장애가 생겨도, 클라이언트가 처음부터 다시 요청하지 않아도 다른 서버로 전달이 된다.
서버 확장성 높음(scale out)
실무 한계
HTTP는 기본이 연결을 유지하지 않는 모델
일반적으로 초 단위 이하의 빠른 속도로 응답
1시간 동안 수천명이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 수십개 이하로 매우 작음 (ex - 웹 브라우저에서 계속 연속해서 검색 버튼을 누르지는 않는다)
서버 자원을 매우 효율적으로 사용할 수 있음
한계와 극복
TCP/IP 연결을 새로 맺어야 함 - 3 way handshake 시간 추가
웹 브라우저로 사이트를 요청하면 HTML뿐만 아니라 자바스크립트, css, 추가 이미지 등 수많은 자원이 함께 다운로드
지금은 HTTP 지속 연결(Persistent Connections)로 문제 해결
HTTP/2, HTTP/3에서 더 많은 최적화
📌 요청 메시지
GET/search?q=hello&hl=ko HTTP/1.1
start-line = request-line / status-line
request-line = method SP(공백) request-target SP HTTP-version CRLF(엔터)
/serach?q=hello&hl=ko
)absolute-path[?query]
(절대경로[?query])/
로 시작하는 경로*
, http://...?x=y
와 같이 다른 유형의 경로지정 방법도 있다📌 응답 메시지
HTTP/1.1 200 OK
start-line = request-line / status-line
status-line = HTTP-version SP status-code SP reason-pharse CRLF