3강 HTTP 기본

Donghun Seol·2022년 9월 3일
0

3강 HTTP 기본

3. HTTP 기본

3.1 모든 것이 HTTP

HTTP

  • HyperText Transfer Protocol
  • html, text, image, audio, video, file
  • json, xml
  • 거의 모든 형태의 데이터를 http로 전송한다.
  • 서버간에도 tcp를 직접 활용하는게 아니라 http를 사용한다. (대부분의 웹에서는)

HTTP 역사

  • HTTP/1.1 (1997) : 가장 많이 사용, 가장 중요
  • HTTP/2 (2015) : 성능개선
  • HTTP/3 진행중 : (UDP를 사용해 성능개선하려는 시도)

기반 프로토콜

  • TCP : HTTP/1.1, HTTP/2
  • UDP : HTTP/3 - UDP를 활용해 성능을 최대화 하려는 시도
  • 현재는 1.1 버전을 주로 사용중이지만 2,3 버전도 대중화되고 있는 중

HTTP 특징

  • 클라이언트 서버 구조
  • 무상태 프로토콜, 비연결성
  • http 메세지
  • 단순함, 확장 가능

3.2 클라이언트 서버 구조

클라이언트 서버 구조

  • Request, Response 구조
  • 클라이언트는 서버에 req 보내고 res를 기다린다.
  • 클라이언트 서버 구조의 장점
    • 비즈니스 로직과 데이터는 서버에, 클라이언트는 UI와 사용성에 집중
    • 클라와 서버가 독립적으로 진화할 수 있음(+ Stateless)

3.3 무상태 프로토콜

스테이스리스(Stateless)

  • 서버가 클라이언트의 상태를 보존하지 않음
  • 서버가 클라이언트와 이전 통신의 컨텍스트를 알지 못한다.
  • 컨텍스트 관리를 클라이언트가 수행한다.
  • 중간에 서버가 바뀌어도 클라이언트가 컨텍스트 관리하므로 통신에 문제 없다.
  • 서버의 수평확장(scale out) 유리

스테이트풀(Stateful)

  • 컨텍스트 관리를 서버가 수행한다.
  • 서버가 바뀌면 버그 발생

Stateless 실무적 한계

  • 단순한 서비스는 무상태 구현 쉽다.
  • 로그인 등 상태유지가 필요한 경우 쿠키와 세션을 조합해서 상태 유지
  • 상태 유지는 최소한으로만 사용한다.

3.4 비연결성

연결을 유지하는 모델

  • 연결을 지속적으로 유지시 서버 자원 소모됨

비 연결성

  • 요청과 응답이 끝나면 tcp/ip 연결 끊어버림
  • HTTP는 연결을 유지하지 않는 모델
  • 초 이하의 빠른 속도로 응답함

비 연결성의 한계와 극복

  • TCP/IP 연결 새로 해야됨 3way handshake와 종료의 오버헤드 발생
  • 자바스크립트 css 등 많은 자원이 함께 다운로드
  • 현재는 Persistant Connections로 문제 해결

서버 개발의 어려움

  • 저녁 6시 치킨 이벤트 → 수만명 동시 요청
  • 수강신청
  • 최대한 stateless하게 설계해야 대응 가능함

3.5 HTTP 메시지

모든 것이 HTTP

  • 요청 메시지와 응답 메시지 Untitled
  • 상태코드
    • 200 성공
    • 400 클라이언트 오류
    • 500 서버 오류

HTTP 헤더

  • 전송에 필요한 모든 부가정보
    • 버디의 내용, 바디 크기, 압축, 인증, 요청 브라우저, 서버 애플리케이션 정보, 캐시 관리 정보
  • 표준 헤더 필드가 매우 많음
  • 임의의 헤더 필드 정의 가능

HTTP 메시지 바디

  • 실제 전송할 데이터
  • byte로 표현 가능한 모든 데이터 전송 가능

단순하고 확장가능함

  • HTTP는 단순하고 스펙도 읽어볼만 하다.
  • HTTP 메시지도 매우 단순하다
profile
I'm going from failure to failure without losing enthusiasm

0개의 댓글