Home [네트워크] HTTP는 무엇일까?
Post
Cancel

[네트워크] HTTP는 무엇일까?

2월 1주차 스터디 발표 자료📖
이번달 스터디 목표는 기술면접 준비입니다! 이번주의 분량은 10개 주제 정리하기..🥲
네트워크 개념은 필수로 알아야하니 HTTP부터 차근차근 정리해보려고합니다.

HTTP의 정의


Http는 Hyper Text Transfer Protocol의 약자이며, 인터넷 상에서 데이터를 주고 받기 위한
애플리케이션 계층의 프로토콜이다.

➔ HTTP 메세지에 거의 모든 형태의 데이터(리소스)를 담아 전송할 수 있다.
서버간에 데이터를 주고 받을 때도 대부분 HTTP를 사용한다.
➔ 현재 가장 많이 사용하는 HTTP 버전은 1.1이며, TCP가 기반인 프로토콜이다.
전송 가능한 데이터타입 : HTTP, TEXT, 이미지, 음성, 영상, 파일, Json, XML(API) 등

HTTP 1.1은 TCP기반이라는데 TCP는 무엇일까? 🤔TCP?
  • TCP(Transmission Control Protocol)?
    • 전송 계층의 연결지향 프로토콜이다.
    • IP의 한계인 비연결성과 신뢰성을 해결하였다.
    • 신뢰성이란 데이터의 순서전달을 보장하는 것을 말한다.
  • TCP의 특징?
    1. 연결지향(3 way handshake)
      ➔ 그림과 같이, 3번의 메세지를 통해 client-server 모두 연결 요청이 수락되면, 데이터 전송을 한다. tcp feature1
    2. 데이터 전달 보증
      ➔ 데이터 전송에 대한 응답이 오지않는다면, 패킷 유실로 판단하여 재전송을한다. tcp feature2
    3. 순서 보장
      ➔ 패킷의 도착 순서가 맞지않다면, 해당 순번부터 재요청한다.
      tcp feature3

HTTP의 특징


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

  • 요청,응답 구조
  • 클라이언트는 서버에 요청을 보내고, 서버에서 응답이 올 때까지 대기한다.
  • 서버는 클라이언트의 요청에 대한 결과를 만들어서 응답을 한다.
    http feature1

2. Stateless (무상태 프로토콜)

  • 서버가 클라이언트의 상태(데이터)를 보존하지 않는다.
  • 웹 애플리케이션 설계 시, 최대한 무상태로 설계해야한다.
  • 장점? 서버의 확장(스케일 아웃)이 용이하다.
  • 단점? 클라이언트가 필요한 데이터를 계속 전송해야한다. http feature2

2-1.🤔 Stateful과 Stateless?

  • stateful은 서버가 클라이언트의 데이터를 유지한다.
  • 서버 장애가 발생하면, 클라이언트는 모든 정보를 재입력해야하는 불편함이 존재한다.
  • 일반적으로 브라우저의 쿠키와 서버 세션등을 사용해서 상태를 유지한다. stateful

3. 비연결성

  • 말 그대로 서버와 클라이언트의 연결을 유지하지 않는 모델이다.
  • 몇 초 단위 이내의 빠른 응답 속도를 가지고있다.
  • 장점? 서버 자원을 효율적으로 사용할 수 있다.
  • 단점? 요청마다 TCP/IP 연결(3 way handshake)을 맺어야하는 시간이 추가된다. ➔ 지속 연결로 해결함
    비연결성
  • 지속연결은 뭘까?
    서버와의 연결을 몇 초간 유지하도록 설정하여, 해당 시간동안 필요한 리소스를 다운받는다.
    지속연결

3-1.🤔 연결성과 비연결성?

  • 연결성이란 서버와 클라이언트의 연결을 유지하는 모델이다.
  • 단점: 현재 요청하고있지않은 서버와도 연결을 유지하기 때문에 자원이 낭비된다.
    연결성

4. HTTP 메세지

➔ HTTP는 HTTP 메세지에 모든 것을 전송한다.

  • HTTP 메세지 구조?
    시작라인,헤더,공백라인,메세지 바디로 구성되어있다. 메세지 구조
  • HTTP 메세지 - 요청 메세지?
    ➔ 요청 메세지도 message body를 가질 수 있으며, 전송할 데이터가 있을 때 사용한다.
    요청 메세지 구조

    * 요청 메세지의 start-line (request-line)?
    ➔ 구성 : method + SP(공백) + request-target + SP + HTTP-version CRLF(엔터)
    요청메세지-시작

    1. method?
    HTTP 메서드이며, 서버가 수행해야 할 동작을 지정한다.
    종류: GET, POST, PUT, DELETE 등
    2. request-target?
    요청 대상이며, absolute-path?query(절대경로+?쿼리[생략가능])의 형태를 띈다.
    3. HTTP Version?
    HTTP 버전을 나타낸다.

  • HTTP 메세지 - 응답 메세지?
    응답 메세지 구조

    - 응답 메세지의 start-line (status-line)
    ➔ 구성 : HTTP-Version + SP(공백) + status-code(상태코드) + reason-phrase(상태코드 설명글) + CRLF
    응답메세지-시작

    1. HTTP Version?
    HTTP 버전을 나타낸다.
    2. HTTP 상태코드?
    요청의 성공, 실패를 나타낸다.
    (200대 성공 , 400대 클라이언트 요청 오류, 500대 서버 내부 오류)
    3. 이유 문구?
    사람이 이해할 수 있는 짧은 상태 코드 설명 글

  • HTTP 헤더
    ➔ 구성 : field-name”:” OWS(띄어쓰기 허용) field-value OWS
    • HTTP 전송에 필요한 모든 부가정보가 담겨있다.
      ex. 메세지 바디의 내용, 메세지 바디의 크기, 인증 정보, 요청 클라이언트(브라우저) 정보 등
    • 필요 시 임의의 헤더를 추가할 수 있다.
      HTTP 헤더
  • HTTP 메세지 바디
    • 실제로 전송할 데이터
    • HTML 문서, 이미지, 영상, JSON 등 byte로 표현할 수 있는 모든 데이터를 전송할 수 있다.
      HTTP 메세지 바디

5. 단순하고, 확장이 가능하다.

  • HTTP 메세지는 단순하다.
  • 단순하기에 확장이 가능하고, 이러한 확장성 덕분에 현재는 하이퍼텍스트 문서 뿐만아니라 여러 형태의 데이터도 전송이 가능하다.
This post is licensed under CC BY 4.0 by the author.