모든 것이 HTTP
HTTP (HyperText Transfer Protocol)
HTTP 메시지에 모든 것을 전송한다
- 클라이언트 서버 구조
- 무상태 프로토콜 , 비연결성
- HTTP 메시지
- 단순하고 확장이 가능하다
- HTTP 전송
- HTML,TEXT
- 이미지,음성,영상,파일
- JSON,XML (API)
- 거의 모든 형태의 데이터를 전송
- 서버간에 데이터를 주고 받을 때도 대부분 HTTP 사용
- HTTP 역사
- 중요한건 HTTP/1.1 <- 가장 많이 사용됨
- HTTP/2 성능개선 , HTTP/3 진행중 : TCP대신 UDP사용 성능개선
- 기반 프로토콜
- TCP : HTTP/1.1 , HTTP/2 - 3 way handshake, 데이터가 너무 많다,안정성은 좋지만 속도는 느림
- UDP : HTTP/3 - TCP위에 성능을 개선함
- 현재는 주로 1.1을 사용하지만 2,3도 점점 증가
클라이언트 서버 구조
- Request Response 구조
- 클라이언트는 서버에 요청을 보내고 , 응답 대기
- 서버가 요청에 대한 결과를 만들어서 응답
- 클라이언트 : UI, 사용성
- 서버 : 비지니스로직, 데이터
- 이렇게하면 각각 독립적으로 진화가 가능해진다
무상태 프로토콜
Stateless
- Stateful, Stateless 차이
-
Stateful :
- 노트북 구매시 점원이 바뀌면 ?
노트북이 얼마지 질문하고 점원이 바뀌면 알 수 없다
- EX)점원 A에게 노트북 얼만지 물어보고 / 점원 B에게 2개 구매하겠다고하면
원래 점원 B는 이사실을 모른다
- 상태유지에서는 중간에 다른 점원으로 바뀌면 장애가 생긴다,
중간에 다른 점원으로 바뀌면 안됨
-
Statelesss :
- 점원이 고객에 상태를 유지하지 않기위해서는
질문 자체를 " 노트북, 2개를, 신용카드로 구매하겠습니다" 이렇게하면
점원이 바뀌어도 상관없다
- 무상태에서는 고객이 필요한 데이터를 항상 전부 넘긴다,
중간에 점원이 바뀌어도 된다
-
결론 :
-
무상태 한계 :
- 로그인 : 상태를 유지해줘야하는 어쩔수 없는 기능들
- 최대한 무상태로 설계하고 어쩔수 없는 위같은 경우들만 상태유지로 설계한다.
비연결성
클라이언트와의 연결을 유지하지않고 요청을 받았을때만 유지한다
- 비연결성
- HTTP 는 기본이 연결을 유지하지 않는 모델
- 초 단위의 이하의 빠른속도로 응답
- 1시간동안 수천명이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 수십개로 매우 작다
- 서버 자원을 매우 효율적으로 사용할 수 있음
- 한계와 극복
- TCP/IP 연결을 새로 맺어야 한다 - 3 way handshake 시간 추가
- 사이트를 요청하면 수 많은 자원이 함께 다운로드된다
- 지금은 HTTP 지속연결로 문제 해결
- HTTP/2,HTTP/3에서 더 많은 최적화
- HTTP 성능 개선 과정
- 초기 : 연결 하고 종료하고 계속 반복 , 낭비
- HTTP 지속 연결 : 요청 , 모든 응답을 받고나서 종료
- Sateless를 기억하자!!
- 같은 시간에 딱 맞춰서 발생하는 대용량 트래픽
- 선착순 이벤트 , 명절 KTX 예약, 수강신청 - 동시 요청
HTTP 메시지
1. 시작라인 - 요청
-
-
요청 메시지 - HTTP 메서드
- 종류 : GET,POST,PUT,DELETE ...
- 서버가 수행해야 할 동작 지정 GET:조회,POST:요청 처리
-
요청 메시지 - 요청 대상
-
요청 메시지 - HTTP 버전
- HTTP Version : HTTP/1.1 등등
2. 시작라인 - 응답
-
-
HTTP버전,HTTP상태코드(요청 성공,실패를 나타낸다)
-
200:성공 , 400:클라이언트 요청 오류 , 500:서버 내부 오류
-
이유문구로 구성
3. HTTP 헤더
- HTTP 전송에 필요한 모든 부가정보
- 필요시 임의의 헤더 추가 가능
4. HTTP 메시지 바디
- 실제 전송할 데이터
- HTML 문서,이미지,영상,JSON등 byte로 표현할 수 있는 모든 데이터가 전송 가능
김영한님의 모든 개발자를 위한 HTTP 웹 기본 지식을 참고하여
작성한 자료입니다.