'모든 개발자를 위한 HTTP 웹 기본 지식' 수업을 듣고 정리한 내용입니다.
HTTP(HyperText Transfer Protocol)
- 초기에는 문서를 전달하기 위해 고안된 프로토콜이었다.
- 현재는 거의 모든 것을 HTTP 프로토콜에 담아서 보내고 있다.
- HTML, TEXT, IMAGE, 음성, 영상, 파일, JSON, XML
- 거의 모든 형태의 데이터 전송 가능
- 서버간에 데이터를 주고 받을 때도 대부분 HTTP를 사용
HTTP 역사
- HTTP/1.1 1997년 : 가장 많이 사용, 가장 중요한 버전 (RFC2068 -> RFC2616 -> RFC7230 ~ 7235)
- HTTP/2 2015년 : 성능 개선
- HTTP/3 진행중 : TCP 대신에 UDP 사용, 성능 개선
기반 프로토콜
- TCP : HTTP/1.1, HTTP/2 (HTTP/1.1과 HTTP/2는 TCP 프로토콜 위에서 동작을 한다.)
- UDP : HTTP/3 (HTTP/3는 UDP 프로토콜을 기반으로 개발되었다.)
- 현재 HTTP/1.1 주로 사용 (HTTP/2, HTTP/3도 점점 증가하고 있다.)
HTTP 특징
- 클라이언트 - 서버 구조로 동작한다.
- 무상태 프로토콜(스테이스리스), 비연결성
- HTTP 메시지
- 단순함, 확장 가능
과거에는 클라이언트와 서버가 따로 나누어져 있지 않았다.
최근에는 프론트엔드, 백엔드를 나누는 것처럼 클라이언트 - 서버 구조로 나누어서 개발한다.
클라이언트 서버 구조
- Request Response 구조
- 클라이언트는 서버에 요청을 보내고, 응답을 대기
서버가 요청에 대한 결과를 만들어서 응답 (클라이언트가 보낸 요청을 분석해서, 응답을 보낸다.)
Stateful vs Stateless 차이점
(1) Stateful - 상태를 유지한다.
- 서버가 클라이언트의 이전 요청을 모두 알고 있다.
- 서버가 여러 대일 때 항상 같은 서버와 통신이 유지되어야 한다.
- 한 대의 서버가 죽어버리면 대응이 어렵다.
- 하나의 서버에서 바뀌는 정보가 있다면 다른 모든 서버에게 미리 알려줘야 한다.
(2) Stateless : 상태를 유지하지 않는다.
- 서버가 클라이언트의 이전 요청을 알지 못한다.
- 서버가 여러 대라고 가정했을 때, 아무 서버와 통신을 해도 무방하다.
- 한 대의 서버가 죽더라도 다른 서버로 대응이 쉽게 가능하다.
Stateless 실무 한계
: 모든 것을 무상태로 설계 할 수 있는 경우도 있고 없는 경우도 있다.
(1) 무상태의 예시 : 로그인이 필요 없는 단순한 서비스 소개 화면
(2) 상태 유지 예시 : 로그인한 사용자의 경우 로그인 했다는 상태를 서버에 유지
상태 유지는 최소한으로 사용해야 한다.
무상태 유지를 최대한으로 사용해야 한다.
무상태는 데이터를 너무 많이 사용한다는 단점이 있다.
- 소켓 통신은 기본적으로 연결을 유지해서 사용한다.
- 연결을 항상 유지하고 있기 때문에 빠른 데이터 통신이 가능하다.
- 클라이언트가 늘어날 수록 서버의 과부하가 커진다. (데이터를 주고 받지 않아도 연결은 계속 유지되어야 하기 때문이다.)
HTTP : 기본이 연결을 유지하지 않는 모델
비 연결성 한계와 극복
- TCP/IP 연결을 새로 맺어야 한다. (3 way handshake 시간 추가된다.)
- 웹 브라우저로 사이트를 요청하면 HTML 뿐만 아니라 이미지, js파일, css파일 등 엄청 많은 자원을 다운로드 받아야 한다. (이때, 연결을 새로 맺어야 한다.)
- 지금은, HTTP 지속 연결을 통해 문제를 해결하였다. (지속 연결 : 한 번 연결을 하고 그 연결을 유지한다.)
스테이스리스를 기억하자
- 서버 개발자들이 어려워하는 업무
- 정말 같은 시간에 딱 맞추어 발생하는 대용량 트래픽
- ex) 선착순 이벤트, 명절 KTX 예약, 학과 수업 등록
- ex) 저녁 6:00 선착순 1000명 치킨 할인 이벤트 -> 수만명 동시 요청
이전 내용 복습
- HTTP 메시지에 모든 것을 전송
- HTML, TEXT, IMAGE, 음성, 영상, 파일
- JSON, XML, 거의 모든 형태의 데이터 전송 가능
- 서버간에 데이터를 주고 받을 때도 대부분 HTTP 사용
시작 라인
요청 대상 :/search?q=hello&hl=ko
(1) 요청 메세지 - HTTP 메서드 :
(4) HTTP 상태 코드 : 요청 성공, 실패를 나타냄GET
: 리소스 조회,POST
: 요청 내역 처리,PUT
,DELETE
등
(2) 요청대상 : 절대경로 = "/"로 시작하는 경로
(3) HTTP/1.1 : HTTP 버전
- 200 : 성공
- 400 : 클라이언트 요청 오류
- 500 : 서버 내부 오류
- 이유 문구 : 사람이 이해할 수 있는 짧은 상태 코드 설명 글
HTTP 헤더
field-name(필드명): field-value(필드 값)
- field-name : 대소문자 구분 하지 않는다.
- field-value : 대소문자 구분
ex) HOST: www.google.com
- HTTP 전송에 필요한 모든 부가정보가 다들어가 있다.
HTTP 메시지 바디
- 실제 전송할 데이터가 들어가 있다.
- HTML, JSON, XML, 이미지, 파일 등등
byte
로 표현할 수 있는 모든 데이터 전송 가능하다.
🔔 HTTP 정리
- HTTP 메세지에 모든 것을 전송
- HTTP 역사 HTTP/1.1을 기준으로 학습하면된다.
- 클라이언트 서버 구조
- 무상태 프로토콜(스테이스리스)
- HTTP 메시지
- 단숨함, 확장 가능
- 지금은 HTTP 시대