## 인프런 김영한님의 강의 내용 기록 ##
HTTP
HyperText Transfer Protocol
모든 것이 HTTP
HTTP 메시지에 모든 것을 전송한다
HTML, TEXT, MEDIA, JSON, XML (API)
거의 모든 형태의 데이터 전송 가능
서버 간 데이터 송수신에도 대부분 HTTP
지금은 HTTP 시대 !
HTTP/0.9 (1991) : GET 메서드만 지원, HTTP 헤더 x
HTTP/1.0 (1996) : 메서드, 헤더 추가
HTTP/1.1 (1997) : 가장 많이 사용. 지금 가장 중요한 버전 현재 스펙은 RFC7230 (2014)~
HTTP/2 (2015) : 성능 개선
HTTP/3 (진행중) : TCP 대신에 UDP 사용, 성능 개선
기반 프로토콜
TCP : 1.1, 2 || UDP : 3
3way handshake와 과한 헤더 정보 때문에 UDP를 선호하는 추세
- 클라이언트와 서버 구조로 이루어짐
- 클라이언트가 HTTP 메시지를 통해서 서버로 요청을 보냄
- 클라이언트는 서버의 응답이 올 때까지 무작정 기다림
HTTP 시대의 특징
클라이언트와 서버 구조
클라이언트와 서버 개념이 분리되어 독립적인 개발이 가능하다는 점이다.
클라이언트는 UI만 구성하면 되고 서버에는 데이터처리, 비즈니스 로직을 몰아넣는다.무상태 프로토콜 지향 (Stateless) 서버가 클라이언트의 상태를 보존하지 않는다.
클라이언트 서버 아키텍쳐에서 수평 확장(Scale-out)에 유리
클라이언트는 요청 파라미터에 서버가 필요한 데이터를 모두 넘기면 됨
1
2
3
하지만 예로, 로그인 기능이 있다면 완전한 Stateless에는 한계가 있다.
일반적으로 브라우저 쿠키와 서버 세션등을 사용해 상태를 유지한다.
물론 가능한 stateless하게
- 비연결성
연결을 유지한다면 서버 자원이 지속적으로 소모된다.
TCP/IP 구조를 예로, 응답 후 바로 연결을 끊는다면 이를 극복한다.
이또한 3way-H 시간과 무수한 연결-종료 과정의 한계에 부딪힌다.
지금은 HTTP 지속 연결(Persistent Connections)로 문제를 해결하고 상위 버전에선 더 많은 최적화가 이루어지고 있다.
HTTP 메시지
메시지 구조
[ start-line | header | empty line | message body ]
- start-line
-request-
1
request-line: method SP(space) request-target(path) SP HTTP-version CRLF(enter)
method : GET 등
GET : 리소스 조회, POST : 요청 내역 처리
request-target(path)
absoulte-path와 query parameter
ex) /search?q=hello&hI=ko
-response-
1
status-line: HTTP-version SP status-code SP reason-phrase CRLF
status-code : 200, 400, 500 . . .
요청 성공, 실패를 나타냄
reason-phrase : OK . .
사람이 알아볼 수 있는 문자열(status-code에 대한)
- header - > HTTP 전송에 필요한 모든 부가정보(meta data)를 포함
header-field
field-name “:” OWS(띄어쓰기 허용)
field-value OWS
- message body - > 실제 전송할 데이터
HTML 문서, 이미지, 영상, JSON 등등
byte로 표현할 수 있는 모든 데이터 전송가능