그림으로 배우는 Http & Network Basic

업데이트:

웹과 네트워크의 기본

웹 브라우저의 주소입력란에 URL을 입력하게되면 어딘가에 해당 주소에 대한 정보를 요청하게되고 요청을받은곳에서는 응답을 돌려주게된다. 이때 요청하는쪽을 클라이언트 받는쪽을 서버라고 칭한다. 클라이언트와 서버의 개념은 상대적인 부분이라고 볼 수 있다.

이렇게 클라이언트에서 서버로의 요청과 응답에 대한 약속, 규칙 등을 결정하는것은 HTTP(HyperText Transfer Protocol) 라고 불리우는 프로토콜이고 웹은 누구나 어디에서 언제든지 상호간에 연결이되어있어야하고 접근이 가능해야 하기때문에 저런 규격 또는 약속이 필요한것이다. 이러한 HTTP를 이해하려면 TCP/IP 프로토콜에 대한 이해가 필요한데 HTTP 또한 이 TCP/IP 의 프로토콜에 포함된다고 볼 수 있다.

TCP/IP 는 계층으로 관리되며

  • 애플리케이션 계층
  • 트랜스포트 계층
  • 네트워크 계층
  • 링크 계층

이렇게 총 4계층으로 나뉘어진다. 이렇게 별도로 계층이 나뉘어져있는 이유는 관리의 편의성 때문이다. 변경사항에 대해서 해당하는 계층의 정보만 변경하는식으로 각 계층의 내부는 자유롭게 설계할 수 있다.

TCP/IP 통신의 흐름

TCP/IP 는 통신을 할때 계층을 순서대로 거쳐 통신을 진행하는데 이때 클라이언트측은 애플리케이션 계층에서부터 내려가고 서버측은 링크계층으로부터 올라가며 통신을 진행하게 된다.

클라이언트측에서 HTTP 로 요청을 보내면 트랜스포트 계층에서 포트번호를 붙여서 네트워크 계층에 전달하게되고 네트워크 계층에서는 MAC 주소를 추가해서 링크계층에 전달하면 송신할 준비가 완료된것이다.

수신받는 서버측에서는 이렇게 캡슐화된 요청에 대해서 계층을 거칠때마다 사용한 헤더를 삭제해나가고 마지막엔 HTTP 데이터만 애플리케이션 계층에 전달되게 된다.

HTTP

클라이언트와 서버간의 통신을 하게되는데 이때 리소스를 요청하는쪽이 클라이언트, 요청을 받아 처리하여 해당 리소스를 전달해주는쪽이 서버라고 칭한다.

리퀘스트에는 일정한 포맷이 정해져있는데 method (GET, POST, DELTE 등) 가 포함되어야 하고 리퀘스트 URI와 프로토콜 버전 그리고 리퀘스트 헤더필드 정보들이 필요하게된다.

서버에서 받아온 리스폰스에는 리퀘스트의 처리에 대한 응답을 알려주는 응답코드와 돌려줄 데이터나 리소스가있다면 바디에 그와관련된 데이터를 포함하여 돌려주게된다.

지속 연결로 접속량을 절약

HTTP는 stateless프로토콜로 상태를 저장하거나 갖고있지 않는다. 초기버전에서는 통신을 할때마다 TCP에 의해 연결과 종료를 해야만했고 단순 텍스트만 보내는 정도였기때문에 충분한 사용법이었다. 하지만 사용자가 늘어나고 이미지가 포함되는 경우 매번 통신이 될때마다 새롭게 해당 리소스들을 내려받는 기능을 수행하게되고 이는 서버에 과부하를 만들 수 있는 요인이 되었다.

따라서 지속연결성이 필요했고 명시적으로 연결을 종료하지않는이상 TCP 연결을 계속 유지하도록 만들었다. 하지만 이 지속연결에서도 개선해야할점이 있었는데 한번에 하나의 요청작업만 처리할 수있다는것이다. 여러개의 요청이 있을경우 먼저 요청된것의 응답이 완료되어야 다음 작업이 수행되었기에 이점을 개선하기위해 파이프라인화를 통해서 응답을 기다리지않고도 바로 다음 요청에 대한 전달이 가능하다.

HTTP는 상태를 가지않는 프로토콜로 이로인한 문제점은 인증이 필요한 페이지에 접근할때마다 매번 로그인을 해줘야하는 상황이 발생 할 수 있다. 이러한 문제를 해결하기위헤 Cookie 라는 시스템이 도입되었고 Set-Cookie 라는 헤더필드에 쿠키를 클라이언트에서 상태를 계속 보존할 수 있게 되었다. 때문에 클라이언트에서는 서버에 요청할때 헤더에 쿠키값을 넣어 함꼐 전달하고 서버는 이 쿠키로 클라이언트를 체크하고 로그인을 유지하거나 서로 다른 클라이언트의 접속이라는것을 인지하게된다.

댓글남기기