서버 면접 기본 질문이였던 HTTP에 대해 알아보자.
HTTP에 관해서만 몇 백 페이지 짜리 책이 있을 정도로 파고들다 보면 어떻게 보면 굉장히 광범위한 내용이다.
간단하게 핵심만 알아보도록 하자! 왜냐면 나도 잘 모루니까~
Hyper Text Transfer Protocol 의 약어로, 인터넷에서 데이터를 주고받을 수 있는 프로토콜
웹의 Application Layer(응용 계층)의 프로토콜임
서로 다른 엔드 시스템에서 수행되는 클라이언트 프로그램과 서버 프로그램은 서로 HTTP 메세지를 교환하여 통신함
HTTP는 웹 클라이언트가 웹 서버에게 웹 페이지를 어떻게 요청하는지와 서버가 클라이언트로 어떻게 웹 페이지를 전송하는지를 정의
HTTP 클라이언트는 먼저 서버에게 TCP연결을 시작함
일단 연결이 이루어지면, 브라우저와 서버 프로세스는 그들의 소켓 인터페이스를 통해 TCP로 접속함
클라이언트 측에서 보면 소켓 인터페이스는 클라이언트 프로세스와 TCP연결 사이에서의 출입구임
TCP는 신뢰적 데이터 전송 서비스를 제공하므로 HTTP요청 메세지가 궁극적으로 서버에 잘 도착함을 의미함
Server가 Client에게 요청 파일을 보낼 때, 서버는 클라이언트에 관한 어떠한 상태 정보도 저장하지 않음 -> Stateless Protocol(비상태 프로토콜)
(Cookie를 사용하여 stateful 하게 만듦)
클라이언트 - 서버 상호작용이 TCP상에서 발생할 때,
각 요구/응답 쌍이 분리된 TCP 연결을 통해 보내져야 하는가? - 비지속연결
혹은 모든 요구와 해당하는 응답들이 같은 TCP 연결 상으로 보내져야 하는가? - 지속연결
를 결정할 필요가 있다.
지속연결
임한 TCP 연결 마다 한 Object만 보냄
진행과정
독립적으로 수행되기 때문에 중간에 문제 생겨도 받은 만큼 표시
한 object 에 대해 2개의 RTT + file전송시간
이 요구됨
multi object 들이 TCP연결 하나로 전송될 수 있음
한번 TCP연결 되고 나서 계속 object 요청과 전송 반복됨
중간에 file이 잘못되어 연결이 끊어지면 처음부터 다시 해야 한다는 단점이 있음😥
요즘은 거의 persistent 방식 사용함
persistent HTTP의 response time = 1RTT + {num(object) * (RTT+file transmisson time)}
HTTP 메소드에 대해서는 REST와 함께 다음 글에서 알아보도록 하자!
References
http://www.ktword.co.kr/test/view/view.php?m_temp1=648
[컴퓨터 네트워킹 하향식 접근 - James F.Kurose]