HTTP는 HyperText Transfer Protocol의 악자로 문서간의링크로 전송하는 프로토콜이다.
하지만 지금은 모든것을 HTTP 메시지로 전송한다.
HTTP/1.1 1997년: 가장많이 사용. 우리에게 가장 중요한 버전
HTTP/2 2015년: 성능개선
HTTP/3 진행중: TCP대신 UDP사용. 성능개선
TCP : HTTP/1.1, HTTP/2
UDP : HTTP/3
클라이언트가 HTTP 메시지를 통해 서버에 요청하고, 서버는 클라이언트에게 응답메시지를 보낸다.
여기서 중요한것은, 클라이언트와 서버를 분리하는것이다.
클라이언트는 ui를 그리는것에 서버는 비즈니스로직등에 초점을 맞춰서 개발하면, 양쪽이 독립적으로 진화를 할 수 있다.
서버가 클라이언트의 상태를 보존하지 않는다.
상태유지는 항상 같은 서버가 유지되어야한다. 따라서 서버에 오류가 나면 응답을 못받는다.
무상태는 아무 서버나 호출해도된다. 따라서 서버에 오류가 나면 다른 서버에서 응답을 받는다.
무상태는 상태유지를 안하기때문에 응답 서버를 쉽게 바꿀 수 있다. => 무한한 서버 증설 가능
실무 한계
모든것을 무상태로 설계할수는없다. 로그인 같은 상태유지가 필요한것도 있기때문이다.
서버가 요청이 들어올때 응답을 해주고 바로 끊어버리기때문에 , 최소한의 자원으로 서버를 유지할수있으므로 서버자원을 효율적으로 사용할 수 있다.
하지만, 요청 할 때 마다 TCP/IP연결을 새로 맺어야한다. - 3 way handshake 시간 추가
또한 웹브라우저로 사이트를 요청하면 HTML뿐만아니라 js,css,이미지 등 수많은 자원이 함께 다운로드 된다.
이를 개선하기 위해 HTTP지속연결로 문제 해결했다.
결론 : 따라서 스테이스리스로 개발을 최대한 하는것이 중요하다.
선착순이벤트,명절기차예약 등 같은시간에 딱 맞추어 발생하는 대용량 트래픽을 어떻게 풀어야할지가 중요
=> 앞에 무상태페이지를 하나 더 만들고 버튼을 클릭하게 등으로 푼다.
GET /search?q=hello&hi=ko HTTP/1.1
Host: www.google.com
절대경로[?쿼리]
* 절대경로="/"로 시작하는 경로fieldname: @@@~
HTTP/1.1 200 OK
Content-Type: text/html;charset=UTP-8
"<.html>
<.body>...</.body>
</.html>"
fieldname: @@@~
정리
- HTTP 메시지에 모든것을 전송
- HTTP 1.1사용
- 클라이언트 서버 구조
- 무상태 프로토콜 ( 스테이스리스 )
- HTTP 메시지
- 단순함, 확장 가능
- 지금은 HTTP 시대다
~