김영한님의 모든 개발자를 위한 HTTP 웹 기본 지식 강의 수강 내용을 정리하기 위한 글입니다.
HTTP 메시지에 모든 것을 전송
HTML, text, JSON, XML 등 거의 모든 형태의 대한 데이터 전송이 가능
서버간 데이터 송수신시에도 HTTP 사용
서버가 클라이언트의 상태를 보존하지 않음
(클라이언트와 서버가 요청과 응답을 주고 받으면 연결이 끊어짐)
서버 확장성이 높지만 클라이언트가 추가 데이터를 전송해야 함
고객 : 핸드폰 얼마죠?
점원1 : 100만원 입니다.
고객 : 3개 구매할게요.
점원1 : 300만원 입니다.
// 이때, 점원이 변경이 된다면 바뀐 점원에게 핸드폰과 갯수를 인수인계 해줘야 함
고객 : 핸드폰 얼마죠?
점원?? : 100만원 입니다.
고객 : 2개 구매할게요.
점원?? : ?? 뭘요?
고객 : '핸드폰' 2개 구매할게요.
점원?? : 200만원입니다.
위 예시와 같이 Stateful은 항상 같은 서버가 유지되야 하며, 유지보수 중 서버를 변경하게 되거나 서버 장애가 날 경우 처리에 많은 비용이 든다.
하지만 Stateless에 경우 같은 기능을 하는 서버 중 변경, 장애 시 다른 서버를 호출해도 무방하며, 확장에 Stateful에 비해 유리하다.
※ 로그인 등 상태유지가 필요한 것에 최소한으로 상태 유지를 사용하고 최대한 무상태로 설계
HTTP 요청 메시지 예시
GET / search?q=hello&hl=ko HTTP/1.1
Host: www.google.com
HTTP 응답 메시지 예시
HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Length: 3423
/ 공백 /
<html>
<body>...</body>
</html>
※ 요청 메시지도 body 본문을 가질 수 있다!
header-field = field-name":"OWS(공백허용)field-value OWS(공백허용)