상세 컨텐츠

본문 제목

HTTP 웹 기본 지식 모든것이 HTTP

Coding/Network

by hwlink 2022. 3. 18. 20:00

본문

강의 '모든 개발자를 위한 HTTP 웹 기본 지식'를 듣고 학습한 내용을 개인적으로 정리한 글 입니다.

📌 HTTP Hyper Text Transfer Protocol

  • 처음엔 하이퍼텍스트 전송용이지만 현재는
  • HTML, Texxt
  • Image, 음성, 영상,파일
  • JSON, XML (API)
  • 거의 모든 형태의 데이터 전송 가능
  • 서버간에 데이터를 주고 받을 때도 대부분 HTTP 사용
  • 지금은 HTTP 시대이다.
  • 심지어 모바일게임에선 HTTP로 송수신하기도 한다.

지금 가장 많이 쓰고있는 것은 HTTP/1.1 이고 HTTP/2 와 HTTP/3은 성능개선에 초점을 맞췄다.
HTTP는 단순하다. 메세지도 단순하다.

📌 HTTP 특징

  1. 클라이언트 서버 구조
  2. 무상태 Protocol(Stateless) / 비연결성
  3. HTTP 메시지
  4. 단순하고 확장이 가능하다.

📌 클라이언트 서버 구조

  • 무상태 프로토콜 (스테이스리스)
  • 비연결성
  • HTTP 메시지

  • 클라이언트, 백엔드 양쪽이 분리됨으로 독립적으로 진화가 가능하다
  • Request/ Response 구조
  • 클라이언트는 서버에 Request 후 응답을 대기한다.
  • 이후 서버에서는 요청에 대한 결과를 만들어 Response한다.
  • 클라이언트와 서버를 개념적으로 분리하였고 각자 집중고도화가 가능해졌다.

📌 Stateless 무상태프로토콜

  • 서버가 클라이언트의 상태를 보존하지 않는다.
  • Stateful 은 상태유지인데, Context를 유지해서 이미말한 데이터를 반복해서 전달하지 않아도된다.

    Why Use Stateless?

  • 같은 응답서버를 이용하면 이전상태를 보존하는것이 효율적일 수도 있겠다.
  • 하지만 응답서버가 변경된다면?
  • Context를 모르는 다른 서버가 응답을 하게되면 Stateful은 장애가 발생하게된다.
  • 하지만 상태를 보존하지 않기때문에 모든 데이터를 매번 가지고있는 Stateless 는 어떤 응답서버로 변경되고 추가되어도 장애발생이 없다. 즉, 의사소통에 문제가없다!
  • 따라서 클라이언트가 막 늘어나는 경우에도 무한증설이 가능해진다. * 스케일 아웃 : 수평확장

Stateless에도 한계

  • 알고있는 데이터까지 유지없이 매번 가지고 전달한다. 즉 데이터를 많이 쓴다.
  • 또한, 상태를 유지해야하는 경우
  • 예를 들어 로그인한 회원의 페이지를 회원이 계속 사용할 수 있도록 상태를 유지해야하는 경우가 생긴다면?
  • 이럴경우에는 일반적으로 쿠키와 세션을 이용해 상태를 유지하게된다
  • 단, 상태유지는 최소한만 사용하자. 이런 단점에도 웹 어플리케이션 설계시에는 최대한 무상태로 설계하는 것을 권장한다.

📌 Connectionless 비연결성

  • TCP/IP는 연결을 유지한다.
  • HTTP는 기본적으로 비연결성의 특징을 가지고 있다.
  • 연결 주고 받고 통신 끊는다.
  • 서버 유지 자원을 최소화한다.
  • HTTP는 기본이 연결을 유지하지 않는 모델이다.
  • 일반적으로 초 단위의 이하의 빠른 속도로 응답
  • 1시간 동안 수천명이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 수십개 이하로 매우 적음 (ex 웹 브라우저에서 연속해서 검색 버튼을 누르지는 않는다.)

기본적으로 비연결성 모델인 HTTP가 왜 요즘은 지속연결(Persistent Connections)로 이용되고 있을까?

  • 비연결방식은 사용이 끝나면 매번 연결을 종료하기 때문에
  • TCP/IP 연결을 새로 맺어야함 3way handshake 시간추가
  • 또한, 웹 브라우저 사이트를 이용할때 HTML만 있는게 아니라 용량이 큰 data나, CSS 등 수많은 자원이 있는데 비연결식으로 이용하게 되면 매번, 매순간 다운로드를 해야한다.
  • 이런 단점때문에 현재의 HTTP는 지속연결 Persistent Connections로 Connectionless의 문제를 해결하고 있다.
  • HTTP/2, HTTP/3에서 더 많은 최적화가 이루어져 있다.
    [##Image|kage@yO5zd/btrwgD04YKT/sr7P4yqRaiWz75WP4w4Wg1/img.png|CDM|1.3|{"originWidth":1056,"originHeight":510,"style":"alignLeft","width":500,"height":241,"filename":"스크린샷 2022-03-18 오전 12.18.18.png"}##

📌 HTTP 메시지

  • 바디 전에 공백 반드시 온다.

  • 시작라인

  • 요청메시지 - HTTP 메서드

  • 종류 : GET, POST, PUT, DELETE ...

  • 서버가 수행해야 할 동작 지정

    • GET: 리스트 조회
    • POST: 요청내역처리
  • 요청메시지 - 요청 대상

    • absolute-path[?query](절대경로[?쿼리])
    • 절대경로="/" 로 시작하는 경로

응답메시지

HTTP 헤더

HTTP 헤더 용도

  • HTTP 전송에 필요한 모든 부가정보
  • 예) 메시지 바디의 내용, 메시지 바디의 크기, 압축, 인증, 요청 클라이언트(브라우저)정보, 서버 애플리케이션 정보, 캐시 관리 정보
  • 표준 헤더가 너무 많음
  • 필요시 임의의 헤더 추가 가능

메시지 바디 용도

  • 실제 전송할 데이터
  • HTML 문서, 이미지, 영상, JSON 등 byte로 표현할 수 있는 모든 데이터 전송 가능
  • 단순함 확장 가능
  • HTTP 스펙 단순
  • 메시지도 매우 단순

관련글 더보기