※ 김영한 님의 인프런 "모든 개발자를 위한 HTTP 웹 기본 지식" 강의 요약한 내용입니다.
✅ HTTP
- HyperText Transfer Protocol
- HTML, TEXT, IMAGE, 음성, 영상, 파일, JSON, XML ... 거의 모든 형태의 데이터 전송 가능
- 서버간에 데이터를 주고 받을 때도 대부분 HTTP 사용
- 지금은 HTTP를 주로 사용한다.
- HTTP/1.1 : 가장 많이 사용하는 버전. 우리에게 가장 중요
- HTTP/2, HTTP/3 : HTTP/1.1에 성능 개성 버전
- 기반 프로토콜
- TCP : HTTP/1.1, HTTP/2
- UDP : HTTP/3
✅ HTTP 특징
- 클라이언트 - 서버 구조
- 무상태 프로토콜(Stateless), 비연결성
- HTTP 메시지
- 단순함, 확장 가능
✅ 클라이언트 - 서버 구조
- Request, Response 구조
- 클라이언트와 서버가 분리되서 독립적으로 진화할 수 있다.
✅ 무상태 프로토콜 (Stateless)
📌 Stateful
- 항상 같은 서버가 유지되어야 한다.
📌 Stateless
- 서버가 클라이언트의 상태를 보존하지 않는다.
- 장점: 서버 확장성 높음 (Scale out). 응답 서버를 쉽게 바꿀 수 있다. (무한한 서버 증설 가능)
- 단점: 클라이언트가 추가 데이터를 전송해야한다.
- 최대한 stateless하게 설계하는 것이 중요하다. 대용량 트래픽이 몰릴 때 서버를 확 늘려서 대응할 수 있는 부분들이 많아진다.
📌 Stateless 한계
- 모든 것을 무상태로 설계할 수 없는 경우도 있다.
- 로그인 같은 경우 로그인한 사용자가 로그인 했다는 상태를 서버에 유지해야한다.
- 일반적으로 브라우저 쿠키와 서버 세션등을 사용해서 상태 유지
- 상태 유지는 최소한만 사용하자
✅ 비연결성
- 연결을 유지하는 모델은 서버는 연결을 계속 유지 한다. 서버 자원을 소모한다.
- 연결을 유지하지 않는 모델은 요청과 응답이 끝나면 연결을 끊는다. 최소한의 자원만 사용한다.
- 초 단위의 이하의 빠른 속도 응답 가능
- 실제 1시간 동안 수천명이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 수십개 이하로 매우 작다.
한계
- TCP/IP 연결을 새로 맺어야 한다. 3-way handshake 시간이 추가된다.
- HTTP 지속 연결 (Persistent Connections)로 문제 해결
✅ HTTP 메세지
📌 HTTP 메시지 구조
start-line 시작 라인 |
header 헤더 |
empty line 공백 라인 (CRLF) |
message body |
📌 HTTP 요청 메시지
Get /search?q=hello&hl=ko HTTP/1.1 |
Host: ww.google.com ... |
{ id = 1 } |
📌 HTTP 응답 메시지
HTTP/1.1 200 OK |
Content Type: text/html;charset=UTF-8 Content-Length: 3423 |
<html> <body> ... <body> </html> |
HTTP-message = start-line
* (header-field CRLF)
CRLF
[ message-body ]
📌 시작 라인
요청 메시지
Get /search?q=hello&hl=ko HTTP/1.1
- request-line = method SP(공백) request-target SP HTTP-version CRLF(엔터)
- HTTP method
- GET, POST, PUT, DELETE
- 요청 대상
- absolute-path[?query] (절대경로[?쿼리])
- 절대경로= "/" 로 시작하는 경로
응답 메시지
HTTP/1.1 200 OK
- status-line = HTTP-version SP status-code SP reason-phrase CRLF
- HTTP 상태 코드: 요청 성공, 실패 등.. HTTP 상태
- 이유 문구: 사람이 이해할 수 있는 짧은 상태 코드 설명 글
📌 헤더
Content Type: text/html;charset=UTF-8
Content-Length: 3423
- HTTP 전송에 필요한 모든 부가정보
- 메시지 바디의 내용, 메시지 바디의 크기, 압축, 인증, 요청 클라이언트 정보, 서버 애플리케이션 정보, 캐시 관리 정보 등등..
- 필요시 임의의 헤더 추가 가능
- 약속한 클라이언트 - 서버만 뜻을 알 수 있음
📌 HTTP 메시지 바디
<html>
<body> ... <body>
</html>
- 실제 전송할 데이터
- HTML, 이미지, 동영상, JSON 등 byte로 표현할 수 있는 모든 데이터 전송 가능하다.
'Web' 카테고리의 다른 글
[HTTP 웹 기본 지식] 섹션5. HTTP 메서드 활용 (0) | 2022.11.18 |
---|---|
[HTTP 웹 기본 지식] 섹션4. HTTP 메서드 (0) | 2022.11.17 |
[HTTP 웹 기본 지식] 섹션2. URI와 웹 브라우저 요청 흐름 (0) | 2022.11.16 |
[HTTP 웹 기본 지식] 섹션1.인터넷 네트워크 (0) | 2022.11.04 |
[Web] CORS (Cross Origin Resource Sharing) (2) | 2022.09.07 |