[모든 개발자를 위한 HTTP 웹 기본 지식] - HTTP 기본

김나연·2022년 6월 19일
1

HTTP

목록 보기
3/3
post-thumbnail

모든 것이 HTTP?

  • HyperText Transfer Protocol
    하이퍼텍스트 전송 프로토콜은 웹 상에서 웹 서버 및 웹브라우저 상호 간의 데이터 전송을 위한 응용계층 프로토콜이다. 과거에는 HTML과 같은 하이퍼미디어 문서를 전송하기 위한 프로토콜이었지만 현재엔 거의 모든 형식의 데이터 전송이 가능해졌다.

HTTP 메시지에 모든 것을 전송

  • HTML, TEXT
  • IMAGE, 음성, 영상, 파일
  • JSON, XML
  • 거의 모든 형태의 데이터를 전송할 수 있다.
  • 서버간 데이터를 주고받을 때도 대부분 HTTP를 사용한다.

기반 프로토콜

HTTP/1.1, HTTP/2 : TCP를 기반으로 동작
HTTP/3 : UDP를 기반으로 동작

TCP 기반으로 동작하게 되면 3way-handShake 동작으로 인해 빠른 속도를 내지 못하기 때문에 UDP 기반으로 성능 최적화를 위해 HTTP/3가 나오게 되었다.

goole에 'hello'를 검색을 하면 네트워크 탭에서 어떤 프로토콜을 사용하는지 확인할 수 있다.

HTTP 특징

  • 클라이언트-서버 구조
    HTTP는 클라이언트가 요청을 생성하기 위한 연결을 연다음 응답을 받을때 까지 대기하는 전통적인 클라이언트-서버 모델을 따른다.

  • 무상태 프로토콜
    HTTP는 무상태 프로토콜이며, 이는 서버가 두 요청간에 어떠한 데이터(상태)도 유지하지 않음을 의미한다.

  • 비연결성을 가진다.

  • HTTP 메시지를 통해 통신한다.

  • HTTP는 단순하며 확장가능하다.

특징 1. 클라이언트-서버 구조

클라이언트 서버 구조를 갖추면 양쪽이 서로 독립적으로 동작하게 된다.
클라이언트 : UI와 사용성에 집중
서버 : 비즈니스 로직, 데이터에 집중

요청 - 클라이언트는 서버에 요청을 보내고, 응답을 대기한다.

응답 - 서버가 요청에 대한 결과를 만들어서 응답한다.

특징 2. 무상태 프로토콜

상태 유지(Stateful)

항상 같은 서버가 유지되어야 서버와 통신하던 클라이언트의 데이터가 보존되므로 클라이언트 1에는 서버 1이 유지되어야 한다.
통신하던 서버에 오류가 발생하거나 중간에 통신하는 서버를 변경하면 새로운 서버와 처음부터 다시 통신을 시작해야 한다.

무상태(Stateless)

클라이언트가 요청할 때 필요한 데이터를 모두 가지고 통신을 하기 때문에 서버에서 상태를 보관하지 않아도 된다.
무상태 프로토콜(Stateless)은 서버가 클라이언트의 상태를 보존하지 않기 때문에 서버 확장이 가능하다.

통신하던 서버에 오류가 발생하거나 중간에 통신하는 서버가 변경되어도 통신을 처음부터 시작할 필요가 없다.

<예시>

상태 유지(Stateful)

중간에 다른 점원으로 바뀌면 안되며, 만약 중간에 점원이 바뀔 경우엔 상태 정보를 미리 바뀔 점원에게 알려주어야 한다.

  • 점원이 바뀌지 않을 때

    	- 고객 : 이 노트북 얼마인가요?
    	- 점원 : 100만원 입니다.
    
    	- 고객 : 2개 구매할게요.
    	- 점원 : 200만원 입니다. 신용카드와 현금 중에 어떤 수단으로 결제하겠습니까?
    
    	- 고객 : 신용카드로 구매할게요.
    	- 점원 : 200만원 결제 완료되었습니다.
  • 점원이 중간이 바뀔 때

    	- 고객   : 이 노트북 얼마인가요?
    	- 점원 1 : 100만원 입니다.
    
    	- 고객   : 2개 구매할게요.
    	- 점원 2 : ? 무엇을 2개 구매하시나요?
    
    	- 고객   : 신용카드로 구매할게요.
    	- 점원 3 : ? 무엇을 신용카드로 결제하시나요?

무상태(Stateless)

중간에 다른 점원으로 바뀌어도 클라이언트(고객)이 모든 정보를 담고 있으므로 갑자기 고객이 증가하더라도 점원을 대거 투입할 수 있으며 이는 클라이언트 요청이 증가하더라도 서버를 대거 투입할 수 있다는 의미가 된다.

  • 점원이 바뀌지 않을 때

    	- 고객 : 이 노트북 얼마인가요?
    	- 점원 : 100만원 입니다.
    
    	- 고객 : 노트북을 2개 구매할게요.
    	- 점원 : 200만원 입니다. 신용카드와 현금 중에 어떤 수단으로 결제하겠습니까?
    
    	- 고객 : 노트북 2개의 결제를 신용카드로 구매할게요.
    	- 점원 : 200만원 결제 완료되었습니다.
  • 점원이 중간에 바뀔 때

    	- 고객   : 이 노트북 얼마인가요?
    	- 점원 1 : 100만원 입니다.
    
    	- 고객   : 노트북을 2개 구매할게요.
    	- 점원 2 : 200만원 입니다. 신용카드와 현금 중에 어떤 수단으로 결제하겠습니까?
    
    	- 고객   : 노트북 2개의 결제를 신용카드로 구매할게요.
    	- 점원 3 : 200만원 결제 완료되었습니다.

특징 3. 비연결성

클라이언트 - 서버의 연결을 유지하는 모델
연결된 클라이언트와 통신을 하지 않더라도 연결이 되어 있기 때문에 서버의 자원이 낭비된다.

클라이언트 - 서버의 연결을 유지하지 않는 모델
클라이언트와 필요한 통신이 끝나면 서버는 연결을 끊어 유지하지 않기 때문에 자원 낭비를 최소한으로 한다.

비연결성의 한계

  • 필요한 통신이 끝나면 연결을 끊기 때문에 통신을 다시 시작할 때는 TCP/IP 연결을 새로 맺어야 하며 이 과정에서 3way handshake 시간이 추가된다.
  • 웹 브라우저로 사이트를 요청하면 HTML 뿐만 아니라 자바스크립트, CSS, 추가 이미지 등 수 많은 자원이 함께 다운로드된다.

한계의 해결방법

  • HTTP 지속 연결 방법을 사용하여 TCP/IP 연결을 매번 새로해야하는 문제를 해결하였다.
기존 HTTP 연결 방식 HTTP 지속 연결 방식

특징 4. HTTP 메시지

HTTP 요청 메시지 HTTP 응답 메시지

HTTP 메세지의 구조

시작라인

  • HTTP 메서드, 요청 대상, HTTP 버전으로 구성된다.
  • HTTP 메서드의 종류는 GET, POST, PUT, DELETE 등이 있으며, 서버가 수행해야하는 동작을 지정하는 역할을 한다.
  • 요청 대상은 절대경로로, '/'로 시작한다.

헤더

  • 필드 이름과 필드 값으로 구성된다.
  • HTTP 전송에 필요한 모든 부가정보를 포함한다.

메시지 바디

  • 실제 전송할 데이터가 들어있다.
  • HTML 문서, 이미지, 영상, JSON 등 byte로 표현할 수 있는 모든 데이터를 전송 가능하다.

참조

https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC

profile
결국 무엇이든 해내는 사람 '김나연'입니다. 😎

0개의 댓글