HTTP : Hyper Text Transfer Protocol
기반프로토콜
TCP : HTTP/1.1 , HTTP/2
UDP : HTTP/3
현재 HTTP/1.1 주로사용
2,3도 점점 증가(2,3는 1.1의 성능개선)
거의 모든 형태의 데이터 전송 가
클라이언트 서버 구조
장점 - 양쪽(클라이언트 , 서버)가 독립적으로 발전할 수 있다
무상태 프로토콜
스테이스리스(Stateless)
서버가 클라이언트 상태를 보존하지 않음
Stateful 상태유지 : 중간에 다른 점원으로 바뀌면 안된다.
(중간에 다른 점원으로 바뀔 때 상태 정보를 다른 점원에게 미리 알려줘야 한다)
항상 같은 서버가 유지되어야 한다.
Stateless 무상태 : 중간에 다른 점원으로 바뀌어도 된다
갑자기 고객이 증가해도 점원을 대거 투입할 수 있다
갑가지 클라이언트 요청이 증가해도 서버를 대거 투입할 수 있다
무상태는 응답서버를 쉽게 바꿀 수 있다 -> 무한한 서버 증설 가능
스케일아웃 - 수평 확장 유리
비연결성
HTTP는 기본적으로 연결을 유지하지 않는다
일반적으로 초단위 이하의 빠른 속도로 응답
1시간동안 수천명이 서비스를 사용해도 실제 서버에서 동시처리하는 요청 -> 수십개 이하로 매우 작다!
ex) 웹브라우저에서 계속 연속해서 검색 버튼을 누르지는 않는다.
서버자원을 매우 효율적으로 사용 가능
단점
TCP/IP 연결을 새로 맺어야 함 - 3way handshake 시간 추가
웹 브라우저로 사이트를 요청하면 html뿐만 아니라 자바스크립트 , css 이미지등 수많은 자원을 함께 다운로드
지금은 HTTP 지속연결(Persistent Connections)로 문제해결
HTTP/2 , HTTP/3에서 더 많은 최적화
스테이스리스를 기억!(서버개발중 어려운 업무)
정말 같은 시간에 딱 맞추어 발생하는 대용량 트래픽
ex) 선착순 이벤트 , 명절 ktx예약 , 학과 수업 등록
ex) 저녁 6:00 선탁순 1000명 치킨 할인 이벤트 -> 수만명 동시 요청
HTTP메시지 구조
Http헤더
http header host name은 대소문자 구분x
HTTP 전송에 필요한 모든 부가정보
ex) 메세지 바디 내용 , 바디 크기 , 압축 , 인증 등등
표준 헤더가 너무 많다
필요시 임의의 헤더 추가 가능
HTTP 메시지 받
실제 전송할 데이터
byte로 표현할 수 있는 모든 데이터 전송 가능
단순함 확장 가능
정리
HTTP메시지에 모든 것을 전송
역사 / 1.1을 기준으로 학습
클라이언트 서버 구조
무상태 프로토콜(스테이스리스)
HTTP메시지 구조 시작라인 , 헤더 , 바디
단순함, 확장가능