Web

[HTTP 웹 기본 지식] 섹션3. HTTP 기본

Ella_K 2022. 11. 17. 00:17

※ 김영한 님의 인프런 "모든 개발자를 위한 HTTP 웹 기본 지식" 강의 요약한 내용입니다.

HTTP

  • HyperText Transfer Protocol
  • HTML, TEXT, IMAGE, 음성, 영상, 파일, JSON, XML ... 거의 모든 형태의 데이터 전송 가능
  • 서버간에 데이터를 주고 받을 때도 대부분 HTTP 사용
  • 지금은 HTTP를 주로 사용한다.
  • HTTP/1.1 : 가장 많이 사용하는 버전. 우리에게 가장 중요
  • HTTP/2, HTTP/3 : HTTP/1.1에 성능 개성 버전
  • 기반 프로토콜
    • TCP : HTTP/1.1, HTTP/2
    • UDP : HTTP/3

 

 HTTP 특징

  • 클라이언트 - 서버 구조
  • 무상태 프로토콜(Stateless), 비연결성
  • HTTP 메시지
  • 단순함, 확장 가능

 

 클라이언트 - 서버 구조

  • Request, Response 구조
  • 클라이언트와 서버가 분리되서 독립적으로 진화할 수 있다.

 

무상태 프로토콜 (Stateless)

📌 Stateful 

  • 항상 같은 서버가 유지되어야 한다.

📌 Stateless

  • 서버가 클라이언트의 상태를 보존하지 않는다.
  • 장점: 서버 확장성 높음 (Scale out). 응답 서버를 쉽게 바꿀 수 있다. (무한한 서버 증설 가능)
  • 단점: 클라이언트가 추가 데이터를 전송해야한다.
  • 최대한 stateless하게 설계하는 것이 중요하다. 대용량 트래픽이 몰릴 때 서버를 확 늘려서 대응할 수 있는 부분들이 많아진다.

📌 Stateless 한계

  • 모든 것을 무상태로 설계할 수 없는 경우도 있다.
  • 로그인 같은 경우 로그인한 사용자가 로그인 했다는 상태를 서버에 유지해야한다.
    • 일반적으로 브라우저 쿠키와 서버 세션등을 사용해서 상태 유지
  • 상태 유지는 최소한만 사용하자

 

 비연결성

  • 연결을 유지하는 모델은 서버는 연결을 계속 유지 한다. 서버 자원을 소모한다.
  • 연결을 유지하지 않는 모델은 요청과 응답이 끝나면 연결을 끊는다. 최소한의 자원만 사용한다.
  • 초 단위의 이하의 빠른 속도 응답 가능
  • 실제 1시간 동안 수천명이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 수십개 이하로 매우 작다.

한계

  • TCP/IP 연결을 새로 맺어야 한다. 3-way handshake 시간이 추가된다.
  • HTTP 지속 연결 (Persistent Connections)로 문제 해결

 

 HTTP 메세지

📌 HTTP 메시지 구조

start-line 시작 라인
header 헤더
empty line 공백 라인 (CRLF)
message body

📌 HTTP  요청 메시지

Get /search?q=hello&hl=ko HTTP/1.1
Host: ww.google.com
...
 
{
id = 1
}

📌 HTTP 응답 메시지

HTTP/1.1 200 OK
Content Type: text/html;charset=UTF-8
Content-Length: 3423
 
<html>
 <body> ... <body>
</html>
HTTP-message = start-line 
* (header-field CRLF)
CRLF
[ message-body ]

📌 시작 라인

요청 메시지

Get /search?q=hello&hl=ko HTTP/1.1
  • request-line = method SP(공백) request-target SP HTTP-version CRLF(엔터)
  • HTTP method
    • GET, POST, PUT, DELETE
  • 요청 대상 
    • absolute-path[?query] (절대경로[?쿼리])
    • 절대경로= "/" 로 시작하는 경로

응답 메시지

HTTP/1.1 200 OK
  • status-line = HTTP-version SP status-code SP reason-phrase CRLF
  • HTTP 상태 코드: 요청 성공, 실패 등.. HTTP 상태
  • 이유 문구: 사람이 이해할 수 있는 짧은 상태 코드 설명 글

📌 헤더

Content Type: text/html;charset=UTF-8
Content-Length: 3423
  • HTTP 전송에 필요한 모든 부가정보
    • 메시지 바디의 내용, 메시지 바디의 크기, 압축, 인증, 요청 클라이언트 정보, 서버 애플리케이션 정보, 캐시 관리 정보 등등..
  • 필요시 임의의 헤더 추가 가능
    • 약속한 클라이언트 - 서버만 뜻을 알 수 있음

📌 HTTP 메시지 바디

<html>
 <body> ... <body>
</html>
  • 실제 전송할 데이터
  • HTML, 이미지, 동영상, JSON 등 byte로 표현할 수 있는 모든 데이터 전송 가능하다.