Rootable의 개발일기
HTTP 본문
📌 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 메시지 구조
🔎 요청 메시지의 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 |