Stateful은 중간에 담당자가 교체된다면 로직을 진행할 수 없다. 하지만 Stateless인 경우에는 유연하게 교체되어도 문제가 되지 않는다. 하지만 모든 것을 무상태로만 설계할 수 없으니 최소한의 Stateful만 사용 한다.
HTTP는 기본적으로 비 연결성이다. 그렇기 때문에 서버 자원을 효율적으로 사용할 수 있다. 하지만 비 연결성이기 때문에 매번 TCP 연결을 하는 과정과 하나의 화면에서도 JS, 이미지, CSS 등 수 많은 자원을 가져와야 하기 때문에 부하가 걸릴 수 있다.
이러한 상황을 HTTP 지속 연결(Persistent Connections)로 성능을 향상시켰다.
HTTP의 메시지 구조는 위와 같다. 요청 메세지와 응답 메세지에 실제로 어떠한 데이터가 있는지 간단한게 정리해 보자
시작 라인에는 request-line/status-line이 올 수 있다. 요청에는 request-line, 응답에는 status-line이 온다.
request-line은 method SP(공백) request-target SP HTTP-version CRLF(엔터) 형태로 데이터를 가지고 있다. method에는 HTTP 메소드가 들어가며, request-target에는 절대경로 "/"로 시작하는 경로가 들어간다.
GET /search?q=hello&hl=ko HTTP/1.1
status-line에는 HTTP-version SP status-code SP reason-phrase CRLF 형태로 데이터를 가지고 있다.
HTTP/1.1 200 OK
헤더는 메시지 바디의 내용, 메시지 바디의 크기, 압축, 인증, 요청 클라이언트(브라우저) 정보,
서버 애플리케이션 정보, 캐시 관리 정보 등 HTTP 전송에 필요한 모든 부가 정보가 들어가 있다.
field-name ":" OWS field-value OWS 형태이다
Content-Type: text/html;charset=UTF-8
Content-Length: 3423
실제 전송할 데이터가 담겨져 있으며 HTML 문서, 이미지, 영상, JSON 등 byte로 표현 가능한 모든 데이터를 전송할 수 있다.
참고 문서 및 링크