저의 velog에 작성된 글은 모두 저의 주관적인 생각 및 이해를 바탕으로 작성된 글이므로
정확하지 않은 내용을 있을 수 있음을 알립니다.
[교재] Computer Networking : A Top-Down Approach 8th
저번 시간 application layer의 전체적인 구조와 방식에 대해 알아봤는데요! 오늘은 application 작동 방식 중 하나인 server-client 구조에서 사용되는 protocol인 HTTP에 대해 알아보도록 하겠습니다. 내용이 조금 많아서 2회차로 나눠서 진행하려고 합니다!
HTTP : HyperText Transfer Protocol
Hypertext : 웹페이지를 다른 페이지로 연결하는 링크, 즉 HTTP는 다른 페이지로 연결할 때 필요한
규칙, 규약을 말한다.
여러분들이 많이 들어보셨을 Web은 HTTP와 떼놓을 수 없는 관계에 있는데요. Web은 server에 저장되어 있는 HTML file, image 등 다양한 file을 가지고 있습니다. 이렇게 다양한 file, page를 요청하고 응답받기 위해서는 file과 page에 대한 protocol이 필요한데요. 이것이 바로 HTTP입니다.
위의 그림은 HTTP가 작동하는 전반적인 과정을 설명합니다. 앞서 말씀드린 것 처럼 HTTP는 server-client 방식에서 작동하므로, client는 server에 request하고, server는 request message에 맞게 response합니다.
HTTP는 크게 두 가지의 특징을 가집니다.
첫 번쨰는 HTTP는 'stateless'입니다. 이 의미는 client가 이전에 website에서 뭘 했는지 기억을 못 한다는 부분인데요. 이 문제를 해결하기 위해 다음 시간에 배울 cookie라는 개념을 사용하게 됩니다.
다음으로 HTTP의 특징 두 번째는 TCP를 사용한다는 점인데요. 조금 더 깊게 알아보도록 하겠습니다.
TCP는 Transfer protocol 중 하나로 data를 전송하는 방식을 나타낸다.
TCP의 특징으로는 data-integrity, connection-oriented, flow control,
congestion control 등이 있다.
뒤에서 조금 더 집중적으로 알아보겠지만 HTTP가 TCP를 이용해 작동하는 전체적인 과정은 다음과 같습니다.
HTTP는 두 가지의 형태를 가지고 있습니다.
여기서 persistent는 '완고한', '끈질긴'이라는 뜻을 가지는데, 왜 이런 표현을 썼는지는 뒤애서 내용을 이해하시면 이해하실 수 있습니다.
Non-persistent
Non-persistent의 전체적인 과정은 다음과 같습니다.
Persistent
Persistent의 전체적인 과정은 다음과 같습니다.
금방 확인하실 수 있겠지만, 가장 큰 차이는 하나의 object만 보내냐, 여러 개 보내냐의 차이입니다. 정확한 과정은 다음 챕터에서 확인해보겠습니다.
위의 사진은 Non-persistent HTTP의 과정을 보이고 있습니다.
첫 cycle에서는 TCP connection을 request하고 accepts하는 과정입니다. 두 번째 cycle은 object를 보내는 과정인데요. 저희가 집중해서 봐야할 부분은 두 번째 cycle입니다.
3번을 보시면 client에서 요청한 object를 response하고 4번에서 TCP connection을 닫아버리죠. Non-persistent는 위에서 확인했듯이 하나의 object만 보낼 수 있기 때문에 object를 하나 response할 때마다 TCP connection, request, response를 반복해야 합니다. 상당히 비효율적이죠.
Non-persistent의 response time에 대해 알아보겠습니다.
위의 그림은 Non-persistent의 response time을 보여줍니다. RTT는 client의 request와 server의 response까지 걸리는 시간을 의미합니다. 위에서 확인했지만 Non-persistent의 경우 object 하나 당 위의 과정을 반복해야합니다.
따라서 object 당 2RTT + file transmission time 이라고 확인할 수 있겠죠. 여기서 file transmissino time은 object가 transmit 되기 까지의 시간을 나타내는데, 이는 기기나 환경에 따라 변할 수 있겠죠?!
Non-persistent HTTP response time = 2RTT + file transmission time
Persistent HTTP는 Non-persistent HTTP의 단점을 보완한 protocol이라고 생각하시면 됩니다. Non-persistent HTTP의 치명적인 단점은 object를 받을 때마다 TCP connection와 request를 반복해야 하기 때문에 response time이 오래걸린다는 점인데, Persistent는 TCP connection와 request를 반복하지 않습니다.
과정에서의 가장 큰 차이점은 object를 받을 때마다 TCP connection을 끊는Non-persistent HTTP와는 달리 Persistent HTTP는 TCP connection 후 모든 object의 response가 끝날 때까지 TCP connection을 끊지 않습니다.
따라서 Persistent HTTP의 response time은 TCP connection 한 번, object request 여러 번을 한번에 하기 때문에 2RTT가 걸립니다.
Persistent HTTP response time = 2RTT
HTTP message는 client와 server가 request, response를 위해 주고 받는 message라고 보실 수 있는데요. 여기에는 크게 4가지의 method가 있습니다.
각 method의 역할은 다음과 같습니다.
POST method
새로운 내용을 server에 올릴 때 사용하는 method
예를 들어 velog 글을 하나 새로 작설할 때 POST method를 이용해 server에 올린다.
GET method
server에 있는 내용을 불러올 때 사용하는 method
예를 들어 velog에 있는 게시글을 클릭하면 GET method를 통해 게시물을 가져온다.
HEAD method
header에는 특정 URL에 대한 정보가 담겨 있는데, GET method와 함께 사용된다.
예를 들어 'velog.id/...' 글 불러와! 라고 할 때 'GET velog.id/...' 이런 식으로 사용한다.
PUT method
이미 server에 존재하는 내용을 수정하고자 할 때 사용하는 method
예를 들어 특정 글에 있는 이미지를 추가 및 변경하고자 할 때 PUT method를 사용한다.
다음은 실제 requeset, response message를 보여준다.
위의 message를 보면 GET method를 사용한다. GET은 client가 server에 요청하는 것이므로 client의 request message라는 것을 알 수 있다.
위의 message는 별다른 method 없이 status line을 보여준다. 이는 server의 response message이다. request message에 문제가 없어 OK라는 message와 함께 response한다.
다음은 HTTP response status code를 보여준다. 참고하면 좋을 것이다.
오늘은 HTTP가 뭐고 어떤 종류가 있고, 어떻게 작동하는지 알아보았다. 다음 시간에는 HTTP와 함께 사용되고 한 번쯤은 들어봤을 cookie에 대한 개념과 조금 더 효율적인 Web 사용을 위해 사용되는 Web cash에 대한 내용을 알아볼 것이다. 오늘도 수고 많으셨습니다 :)