→ Open in Slid
이번 포스팅에서는 앞으로 자주 나올 Round Trip Time (RTT)와 Http 연결 유지 여부에 따른 Persistent Http, Non-Persistent Http 그리고 Http 메세지에 대해서 알아보자.
RTT : Round Trip Time
- RTT란?
- 아주 작은 패킷이 클라이언트와 서버 사이를 왕복하는데 걸리는 시간이다. '아주 작은 패킷'은 Transmission Delay를 무시한다는 뜻이다. 단위 패킷당 네트워크 왕복시간 정도로 해석하자. 앞으로 RTT는 기준이 되는 시간처럼 사용한다.
Non-Persistent Http
- 앞에서 Http는 File Tansfer와 비슷하므로 Data Integrity가 중요하다고 했다.
- 따라서 Http는 UDP 가 아닌 신뢰성있는 TCP를 사용한다.
- Non-Persistent Http는 하나의 오브젝트를 받을 때마다 TCP 연결을 다시 맺는다.
- 초장기 버전인 Http 1.0에서 사용하는 방식으로 1.1부터는 Persistent Http를 지원한다.
- 작동방식
- 1. 클라이언트가 서버에게 Http 프로세스 간 TCP 커넥션을 요청한다. 서버는 요청을 받고 응답을 보낸다.
- 2. 클라이언트는 요청 메세지를 TCP 소켓에 넣는다.
- 3. 서버는 받아서 처리 후 응답 메세지를 TCP소켓에 넣고
- 4. 서버는 TCP 커넥션을 종료한다.
- 5. 클라이언트는 응답을 받아 화면에 표시하고 추가 오브젝트를 위해 1~4를 반복한다.
- 어느 정도의 시간이 소모될까?
- 커넥션 생성에 1 RTT, 원하는 오브젝트를 받기 위해 1 RTT가 필요하다.
- 따라서 오브젝트 하나당 2 RTT가 필요하고, 100개의 오브젝트를 받아야 한다면 200 RTT나 필요하다
- 그래서 1.1버전부터는 Persistent Http를 사용한다.
- 그럼 병렬로 TCP 연결을 생성한다면?
- TCP는 신뢰성있는 데이터 전송을 위한 버퍼와 소켓을 가지고 있다.
- 여러개의 TCP 연결을 생성한다면 소켓과 버퍼가 운영체제에 부담을 많이 주게된다.
Persistent Http
- 서버가 Response를 보낸 후에도 TCP 커넥션을 유지한다.
- 커넥션 연결에 1 RTT, 여러 오브젝트들을 전송하는데 약 1RTT가 걸리므로
- 여러개의 오브젝트들을 보낸다해도 2RTT + a의 시간이 걸린다.
- Http 1.1 부터 지원한다.
Http Message : Request와 Response
- Http는 무엇일까?
- Http는 HyperText Tansfer Protocol의 약자이다. 어려운 기술같아 보이지만 어쨌든 Protocol, 규칙이다. 웹(WWW)에서 데이터를 주고받기 위한 프로토콜이다. 주로 html문서를 주고 받는다.
- 그럼 웹은 뭘까? 인터넷상에서 정보교환을 위한 서비스이다. 웹은 인터넷의 여러 서비스 중 하나이다.
- Http 메세지의 두 종류, Request와 Response
- Http는 정보를 주고 받기 위한 프로토콜이다. http는 요청(Request)하면 준다(Response).
- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- Request : 정보를 요청하는 메세지. ASCII로 되어 있다. American Standard Code for Information Interchange의 약자다. 컴퓨터는 숫자로 연산하므로 숫자와 문자를 연결하는 규칙이다. 즉 사람이 읽을 수 있는 문자로 표현된다. ASCII에서 A는 American이니까 영어다.
- ----------------------------------------------------------------------------------------------------------------------------------------------
- Request Line : Request의 첫 줄.
- - Method : GET or POST 등 어떤 요청인지 적는다.
- - Target : 호스트의 어떤 무엇을 필요로 하는지 적는다.
- - Http Version : 무슨 버전을 사용하는 지 적는다.
- -------------------------------------------------------------------------------------------------------------------------------------------------
- Header Line : Http 메세지에 대한 정보가 있다.
- - Host : 메세지를 받는 호스트의 URL
- - User-agent : 요청을 보내는 측의 정보
- - Connection : 요청을 받고 커넥션을 유지할 것인지. ex) keep-alive
- 등등등
- -----------------------------------------------------------------------------------------------------------------------------------------------
- Entity body : 메세지의 본문이 들어간다. POST 타입의 경우에 여기에 뭔가가 써진다...!
- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- GET과 POST의 차이
- GET과 POST는 Request message의 대표적인 두가지 메소드다.
- GET : 파라미터를 URL에 ?로 연결하여 보낸다. 조회용 메서드이고, 멱등하며 캐시 가능하다.
- POST : Parameter를 Entity Body에 실어서 보낸다. 서버에 처리를 요청할 때 사용하는 메서드이다.
- 로그인 할 때 아이디와 비밀번호를 어느 메소드로 보내면 좋을 지 생각해보자.
- -------------------------------------------------------------------------------------------------------------------------------------------------
- 다른 메소드들
- HEAD : 테스트 목적으로 본문을 받을 필요가 없을 때 사용한다.
- PUT : File Upload를 하고 싶을 때 사용한다
- DELETE : File Delete를 할 때 사용한다.
- PUT과 DELETE는 관리자만 사용할 수 있는 메소드다.
- -------------------------------------------------------------------------------------------------------------------------------------------
- Response : 요청에 응답하는 메세지이다.
- Status Line: Status Code와 Status text가 실린다.
- Status Code - Status Text 의 의미: 200 OK / 301 Move Permanently / 400 Bad Request / 404 Not Found / 505 Http Version not Supported
- ----------------------------------------------------------------------------------------------------------------------------------------------
HTTP 메서드 내용은 강의 내용을 그대로 정리했기 때문에 실제 사용과는 다르다.
간단히 설명하자면
Get - 조회용 메서드. 서버 자원 변경 X, 캐시 가능, 본문이 있을 수 있으나 서버에서 처리하지 않을 수 있음. 멱등
Post - 서버에게 처리를 요청하는 메서드, 서버 자원 변경 O, 캐시 하지않음, 멱등하지 않음
Put - 서버 자원 대체, 멱등하지 않음
Patch - 서버 자원 일부 대체, 멱등하거나 않게끔 설계 가능
Delete - 서버 자원 삭제, 멱등
더 자세한 내용은 Rest api를 참고하자.