클라이언트와 서버로 구조를 나눔으로써 책임과 역할을 분리하여 하나의 책임에만 집중하게 함으로써 각각 독립적으로 진화할수 있게 되었다.
클라이언트는 비즈니스 로직이나 데이터를 다룰 필요 없이 UI를 그리는데 집중할 수 있다.
서버에서는 비즈니스 로직이나 데이터를 다루는것에만 집중할 수 있다.
(과도한 트래픽으로 인해 서버의 증설이 필요할 경우 클라이언트를 신경쓰지 않아도 된다.)
HTTP는 클라이언트와 서버구조로 되어있다.
클라이언트와 서버들은 개별적인 메시지 교환에의해 통신한다.
보통 브라우저인 클라이언트에 의해 전송되는 메시지를 요청(Request)라고 부르며, 그에 대한 서버의 응답으로 전송되는 메시지를 응답(response)라고 부른다.
클라이언트와 서버로 구조를 나누는 이유는 클라이언트와 서버가 각자의 역할에 집중할 수 있기 때문이다.
[클라이언트와 서버구조를 갖는 HTTP]
Stateless(무상태)란?
서버가 클라이언트의 상태를 유지하지 않는다.
[서버의 문제로 인한 변경에 영향을 받지 않는 무상태 프로토콜]
고객: 이 노트북 얼마인가요?
점원A: 100만원 입니다.
고객: 노트북 2개 구매하겠습니다.
점원B: 노트북 2개는 200만원 입니다. 신용카드, 현금중에 어떤 걸로 구매 하시겠어요?
고객: 노트북 2개를 신용카드로 구매하겠습니다.
점원C: 200만원 결제 완료되었습니다.
[스케일 아웃 - 수평확장에 유리한 Stateless(무상태)]
Stateful(상태유지)이란?
서버가 클라이언트의 상태를 보존하는것을 말한다.
[서버에 문제가 없는경우 (같은 점원이 응대)]
고객: 이 노트북 얼마인가요?
점원: 100만원 입니다.
고객: 2개 구매하겠습니다.
점원: 200만원 입니다. 신용카드, 현금중에 어떤 걸로 구매 하시겠어요?
고객: 신용카드로 구매하겠습니다.
점원: 200만원 결제 완료되었습니다
[서버에 문제가 발생한 경우(점원이 바뀐 경우)]
고객: 이 노트북 얼마인가요?
점원A: 100만원 입니다.
고객: 2개 구매하겠습니다.
점원B: ? 무엇을 2개 구매하시겠어요?
고객: 신용카드로 구매하겠습니다.
점원C: ? 무슨 제품을 몇 개 신용카드로 구매하시겠어요?
Stateful
(상태유지)는 같은 서버를 유지해야하는 특징을 가진다.ex) 로그인이 필요없는 단순 이벤트 페이지
ex) 로그인이 필요한 경우
특정 시간에 맞추어 대용량 트래픽이 발생하는 경우 수천, 수만명의 사용자가 동시 접속하면서 서버에 과부하가 걸리는데 이 경우 무상태 페이지를 이용하여 페이지 접속 인원을 분산시키면 좋다.
ex) 선착순 이벤트, 명절 KTX 예약, 수강신청
ex) 웹브라우저에서 검색버튼을 계속 연속해서 누르며 사용하지는 않는다.
비연결성은 매번 연결을 새로 맺어야하기 때문에 매 연결마다 비용이 든다.
3 way handshake 시간 추가
HTTP/2
, HTTP/3
에서 더 많은 최적화[HTTP 초기 - 연결, 종료 자원낭비]
연결/응답/종료
과정을 모두 반복했다.연결/종료
로 인하여 불필요한 연결비용이 소모된다.[HTTP 지속연결]
요청/응답
구조로 다운받는다. 연결/종료
를 반복하는 것이 아니라 필요한 자원을 모두 받을때까지 연결
을 유지한 후 자원이 모두 다운로드 되면 연결을 종료
시키는 것이다. HTTP 메시지는 거의 모든 자원을 전송할 수 있다. 이 HTTP 메시지는
요청/응답
메시지의 구조가 다르다.
[요청 메시지]
[응답 메시지]
[HTTP가 전송가능한 자원종류]
HTML
, TEXT
이미지
, 영상
, 음성파일
JSON
, XML
서버간 데이터 전송
이외에도 거의 모든 데이터 전송가능
[HTTP 메시지 구조]
요청/응답
메시지 모두 동일한 구조를 갖는다.message body
본문을 가질 수 있다.공백라인(CRLF)
은 필수정보[요청 메시지]
HTTP 요청 메시지는 HTTP메서드
, 리소스의 경로
, 프로토콜 버전
, 헤더
로 구성된다. (요청 메시지에도 본문이 추가될 수 있다.)
[응답 메시지]
HTTP 응답 메시지는 프로토콜 버전
, 상태 코드
, 상태 메시지
, 헤더
그리고 메시지 본문
으로 구성된다.
[Reference]
gparkkii.log
Catsbi's Dlog
김영한 - HTTP 웹 기본지식 강의
Mozilla