💡 김영한님의 [모든 개발자를 위한 HTTP 웹 기본 지식] 강의를 보고 복습 차원에서 정리해 놓은 글 입니다.
참고
HTTP는 HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜이고, 웹에서 이루어지는 모든 데이터를 교환하는 기초입니다.
HTTP 메세지를 통해 HTML TEXT 뿐만 아니라 이미지 영상 파일, JSON, XML 등 거의 모든 형태의 데이터를 전송 가능합니다.
클라이언트 - 서버 구조의 장점
서버와 클라이언트가 구분되어 있기에, 서버와 클라이언트 양쪽이 독립적으로 진화할 수 있다는 장점이 있습니다.
상태 유지 : 중간에 다른 서버로 바뀌면 안된다.
무상태: 중간에 다른 서버로 바뀌어도 됨
무상태(stateless)의 단점 - 주문을 노트북 하나를 주문할 경우에 노트북, 2개, 카드로 결제 같이 데이터를 많이 보내야 한다는 단점이 존재합니다.
로그인과 같이 상태 유지를 해야 하는 경우는 쿠키, 세션등을 통해 상태를 유지할 수 있습니다.
💡 Stateful, Stateless 차이
Stateful
고객 : 아메리카노 얼마인가요?
점원 : 3000원 입니다.
고객 : 2개 주세요
점원 : 6000원 입니다.
고객 : 카드로 계산할게요
점원 : 결제 되었습니다.
Stateless
고객 : 아메리카노 얼마인가요?
점원 : 3000원 입니다.
고객 : 아메리카노 2개 주세요
점원 : 6000원 입니다.
고객 : 아메리카노 2개 카드로 계산할게요
점원 : 결제 되었습니다.
HTTP는 기본적으로 연결을 유지하지 않습니다.
요청과 응답 이후에 연결을 계속 유지할 경우 클라이언트들이 작업을 하지 않더라도 연결이 유지되어 서버의 자원이 소모 됩니다.
HTTP는 기본적으로 요청과 응답 이후 연결을 끊는 비 연결성의 특성을 가지는데,
요청을 받고 응답 이후 바로 연결을 끊는다면, 그만큼 서버의 자원을 효율적으로 사용할 수 있습니다.
❗️ 비 연결성의 한계
연결을 유지하지 않는 경우 연결을 하고 바로 끊기 때문에 다시 요청이 오면 TCP/IP 연결을 새로 맺어야 합니다.
다시 요청이 올때마다 다시 3way handshake(Syn, Syn + Ack, Ack)를 해야하기 때문에 시간이 추가로 소모된다는 단점이 있습니다.
HTTP 초기에는 연결과 종료를 반복해서 데이터를 받았지만,
이러한 문제는 지속 연결(Persistent Connections)로 개선하였습니다
HTTP2, HTTP3는 이것을 더 빠르게 해결했고, 특히나 HTTP3 에서는 UDP 프로토콜을 통해 연결 속도 자체도 줄였습니다.