관리 메뉴

Rootable의 개발일기

HTTP 본문

Network

HTTP

dev-rootable 2023. 7. 7. 19:56

📌 HTTP란?

 

HTTP는 HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜이다. HTTP는 웹에서 이루어지는 모든 데이터 교환의 기초이며,
클라이언트-서버 프로토콜이기도 하다.

 

클라이언트-서버 프로토콜이란 (보통 웹 브라우저인) 수신자 측에 의해 요청이 초기화되는 프로토콜을 의미한다.

 

Reference:

https://developer.mozilla.org/ko/docs/Web/HTTP/Overview

 

HTTP 개요 - HTTP | MDN

HTTP는 HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜입니다. HTTP는 웹에서 이루어지는 모든 데이터 교환의 기초이며, 클라이언트-서버 프로토콜이기도 합니다. 클라이언트-서버

developer.mozilla.org

 

📌 HTTP 특징

 

거의 모든 형태의 데이터를 전송할 때 HTTP를 사용하며, 우리는 HTTP/1.1 버전을 사용한다.

 

🔎 Client-Server 구조(Request Response 구조)

 

클라이언트와 서버는 독립되어 있어 서로 독립적으로 진화할 수 있다.

 

클라이언트는 서버에 요청을 보내고, 응답을 대기

 

서버가 요청에 대한 결과를 만들어서 응답

 

🔎 무상태성(Stateless)

 

서버가 클라이언트의 상태를 저장하지 않는다.

 

예를 들어, 어떤 물건을 구매하려는 고객이 있을 때 점원은 이전 정보를 기억하지 않으므로 고객은 매번 필요한 정보를 추가해서 전달해야 한다. 만약, 점원이 중간에
바뀐다고 해도 이전 정보를 기억하지 않으므로 차이가 없다.

 

✔ 장점

 

  • 갑자기 클라이언트 요청이 증가해도 서버를 대거 투입할 수 있다. (스케일 아웃)
  • 장애가 발생해도 응답 서버를 쉽게 교체할 수 있다.
  • 응답 서버를 쉽게 교체할 수 있어 무한한 서버 증설이 가능하다.

 

✔ 한계

 

  • 요청에 필요한 정보를 매번 모두 포함해야 한다.

 

🔎 비연결성(Connectionless)

 

HTTP는 기본이 연결을 유지하지 않는 모델이다.

 

✔ 장점

 

  • 연결 유지를 위해 최소한의 자원만 사용한다.
  • 일반적으로 초 단위 이하의 빠른 속도로 응답한다.
  • 서버 자원을 매우 효율적으로 사용할 수 있다.

 

✔ 한계

 

  • 매번 TCP/IP 연결을 새로 맺어야 하므로 3-way handshake 시간이 길어진다.
  • 웹 브라우저로 URL을 요청하면 HTML, JS, CSS, IMG 등 수많은 자원이 함께 다운로드된다.

 

✔ 극복

 

현재는 HTTP 지속 연결(Persistent Connections)로 문제를 해결했다.

 

이를 위해 HTTP의 Keep-Alive 속성 또는 캐싱을 활용한다.

 

💡 Keep-Alive 속성

TCP 연결 상태를 일정 시간 유지시키는 옵션.
매 요청마다 TCP 연결 작업을 하지 않고 한 번의 연결 이후 일정 시간 동안 요청/응답을 반복할 수 있다.

 

🔎 단순/확장 가능

 

📌 HTTP 메시지 구조

 

HTTP 메시지 구조

 

🔎 요청 메시지의 start-line(request line) 구성

 

[HTTP 메서드][요청대상][HTTP 버전]

 

ex)Method 0x20(공백) request target 0x20(공백) HTTP version 0x0d0a(CRLF)

 

✔ HTTP 메서드

 

서버가 수행해야 할 동작을 지정하는 메서드

 

✔ 요청 대상

 

요청 대상은 절대 경로와 쿼리의 조합으로 지정한다.

 

💡 절대 경로와 쿼리

절대 경로는 "/"으로 시작하는 경로
쿼리는 "?"로 시작하며, 해당 자원(페이지)에서 사용하는 키(변수)에 값을 지정하는 방식이며, 주로 검색 및 정렬 필터로 사용된다.

ex) GET /search?q=hello&a=bye HTTP/1.1

 

🔎 응답 메시지의 start-line 구성

 

[HTTP 버전][상태 코드][상태 메시지]

 

✔ 상태 코드

 

요청 성공, 실패 등을 나타내는 코드

 

✔ 상태 메시지

 

사람이 이해할 수 있는 짧은 상태 코드 설명 글

 

🔎 HTTP 헤더

 

표현 데이터를 해석할 수 있는 정보(모든 부가 정보)를 제공

 

ex) 데이터 유형, 데이터 길이, 압축 정보, 인증 정보, 요청 클라이언트(브라우저) 정보 등

 

💡 표현 : 요청이나 응답에서 전달할 실제 데이터

 

🔎 HTTP 바디

 

표현 데이터를 전달

 

HTML 문서, 이미지, 영상, JSON 등등 byte로 표현할 수 있는 모든 데이터 전송 가능

 

📌 HTTP의 속성

 

🔎 안전(Safe)

 

GET, HEAD, OPTIONS, TRACE 등의 메서드는 호출해도 리소스를 변경하지 않아 안전하다.

 

🔎 멱등(Idempotent)

 

GET, PUT, DELETE, HEAD, OPTIONS, TRACE 등의 메서드는 몇 번을 호출해도 결과가 동일하다.

 

즉, 1회 호출과 n회 호출의 결과가 동일하다.

 

반면, POST와 같은 메서드는 결제 요청처럼 호출마다 결과가 다를 수 있다.

 

활용

  • 자동 복구 메커니즘
  • 클라이언트의 재요청의 적합성 판단 근거

 

외부 요인으로 중간에 리소스가 변경되는 것까지는 고려하지 않음

 

🔎 캐시 가능(Cacheable)

 

GET, HEAD, POST, PATCH 등의 메서드는 응답 결과를 캐시 할 수 있다. 하지만 POST와 PATCH는 본문 내용까지 캐시 키로 고려해야 하므로 구현이 쉽지 않다.
그래서 실제로는 GET, HEAD 정도만 캐시로 사용한다.

 

Reference:

[모든 이미지의 출처는 아래 강의]

https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard

 

모든 개발자를 위한 HTTP 웹 기본 지식 - 인프런 | 강의

실무에 꼭 필요한 HTTP 핵심 기능과 올바른 HTTP API 설계 방법을 학습합니다., [사진] 📣 확인해주세요!본 강의는 자바 스프링 완전 정복 시리즈의 세 번째 강의입니다. 우아한형제들 최연소 기술

www.inflearn.com

 

'Network' 카테고리의 다른 글

API vs HTTP API vs REST API  (0) 2023.07.10
HTTP 메서드  (0) 2023.07.10
TCP(Transmission Control Protocol)  (0) 2023.07.07
OSI 7 Layer  (0) 2023.07.06
IP 프로토콜  (0) 2023.07.06