안녕하세요, 여행벌입니다.

오늘은 가장 중요한 프로토콜인 HTTP 에 대해서 정리해보겠습니다.


 [ 웹 ( Web ) ]

 WWW( World Wide Web ) 은 인터넷에 연결된 사용자들이 서로 정보를 공유할 수 있는 공간을 의미합니다.

 인터넷이랑 웹은 다른 개념으로 인터넷상의 하나의 서비스가 웹입니다. 이러한 WWW를 구성하는 기술로, 문서 기술 언어로는 HTML, 문서 전송 프로토콜로는 HTTP, 문서의 주소 지정 방법으로는 URL 을 사용 중입니다.

프로토콜

컴퓨터와 네트워크 기기가 상호간에 통신하기 위해서는 서로 같은 방법으로 통신을 해야한다. 어떻게 상대를 찾고, 어떻게 상대에게 이야기를 시작하고, 어떠한 언어로 이야기를 하며, 어떻게 이야기를 종료할까와 같은 규칙이 프로토콜이다.

[ HTTP 프로토콜 역사 ]

 WWW 에서 문서 전송 프로토콜로 처음 등장했다. HyperText MarkUp Language 인 HTML을 전송하는 프로토콜로 시작했지만, 현재는 HTTP 메시지에 모든 것을 전송하고 있고 심지어 서버간에 데이터를 주고 받을 때도 대부분 HTTP를 사용한다.

  • HTTP/0.9 1991년 GET 메서드만 지원, HTTP 헤더X
  • HTTP/1.0 1996년 메서드, 헤더 추가
  • HTTP/1.1 1997년 현재에도 가장 많이 사용되고 있는 버전, TCP 프로토콜 기반
    • RFC2068(1997) -> RFC2616(1999) ->RFC7230~7235(2014)
    • 2014년도에 개정된 버전이 현재 사용중인 버전이다.
  • HTTP/2 2015년 TCP 프로토콜 기반, 성능 개선
  • HTTP/3 ~ING TCP 대신에 UDP를 사용해서 성능 개선에 초점

[ 클라이언트 서버 구조 ]

 HTTP는 기본적으로 클라이언트 - 서버 구조로 작동해서 역할이 명확히 구분되어있다. 리소스를 요청하는 쪽이 클라이언트, 리소스를 제공하는 쪽이 서버가 된다. 역할이 명확히 구분되어있으므로 서로 상대가 무슨 일을 하는지 신경 쓸 필요가 없다. 리소스 요청을 리퀘스트, 리소스 반환을 리스폰스 라고 한다.

참고 : 리퀘스트 없는 리스폰스는 없다!

[ 무상태프로토콜 ( stateless ) ]

 HTTP 프로토콜은 상태를 유지하지 않는 스테이트리스 프로토콜입니다. HTTP 프로토콜 독자적으로, 리퀘스트와 리스폰스를 교환하는 동안에 상태를 관리하지 않습니다. 결국, HTTP 프로토콜 레벨에서는 이전에 보냈던 리퀘스트나 이미 되돌려준 리스폰스에 대해서는 전혀 기억하지 않습니다.

  • 장점 : 서버 확장성이 높음(스케일 아웃) --> 서버를 확장해야될 때 기존의 상태를 기억할 필요가 없다!
  • 단점 : 클라이언트가 추가 데이터를 계속 전송해줘야됨.

참고 !

웹이 발전함에 따라 스테이리스 특성만으로는 처리하기 어려운 상황이 생겨서 이를 해결하는 쿠키, 세션이 등장함!

[ 비연결프로토콜 ( connectionless ) ]

 HTTP 프로토콜은 리퀘스트가 발생하면 연결을 하고 리스폰스를 보낸 후 연결을 끊습니다.

 따라서, 서버 자원을 매우 효율적으로 사용할 수 있습니다. 리퀘스트를 요청한 모든 클라이언트와 계속 연결 상태를 유지하게 된다면 추가 리퀘스트를 보내지 않는 클라이언트들이 서버 자원을 낭비하게됩니다.

 

ex) 쇼핑몰 사이트에 들어가서 옷을 검색!(리퀘스트) --> 검색결과(리스폰스) --> 결과로 반환된 옷을 구경하면되지 연결상태 필요 X

[ 지속연결 ( Persistent Connections ) ]

HTTP 프로토콜은 비연결프로토콜이므로 트랜스포트, 네트워크 계층에서 TCP, IP 프로토콜을 통해 매번 연결을 새로 맺어야하는 문제가 있습니다. 또, 요즘은 하나의 웹 페이지에서도 HTML, CSS, JS 등 많은 리소스가 다운로드되어야하므로 매번 새로운 연결을 하는 것은 비효율적입니다.

network02_1

이 문제를 해결하기 위해 HTTP/1.1 에서는 어느 한 쪽이 명시적으로 연결을 종료하지 않는 이상 TCP 연결을 계속 유지하는 지속연결 기능을 제공해줍니다.

network02_2


이상으로, HTTP 기본 내용 정리를 마치겠습니다.

'Dev > Network' 카테고리의 다른 글

[Network] HTTP_Response_상태코드  (0) 2021.04.23
[Network] HTTP_Message  (0) 2021.04.22
[Network] HTTP_Method  (0) 2021.04.21
[Network] TCP / UDP 프로토콜, 3way / 4way handshake  (0) 2021.04.19
[Network] 인터넷, IP프로토콜  (0) 2021.04.16

+ Recent posts