서버가 클라이언트의 상태를 보존하지 않는다.
김영한님 강의에서는 다음과 같이 표현된다.
고객: 이 노트북 얼마인가요?
점원**"A"**: 100만원 입니다.
고객: 노트북 2개 구매하겠습니다.
점원**"B"**: 노트북 2개는 200만원 입니다. 신용카드, 현금중에 어떤 걸로 구매 하시겠어요?
고객: 노트북 2개를 신용카드로 구매하겠습니다.
점원"C": 200만원 결제 완료되었습니다.
자바/스프링 귀신 김영한님에 대한 존경을 담아 code블럭으로 대화를 구성했다.
무상태는 응답 서버를 쉽게 바꿀 수 있다. -> 무한한 서버 증설 가능
즉, 다음과 같이 중계 서버를 통해 수평적으로 서버 확장에 매우 유리하다.
어? 그러면 로그인 이런거는요??? 모임??
일반적으로 브라우저 쿠키와 서버 세션등을 사용해서 상태 유지 가능. (보통은 인증을 위해서!)
상태 유지는 최소한만 사용
들어온 요청에 대해서 응답을 하고 나면 CONNECTION 을 종료시킨다.
--> Connectionless 하게 운영하는 게 낫겠네!
그건 또 아니쥐!
그래서, 현재는 HTTP 지속 연결 (Persistence Connections) 로 문제를 해결한다. 더불어 HTTP/2 , HTTP/3 에서는 더 많은 최적화가 이루어졌음!
Persistent Connection? HTTP Keep Alive? <- 링크
GET /search?q=hello&hl=ko HTTP 1.1
HOST : www.google.com
위는 예시!
- HTTP Method
GET / POST / PUT(Or patch) / DELETE ...
등으로 대표되는 HTTP Method 가 제일 먼저 등장
예시에서는 "GET" 부분
- 요청 대상
absolute-path?query
절대경로= "/" 로 시작하는 경로
요청에서는 "/search?q=hello&hl=ko" 부분
- HTTP Version
"HTTP 1.1" 부분
HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8 Content-Length: 3423<html> <body>...</body> </html> // 요청 성공후 응답하는 콘텐츠들...
- HTTP VERSION
- HTTP Status code : 상태 메시지
- 이유 문구 : 사람이 이해할 수 있는 짧은 "상태 코드 설명" 글
HTTP 전송에 필요한 모든 부가정보가 존재하는 곳
ex : body 내용, 크기, 압축, 인증, 클라이언트 정보, 서버 애플리케이션 정보, 캐시 정보 등등 엄청 많음
거의 뭐 바디빼고 다 있다고 생각하면 된다!
실제 전송할 데이터
이 글 대부분은 김영한님의 강의 내용 기반으로 직접 정리한 내용입니다. 추가 내용도 있어요!