모든 것이 HTTP
HTTP란
HTTP(HyperText Transfer Protocol) : 기존 HyperText를 전달하기 위해 만들어진 프로토콜
- 현재는 대부분의 데이터를 HTTP를 통해 전달
기반 프로토콜
- TCP : HTTP/1.1, HTTP
- UDP : HTTP/3
HTTP의 특징
- 클라이언트 서버 구조
- 무상태 프로토콜(스테이트리스), 비연결성
- HTTP 메세지를 통해 통신
- 단순함, 확장 가능
클라이언트 서버 구조

- Request Response 구조
- 클라이언트는 서버에 요청을 보내고, 응답을 대기
- 서버가 요청에 대한 결과를 만들어서 응답
장점
- 클라이언트와 서버의 역할 분리가 철저하게 될 수 있다.
- 클라이언트 : UI/UX에 집중
- 서버 : 비즈니스 로직에 집중
무상태 프로토콜(Stateless protocol)
stateless
- 서버가 클라이언트의 상태 보존 X
- 이전까지의 정보를 클라이언트가 계속 서버에게 전달해줘야 한다. → 클라이언트의 추가 데이터 필요 O
- 중간에 서버가 바뀌어도 문제가 되지 않는다. → 서버 확장성이 높음
- 해당 서버가 장애가 나는 경우, 다른 서버에게 그대로 요청을 하면 된다.
stateful
- 서버가 클라이언트의 상태 보존
- 이전까지의 정보를 클라이언트가 서버에게 다시 전달해 줄 필요가 없다. → 클라이언트의 추가 데이터 필요 X
- 중간에 서버가 바뀌면 문제가 된다. → 서버 확장성이 낮다.
- 하나의 요청에 대해 항상 같은 서버가 유지되어야 한다.
- 해당 서버가 장애가 나는 경우, 클라이언트는 처음부터 다른 서버에게 다시 요청해야 한다.
stateless의 한계
- 모든 것을 무상태로 설계할 수 없는 경우가 존재
- 로그인 → 로그인 상태를 지속적으로 유지해줘야 한다.
- 일반적으로 브라우저 쿠키와 서버 세션 등을 사용해서 상태 유지
- 세션 서버가 죽으면 로그인 기록이 날아가 다시 로그인 해야 한다.
- 상태 유지는 최소한만 사용
비연결성(connectionless)
연결을 유지하는 모델

- 다른 클라이언트가 현재 요청을 보내지 않아도, 서버에서는 연결 유지를 위한 자원을 소모하고 있다
연결을 유지하지 않는 모델

- 요청을 보내고 응답을 받으면 즉시 연결을 끊는다.
- 서버는 연결을 유지하지 않으므로, 서버에서 연결에 대한 자원을 최소한으로 사용
HTTP의 비연결성
- HTTP는 기본적으로 연결을 유지하지 않는 모델
- 1시간 동안 수천명이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 수십개 이하
- 실제 동시 연결은 수십개 이하
- 비연결성이 HTTP에서는 효과적
비연결성의 단점
- 매 요청마다 TCP/IP 연결을 새로 맺어야 한다. → 3-way handshake 시간 추가
- 웹 브라우저에서의 수많은 자원에 대해 계속 연결을 끊었다가 다시 해야 한다.
- 현재는 Persistent connections(지속 연결)을 통해 문제 해결
HTTP 초기

HTTP 지속 연결(Persistent Connections)

- 요청 응답 후 바로 연결을 끊는 것이 아닌, 약간 시간을 두고 연결 해제
- 웹브라우저의 정보를 끊김없이 한번에 받을 수 있다.
서버 개발에서 어려운 것
- 동일한 시간에 딱 맞춰 발생되는 대용량 트래픽
- 선착순 이벤트, 명절 KTX 예약 ..
- 스테이트리스하게 설계하는 것이 소용이 없다. → 그래도 최대한 스테이트리스하게 설계하는 것이 시스템 안정성에 중요!
- → 특정 정적 페이지를 먼저 보여준 뒤, 연결을 하도록 해 사용자가 동시에 연결되는 일을 최대한 줄이는 등!
HTTP 메세지
HTTP는 크게 요청 메세지와 응답 메세지로 나뉜다.

시작라인
HTTP 요청 메세지
- start-line = reqeust-line
- request-line : method request-target HTTP-version CRLF
- method : HTTP 메서드
- request-target : URI
- HTTP-version : HTTP version
HTTP 응답 메세지
- start-line = status-line
- status-line : HTTP-version status-code reason-phrase CRLF
- HTTP-version : HTTP version
- status-code : HTTP 상태 코드
- reason-phrase : 이유 문구 → 상태 코드에 대한 짧은 설명
HTTP 헤더

헤더의 용도
- HTTP 전송에 필요한 모든 부가 정보
- 메세지 바디의 내용, 메세지 바디의 크기, 압축, 인증, 요청 클라이언트 정보, 캐시 관리 정보, ..
HTTP 메세지 바디

- 실제 전송할 데이터
- HTML 문서, 이미지, 영상, JSON 등등 byte로 표현할 수 있는 모든 데이터 전송 가능
출처
- 모든 개발자를 위한 HTTP 웹 기본 지식(inflearn)
'CS > HTTP' 카테고리의 다른 글
| HTTP 상태코드 (0) | 2023.12.08 |
|---|---|
| HTTP 메서드 활용 (1) | 2023.12.08 |
| HTTP 메서드 (0) | 2023.12.08 |
| URI와 웹 브라우저 요청 흐름 (0) | 2023.12.08 |
| 인터넷 네트워크 (0) | 2023.12.08 |