-
HTTP - HyperText Transfer Protocol
요즘은 HTTP 메세지에 모든 것을 전송한다.
HTML, TEXT, Image, Sound, Video, File, JSON, XML(API) 등 거의 모든 형태의 데이터 전송이 가능하다.
서버간에 데이터를 주고 받을 때도 대부분 HTTP를 사용한다.
TCP : HTTP/1.1 , HTTP/2
UDP : HTTP/3
현재 주로 HTTP/1.1을 사용한다고 하나, HTTP/2, HTTP/3의 사용도 점차 증가하는 추세
HTTP 특징
클라이언트 - 서버 구조
Request - Response 구조로 클라이언트는 서버에 요청을 보내고 응답을 대기한다(무한정 대기할 수도 있음)
비즈니스 로직, 데이터를 서버에 UI/UX 요소를 클라이언트로 구분지어 개발 가능하다.
서버가 요청에 대한 결과를 만들어서 응답한다.
무상태 프로토콜 (Stateless)
서버가 클라이언트의 상태를 보존(저장)하지 않는다.
장점 : 서버 확장성이 높다 (스케일 아웃)
단점 : 클라이언트가 추가로 데이터를 전송해야 한다.
Stateful vs Stateless
Stateful한 경우 작업 도중 처리담당이 바뀌면 안된다. 중간에 바뀌는 경우 바뀔 때 상태 정보를 바뀌는 처리 담당에게 미리 알려줘야 한다.
Stateless한 경우 상관이 없다. 갑자기 작업이 증가해도 처리담당을 대거 투입할 수 있다. (즉 클라이언트 요청이 증가해도 서버를 대거 투입할 수 있다). -> 응답 서버를 쉽게 바꿀 수 있다 ( 무한한 서버 증설 가능 (스케일 아웃) )
Stateless 한계
단순한 서비스 소개화면에선 장애 x, 상태를 유지해야 하는 경우(ex 로그인) 일반적으로 브라우저 쿠키와 서버 세션등을 사용하여 유지한다
Stateful은 가능한 적게 사용하는것이 서버에 부담이 적다.
비연결성
연결을 계속 유지하는 성질을 가진다면 서버와 클라이언트가 요청시 바로 바로 응답할 수 있는 장점이 존재한다. 그러나 서버가 연결을 유지하는데 자원을 계속 소모하여야 한다.
연결을 유지하지 않는다면 서버는 연결을 유지하지 않으므로 최소한의 자원을 사용하여 서버를 운용할 수 있다.
일반적으로 초 단위의 이하의 빠른 속도로 응답한다.
1시간 동안 수천명이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 수십개 이하로 매우 작다.
ex) 웹 브라우저에서 연속해서 버튼을 계속 누르지 않기 때문이다.
비연결성 한계&극복
TCP/IP 연결을 새로 맺어야 한다. ( 3 way handshake 시간 추가 )
웹 브라우저로 사이트를 요청하면 HTML 뿐 아니라 js, css image 등 수많은 자원이 다운로드 된다.
현재는 HTTP 지속 연결(Persistent Connections)로 문제를 해결한다.
HTTP/2, HTTP/3에서 더 많은 최적화
HTTP 메시지
HTTP Message Structure
HTTP Request Message
HTTP Response Message
start-line, header, empty line (CRLF), message body 로 구성되어 있다.
start-line 에는 request-line과 status-line이 존재한다.
request-line에는 method SP(공백) request-target(Path) SP HTTP-version CRLF(엔터)가 들어가게 된다.
Request-target에는 절대경로가 들어간다.
status-line에는 HTTP-version SP status-code SP reason-pharse CRLF가 들어가게 된다.
Header는 HTTP 전송에 필요한 모든 부가정보를 담고 있다.
ex) message body의 내용, 크기, 압축, 인증, 요청 클라이언트 정보, 서버 애플리케이션 정보, 캐시 관리 정보
표준 헤더가 너무 많이 존재하고 필요시 임의의 헤더를 추가할 수 있다.
header-field에는 field-name ":" OWS field-value OWS (OWS 띄어쓰기 허용)
field-name은 대소문자 구분이 없다.
ex) Host: www.google.com
HTTP Message Body에는 실제 전송할 데이터를 담는다.
ex) HTML 문서, 이미지, 영상, JSON 등 byte로 표현할 수 있는 모든 데이터를 전송할 수 있다.
단순함, 확장성
'개발' 카테고리의 다른 글
HTTP METHOD - GET & POST (0) 2021.02.02 HTTP API - Intro (0) 2021.02.02 URI와 웹 브라우저 요청 흐름 (0) 2021.01.05 쿠키&세션 (0) 2020.12.23 자바의 메모리관리, 가비지 컬렉션 (0) 2020.12.13