HTTP 메시지에 모든 것을 전송
현재는 HTTP/1.1 주로 사용하고 있는 추세입니다. HTTP/2 HTTP/3도 점점 증가하고 있음
의의
클라이언트 서버 구조에서 서버는 비지니스 로직과 데이터를, 클라이언트는 UI와 사용성을 높이는 작업을 분리하여 관리하게 된다. 이는 서버와 클라이언트를 독립적으로 관리하여 각 목적에 맞는 기능들만 진화시킬 수 있는 장점을 가지게 된다.
스테이스리스(Stateless)
서버가 클아이언트의 상태를 보존하지 않는 특징을 말한다. 서버 확장성(스케일 아웃)이 높은 장점을 가지고 있으나 클라이언트가 추가 데이터를 전송해야하는 단점이 있다.
상태 유지(Stateful)의 예시
고객 : 이 노트북 얼마인가요?
점원 : 100만원 입니다. (노트북 상태 유지)
고객 : 2개 구매하겠습니다.
점원 : 200만원 입니다. 신용카드, 현금중에 어떤 걸로 구매 하시겠어요? (노트북, 2개 상태유지)
고객 : 신용카드로 구매하겠습니다.
점원 : 200만원 결제 완료되었습니다. (노트북, 2개, 신용카드 상태유지)
상태 유지(Stateful) - 점원이 중간에 바뀌면?
고객 : 이 노트북 얼마인가요?
점원A : 100만원 입니다.
고객 : 2개 구매하겠습니다.
점원B : ??? 무엇을 2개 구매하시는건가요?
고객 : 신용카드로 구매하겠습니다.
점원C : ???무슨 제품을 몇개, 신용카드로 구매하시는건가요?
무상태(Stateless)의 예시
고객 : 이 노트북 얼마인가요?
점원 : 100만원 입니다.
고객 : 노트북 2개 구매하겠습니다
점원 : 노트북 2개는 200만원 입니다. 신용카드, 현금중에 어떤 걸로 구매하시겠어요?
고객 : 노크북 2개를 신용카드로 구매하겠습니다.
점원 : 200만원 결제 완료되었습니다.
무상태(Stateless) - 점원이 중간에 바뀌면?
고객 : 이 노트북 얼마인가요?
점원A : 100만원 입니다.
고객 : 노트북 2개 구매하겠습니다
점원B : 노트북 2개는 200만원 입니다. 신용카드, 현금중에 어떤 걸로 구매하시겠어요?
고객 : 노크북 2개를 신용카드로 구매하겠습니다.
점원C : 200만원 결제 완료되었습니다.
무상태 : 중간에 다른 서버로 바뀌어도 된다. 갑자기 클라이언트 요청이 증가해도 서버를 증설할 수 있다.
무상태는 응답 서버를 쉽게 바꿀 수 있다. -> 무한한 서버 증설 가능
또한 서버1에서 오류가 나도 문제없이 서비스를 제공할 수 있다.
무상태의 한계
특징
연결을 유지하는 모델
클라이언트 2와 3이 놀고있어도 연결을 유지해야하는 단점이 있다.
연결을 유지하지 않는 모델
요청과 응답이 끝나면 연결을 끝낸다. 최소한의 자원을 유지
🙋♀️스테이트리스를 기억하자
시작라인과 헤더 후 공백라인(CRLF) 후 HTML 내용이 Body에 들어옴
start-line = request-line / status-line
request-line = method SP(공백) request-target SP(공백) HTTP-version CRLF(엔터)
method (HTTP 요청 메서드)
request-target (요청 대상)
HTTP-version (HTTP 버전)
start-line = request-line / status-line
status-line = HTTP-version SP(공백) status-code SP(공백) reason-phrase CRLF(엔터)
HTTP-version (HTTP 버전)
status-code (상태코드)
reason-phrase (이유 문구)
header-field - field-name ":" OWS field-value OWS (OWS: 띄어쓰기 허용)
field-name은 대소문자 구문 없음
헤더의 용도
실제 전송할 데이터
HTML 문서, 이미지, 영상 JSON 등등 byte로 표현할 수 있는 모든 데이터