ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2일차 - 간단한 프로토콜 HTTP
    CS지식/네트워크 2021. 4. 19. 21:49

    오늘은 HTTP의 구조에 대해 배웠다.

    HTTP를 통한 통신의 특징을 배울 수 있었고 HTTP를 보완하기 위한 쿠키에 대해 알게 되었다.

     

    1. HTTP 통신

    HTTP의 통신의 기본적인 구조는 클라이언트와 서버간의 통신이다.

    클라이언트는 리소스를 요구하는 쪽이고 서버는 요구한 리소스를 제공하는 쪽이다.

    이렇게 클라이언트라 리소스를 요구할 때는 리퀘스트(Resquest)를 송신하고

    서버는 리소스를 제공할 때 리스폰스(Response)로 보낸다.

    여기서 알아두어야 할 것은 반드시 리퀘스트를 보내는 클라이언트로부터 통신이 시작되고 서버는 리퀘스트 없이 리스폰스를 보낼 일은 없다.

     

    HTTP는 상태를 계속 유지하지 않는 stateless 프로토콜이다.

    이렇게 보면 잘 이해가 되지 않을 것이다.

    쉽게 말해서 클라이언트가 이전에 보낸 리퀘스트나 서버가 보냈었던 리스폰스를 기억해두지 않는다는 것이다.

    이미 요청했던 것에 대한 답변을 기억하고 있으면 나중에 다시 쓸 일이 있을 경우 편할텐데 왜 이러한 방식일까?

    이유는 많은 데이터를 빠르고 확실하게 처리하는 범위성을 확보하기 위해서이다.

    기억해두고 있는 것에 대한 신뢰성도 보장해야하고 기억한 것을 찾는 것보다 다시 묻는 것이 더 빠르고 확실하다는 의미인 것같다.

    하지만, 이러한 stateless 특성만으로는 처리하기 힘든 경우가 나타나기 시작했다.

    예를 들어 우리가 홈페이지에 접속해서 로그인을 했다고 가정해보자.

    만약, stateless인 경우에는 홈페이지 안에서 특정페이지를 누르고 뒤로가기를 하면 로그아웃이 될 것이다.

    이러한 경우 매우 불편해지고 로그인이 유지됐으면 좋겠다는 바램이 생긴다.

    그래서 쿠키라는 기술이 도입되었다.

     

     

    2. HTTP 메소드

    메소드란 서버에 어떠한 것은 요구하는지를 표현하는 것이라고 생각하면 된다.

    책에서는 HTTP/1.1기준 메소드에 대해서 배웠다.

    1) GET

    GET은 리소스를 가져올 수 있도록 요구하는 메소드이다.

     

    2) POST

    POST는 엔티티를 전송하기 위해 사용하는 메소드이다.

    엔티티(entitiy)는 데이터베이스에서 배운 용어로 개체라는 단어가 더 친숙할 수도 있다.

    쉽게 말해서 정보로 이해하고 넘어가면 쉬울 것이다.

     

    3) PUT

    PUT은 파일을 전송하기 위해 사용하는 메소드이다.

    PUT메소드는 인증기능이 없어 보안 상의 문제로 일반적인 웹에서는 사용하지 않는다.

    왜냐하면 아무나 PUT메소드를 통해 이상한 파일들을 서버로 전송하면 큰 일이 일어날 수 있기 때문이다.

     

    4) HEAD

    HEAD는 GET메소드와 같은 기능을 하는 메소드이다.

    하지만 서버에서 메시지 바디는 돌려주지 않고 헤더만 보내준다.

    URI 유효성과 리소스 갱신 시간을 확인하는 목적 등으로 사용된다.

     

    5) DELETE

    DELETE는 파일을 삭제하기 위해 사용하는 메소드이다.

    DELETE도 PUT과 마찬가지로 인증기능이 없어 일반적인 웹에서는 사용하지 않고 인증 기능과 함께 사용되는 경우는 있다.

     

     

    3. 지속 연결(Persistent Connections)

    HTTP 초기에는 HTTP 통신을 할 때마다 TCP의 연결과 종료가 필요했다.

    즉, 이미지 하나를 불러오려면 TCP연결하고 HTTP통신하고 TCP종료하고 또 하나를 불러오려면 반복을 해야했다는 것이다.

    처음에는 이렇게 통신이 이루어져도 문제가 없었지만 지금 홈페이지를 보면 접속했을 때 광고, 이미지, 텍스트 등 수많은 리소스가 요구된다.

    이렇기에 지속 연결이라는 방법이 나왔다.

     

    지속 연결의 특징은 한 쪽이 연결을 종료하지 않는 이상 TCP연결을 유지할 수 있는 것이다.

    이와 같은 특징으로 TCP연결과 종료를 반복했을 때에 비해 오버헤드가 줄고 서버의 부하가 줄어들 수 있다.

     

    지속 연결에서 여러 리퀘스트를 보내기 위해서 파이프라인(HTTP pipelining)화가 필요하다.

    파이프라인은 간단하게 말하면 하나의 통로라고 생각하면 된다.

    (원기둥같은 파이프가 생겨 그들만의 도로를 만들어줬다라고 생각하면 편할 거 같다.)

    파이프라인화를 하게 되면 리스폰스를 기다리지 않고 리퀘스트를 순차적으로 보낼 수 있다.

    단순히 지속 연결을 했을 경우에는 리퀘스트를 보내고 리스폰스를 기다린 후 리퀘스트를 보낼 수 있지만

    파이프라인화를하면 더 빠르게 통신을 할 수 있는 것이다!!

     

     

    4. 쿠키(Cookie)

    쿠키는 리퀘스트와 리스폰스에 쿠키 정보를 추가해서 클라이언트의 상태를 파악하기 위한 시스템이다.

    쿠키는 처음에 서버 측에서 리스폰스를 통해 보내져 클라이언트에 보관한다.

    이후 클라이언트가 같은 서버로 리퀘스트를 보내면 자동으로 쿠키와 함께 보내진다.

    이렇게 되면 서버가 리퀘스트에 있는 쿠키의 정보를 보고 기록을 확인해 이전 상태를 알 수 있게 된다.

     

     

     

    댓글

Designed by Tistory.