본문 바로가기
Devops

[HTTP] HTTP에 대하여

by heekng 2022. 5. 7.
반응형

HTTP에 대하여

HTTP 메시지는 웹 통신 환경의 모든 것을 전송한다.

  • HTML, TEXT와 같은 문자열
  • IMAGE, 음성, 영상, 파일과 같은 바이너리 데이터
  • JSON, XML과 같은 API 통신을 통해 전송하는 데이터
  • 등 다양한 데이터

기반 프로토콜

  • TCP: HTTP/1.1, HTTP/2
    • 현재는 HTTP/1.1을 주로 사용한다.
  • UDP: HTTP/3

HTTP의 특징

클라이언트 서버 구조

  • HTTP는 Request(클라이언트)와 Response(서버) 구조로 이루어져있다.
  • 클라이언트는 서버에 요청을 보내고, 응답을 대기하고
  • 서버는 클라이언트의 요청에 대한 결과를 응답한다.

무상태 프로토콜(Stateless)과 비연결성(Connectionless)

무상태 프로토콜(Stateless)

  • 서버가 클라이언트의 상태를 보존하지 않는다.
    • A라는 요청을 하고, 이후 B라는 요청을 하였을 때 서버는 A요청에 대한 정보는 고려하지 않는다.
  • 서버 확장성이 높아진다는 장점이 있지만 클라이언트가 데이터를 추가적으로 더 전송해야 한다는 단점이 있다.
    • B요청에 A요청과 관련된 정보가 필요하다면, B요청에 A요청에 대한 정보를 함께 포함해 전송해야 한다.
    • 하지만 요청이 너무 많아 서버를 증설하더라도 사용자의 요청은 달라지지 않기 때문에 서버 확장성이 높아진다.
  • 모든 것을 Stateless하게 설계할수는 없다.
    • 로그인을 예로 들어 한번 로그인한 사용자는 다시 로그인 할 필요가 없어야 한다.
    • 때문에 Stateless한 설계를 위해 브라우저 쿠키, 서버 세션등을 사용해서 상태를 유지한다.

비연결성(Connectionless)

  • 연결성을 유지하는 모델이라면?
    • 한번 TCP/IP통신을 하고, 응답을 마친 상태이더라도 서버와 클라이언트는 연결되어 있기 때문에 불필요한 서버 자원을 사용해 유지해야 한다.
  • HTTP는 기본이 연결을 유지하지 않는 모델(비연결성)이다.
  • 연결을 유지하지 않기 때문에 서버 자원을 효율적으로 사용할 수 있다.
  • 매번 요청마다 TCP/IP 연결을 새로 맺어야 한다.
    • 3 way handshake 시간이 추가된다.
  • 웹 브라우저로 사이트를 요청하면 HTML, Javascript, css, 등의 많은 자원을 함께 다운로드한다.
  • 하지만 HTTP 지속 연결(Persistent Connections)로 문제를 해결했다.
    • 지속 연결이란?
      HTML, Javascript, css 등 여러 정보를 요청해야 할 때, 한번의 연결에 받아야 하는 모든 응답을 받고 연결을 종료하는 것.

무상태 프로토콜과 비연결성을 이용하면?

  • 동시성 문제의 해결 방법중에 하나가 된다.
    • 정말 많은 요청이 하나의 서버에 집중된다면? 하나의 서버에서 응답할 수 있는 한계는 있다.
    • 때문에 무상태 프로토콜을 이용하면 응답하 서버를 늘리더라도 하나의 요청에 필요한 정보가 모두 담겨있기 때문에 응답이 가능하다.
    • 예) A서버에서 응답, 다음 요청은 B서버에서 응답이 가능

HTTP 메시지

  • HTTP 메시지의 구조
    1. start-line 시작 라인
    2. header 헤더
    3. empty line 공백 라인 (CRLF)
    4. message body

start-line 시작 라인

  • 요청
    • HTTP 메서드
    • GET, POST, PUT, PATCH, DELETE
    • 요청 대상
    • /search?a=aaa&b=bbb
    • HTTP Version
    • HTTP/1.1, HTTP/2, HTTP/3
  • 응답
    • HTTP 메서드
    • GET, POST, PUT, PATCH, DELETE
    • HTTP 상태 코드
    • 200, 400, 500
    • 이유 문구

HTTP 헤더

  • HTTP 전송에 필요한 모든 부가정보를 담는다.
    • 메시지 바디의 내용, 메시지 바디의 크기, 압축, 인증, 요청 클라이언트 정보, 서버 애플리케이션 정보, 캐시 관련 정보 등
  • 필요시에 임의의 헤더를 추가할 수 있다.

HTTP 메시지 바디

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