[HTTP] HTTP란 무엇인가?

Yujeong·2023년 11월 29일
0
post-thumbnail

모든 개발자를 위한 HTTP 웹 기본 지식 강의 수강 후, 정리한 글입니다.

목차

  1. HTTP란?
  2. HTTP 특징

1. HTTP란?

1) HTTP

HTTP(HyperText Transfer Protocol)는 기존에는 html을 전송하는 프로토콜이었으나, 현재는 모든 형태의 데이터를 주고 받는 프로토콜이다.

  • HTML, TEXT
  • 이미지, 음성, 영상, 파일
  • JSON, XML(API)

거의 모든 형태의 데이터를 전송할 수 있으며, 서버 간에 데이터를 주고 받을 때에도 대부분 HTTP를 사용한다.

2) HTTP 역사

HTTP/1.1이 우리에게 가장 중요한 버전!

버전년도특징
HTTP/0.91991GET 메서드만 지원, HTTP 헤더 없음
HTTP/1.01996메서드, 헤더 추가
HTTP/1.11997대부분의 기능 들어 있음, 가장 많이 사용, TCP
HTTP/22015성능 개선, TCP
HTTP/3진행중TCP 대신 UDP 사용, 성능 개선

Chrome > F12 > "Hello" 검색 > Network의 Protocol을 통해 h3을 확인할 수 있다. http3을 사용하고 있다는 것을 의미한다.

Chrome > F12 > naver.com으로 이동 > Network의 Protocol을 통해 h2을 확인할 수 있다. http2을 사용하고 있다는 것을 의미한다.

2. HTTP 특징

1) 클라이언트 서버 구조

클라이언트에서 요청(Request)하고 응답을 무한정 대기한다. 그리고 서버에서 요청에 대한 결과를 만들어 클라이언트에 응답(Response)하는 구조이다.

클라이언트는 UI, 사용성에 집중하고 서버는 비즈니스 로직이랑 데이터에 집중하여 양쪽이 독립적으로 진화할 수 있다.

2) Stateful, Stateless

Stateful(상태 유지)

예시 1: 점원 동일

  • 고객: 이 노트북 얼마인가요?
  • 점원: 100만 원입니다.
    (노트북 상태 유지)
  • 고객: 2개 구입하겠습니다.

  • 점원: 200만 원입니다. 신용카드, 현금 중에 어떤 걸로 구매하시겠어요?
    (노트북, 2개 상태 유지)

  • 고객: 신용카드로 구매하겠습니다.

  • 점원: 200만 원 결제 완료되었습니다.
    (노트북, 2개, 신용카드 상태 유지)

예시 2: 점원 변경

  • 고객: 이 노트북 얼마인가요?
  • 점원A: 100만 원입니다.
  • 고객: 2개 구입하겠습니다.
  • 점원B: 네? 무엇을 2개 구매하시겠어요?
  • 고객: 신용카드로 구매하겠습니다.
  • 점원C: 네? 어떤 제품몇 개 신용카드로 구입하시겠어요?

stateful 한계

① 로그인하는 경우에 사용자가 로그인했다는 상태를 서버에 유지해야 함
② 브라우저 쿠키와 서버 세션 등을 사용해서 상태를 유지하는 기능을 씀
③ 서버에 세션이 날아가거나 세션 서버가 죽어버리면 전체적으로 로그인이 풀려버리게 됨
상태유지는 최소한으로 꼭 필요한 경우에만 사용한다.

Stateless(무상태)

예시: 점원이 같을 때와 다를 때 결과 동일

  • 고객: 이 노트북 얼마인가요?
  • 점원A: 100만 원입니다.
  • 고객: 노트북 2개 구입하겠습니다.
  • 점원B: 노트북 2개는 200만 원입니다. 신용카드, 현금 중에 어떤 걸로 구매하시겠어요?
  • 고객: 노트북 2개를 신용카드로 구매하겠습니다.
  • 점원C: 네, 200만 원 결제 완료 되었습니다.

무상태는 응답 서버를 쉽게 바꿀 수 있다.

  • 클라이언트 요청이 갑자기 증가해도 서버를 대거 투입할 수 있음
  • 중간에 서버가 장애가 나면 아무 서버나 호출해도 됨
  • scale out에 유리

stateless 한계

① 로그인이 필요없는 단순한 서비스 소개 화면의 경우 설계가 쉬움
② 클라이언트가 필요한 정보를 보내야 해서 데이터량이 많음

🗒️ scale out

3) 비연결성

연결을 유지하는 모델의 경우

각 클라이언트와 서버가 TCP/IP 연결하고 유지하며 서버 자원을 소모한다.

연결을 유지하지 않는 모델의 경우

각 클라이언트와 서버가 TCP/IP 연결을 하고 클라이언트의 Request와 서버의 Response 후에 TCP/IP 연결 종료함으로써 최소한의 자원을 사용한다.

특징

  • HTTP는 기본이 연결을 유지하지 않는 모델
  • 보통 초 단위 이하의 빠른 속도로 응답
  • 서버 자원을 효율적으로 사용할 수 있음

1시간 동안 수천 명이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 수십 개 이하로 매우 적음

한계

  • TCP/IP 연결을 새로 맺을 때마다 3-way handwhake를 해야 하기 때문에 시간이 추가되서 클라이언트에서 느리게 느낌
  • 웹 브라우저로 사이트를 요청(ex.검색)하면 html, javascript, css, image 등의 많은 자원이 함께 다운로드됨
    ➡️ HTTP 지속 연결(Persistent Connections)로 문제 해결

같은 시각에 맞춰 발생하는 대용량 트래픽에는 Stateless하게 설계하는 게 중요하다.
예시 1: 선착순 이벤트 예시 2: 명절 KTX 예약
예시 3: 학교 수강신청 예시 4: 선착순 1000명 이벤트

4) HTTP 메시지

HTTP 메시지 구조

HTTP 요청 메시지

start line

  • GET
  • HTTP 메서드: GET, POST, PUT, DELETE

request target

  • /search?q=hello&hl=ko
  • absolute-path[?query]
    (절대경로: "/"로 시작하는 경로)

HTTP 버전

  • HTTP/1.1

HTTP 응답 메시지

업로드중..

start line

  • HTTP/1.1 200 OK
  • start-line = request-line/status-line
  • status-line = HTTP-version SP status-code SP reason-pharse CRLF
  • HTTP 버전, HTTP 상태코드, 이유 문구

header

  • Content-Type: text/html;charset=UTF-8
    Content-Length: 3423
  • header-field = field-name:OWS field-value OWS(OWS 띄어쓰기 가능)
  • HTTP 전송에 필요한 부가정보
    예) 메시지 바디 내용, 바디 크기, 압축, 인증, 클라이언트 정보, 서버 애플리케이션 정보, 캐시 관리 정보 등

body

<html>
	<body> ... </body>
</html>
  • 실제 전송할 데이터
    예) HTML 문서, 이미지, 영상, JSON 등등 byte로 표현할 수 있는 모든 데이터

업로드중..

4) 단순함, 확장 가능

profile
공부 기록

0개의 댓글