HTTP 메시지에 모든 것을 전송할 수 있다.
TCP : HTTP/1.1, HTTP/2
UDP : HTTP/3
현재 HTTP/1.1 주로 사용
HTTP/2, HTTP/3도 점점 증가
Stateless(상태를 유지하지 않는 것)
Stateful(상태를 유지하는 것)
클라이언트A는 서버1과 통신을 하고 있는 상황이다. 만약 서버1에 문제가 생겨서 통신을 할 수 없는 아래와 같은 상황이 생긴다면 어떻게 될까?
서버가 상태를 유지하는 상황에서 위와 같이 서버1에 장애가 발생해서 연결이 끊기게 되면 통신이 정상적으로 수행될 수 없기 때문에 다시 처음부터 시작을 해야 한다.
반면 무상태로 설계했을 때 HTTP 요청할 때부터 필요한 데이터를 다 담아서 전송을 하게 되기 때문에 아무 서버나 호출해도 문제가 없다.
중간에 서버가 장애가 발생하더라도 다른 서버로 전달을 하면 정상적으로 통신을 할 수 있게 된다.
모든 것을 무상태로 설계할 수 있는 경우가 있지만 그렇지 못한 경우도 있다.
로그인한 사용자의 경우 로그인을 했다는 상태를 서버에 유지
일반적으로 브라우저 쿠키와 세션 등을 사용해서 상태 유지
상태 유지는 최소한만 사용
HTTP는 기본이 연결을 유지하지 않는 모델이다.
일반적으로 초 단위 이하의 빠른 속도로 응답
서버 자원을 매우 효율적으로 사용할 수 있다.
TCP/IP 연결의 경우 기본적으로 연결을 유지(물리적인 연결X, 논리적인 가상의 연결)
서버와 연결되는 클라이언트의 수가 늘어나면 늘어날수록 서버의 자원이 계속 소모가 된다.
반면 위와 같이 통신을 끝내고 TCP/IP 연결을 바로 종료시키면 자원을 현재 요청을 주고 받을 때만 연결을 하고 그 다음에는 끊어버려서 서버가 유지하는 자원을 최소한으로 줄일 수 있게 된다.
TCP/IP 연결을 새로 맺어야 함 - 3-way handshake 시간 추가
웹 브라우저로 사이트를 요청하면 HTML뿐만 아니라 자바스크립트, CSS, 추가 이미지 등 수많은 자원이 함께 다운로드
지금은 HTTP 지속 연결(Persistent Connections)로 해결
HTTP/2, HTTP/3에서 더 많은 최적화가 이루어지고 있다.
✔️[요청 메시지 - HTTP 메서드]
✔️[요청 메시지 - 요청 대상]
/
로 시작하는 경로✔️[요청 메시지 - HTTP 버전]
HTTP 전송에 필요한 모든 부가정보
실제 전송할 데이터
HTML 문서, 이미지, 영상, JSON 등등 byte로 표현할 수 있는 모든 데이터 전송 가능