인터넷에서, 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다.
HTTP도 시간이 지남에 따라 여러 버전이 있지만 대중적인 버전은 1.1버전이 있다.
HTTP 메세지에 이미지, 영상, 텍스트, HTML, JSON, 심지어 서버간의 통신도 HTTP를 통해서 하기때문에 지금은 대 HTTP시대라고 봐도 무방합니다!
HTTP의 첫번째 특징은 클라이언트와 서버 구조로 동작을 한다는 겁니다. 조금더 상세하게 나눈다면 아래의 구조입니다.
두번째 특징으로는 무상태 프로토콜을 지향합니다.
무상태 프로토콜 즉 stateless는 서버가 클라이언트의 상태를 보존하지 않으며,서버 확장성(스케일 아웃/수평확장)이 높다는 장점과 클라이언트가 추가적인 정보를 전송해야한다는 단점이 있습니다.
어렵네요.. 좀 더 차근차근 알아보겠습니다.
먼저 무상태의 반대 개념인 상태 유지(stateful)부터 알아보겠습니다.
상태유지의 예를 들면
하지만 여기서 계산해주던 점원이 화장실에가서 다른 점원으로 바뀐다면?
이렇게 점원분이 이해를 못하시는 상황이 발생하게 된답니다.
하지만 무상태 프로토콜이라면
이렇게 고객이 애초에 리소스(노트북, 수량, 결제수단)를 처음부터 동일하게 제공 바뀌는 점원에게 말해준다면 점원이 변경되어도 문제가 되지는 않지만 고객이 조금 귀찮겠군여..
이렇게 상태유지와 무상태의 차이를 정리해보겠습니다.
상태 유지
무상태
고객이 증가해도 점원을 대거 투입이 가능하다. >
갑자기 클라이언트의 요청이 증가해도 응답 서버를 대거 투입이 가능하다. >
무상태는 응답 서버를 쉽게 변경이 가능하다. >
서버의 무한한 증설 가능 으로 볼 수 있겠습니다.
이러한 무상태 프로토콜의 장점은 에러 상황에서도 빛을 발휘합니다.
상태유지에서는 아래와 같은 문제가 발생합니다.
하지만 무상태에서는 문제가 없죠.
그렇다고 해서 무상태 프로토콜이 어디에나 쓰는 만능은 아닙니다.
무상태의 한계
세번째 특징으로는 비 연결성입니다.
예시를 한번 들어보겠습니다.
3대의 클라이언트와 1대의 응답 서버가 있고, 클라이언트는 서버와 모두 연결이 된 상태입니다. 만약에 1번 클라이언트가 요청을 보내가 서버가 응답을 보내는 상태라면 2,3번은 클라이언트는 놀고있는 상태겠죠? 하지만 서버와의 연결을 유지하고 있어야하기에 이때 리소스 소모가 발생한다는 단점이 생깁니다.
하지만 비 연결성이라는 특징이 들어간다면 당장 요청과 응답이 오가는 1번 클라이언트만 서버와의 연결을 유지하고 2,3번은 연결을 끊으면 됩니다. 이러면 리소스의 낭비를 최소화 할 수 있습니다.
한계점
극복
마지막 특징은 HTTP 메세지입니다.
위에서 설명한 거처럼 HTTP는 요청과 응답 구조로 나누어져 있으며 메세지 또한 나누어져 있습니다.
메세지의 구성은 시작라인 > 헤더 > 공백 > 바디로 구성되어 있습니다.
시작라인
요청: HTTP 메서드 + 요청 대상 + HTTP 버전
ex) GET /search?q=hello&hl=ko HTTP/1.1
응답: HTTP 버전 + HTTP 상태 코드 + 이유 문구
ex) HTTP/1.1 200 OK
헤더
공백
바디
-참고 자료-
https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard