모든것이 HTTP
- HTTP 메시지에 모든 것을 전송
- HTML, TEXT
- IMAGE, 음성, JSON, XML
- 거의 모든 형태의 데이터 전송 가능
- 서버간에 데이터를 주고 받을 때도 대부분 HTTP 사용
- HTTP/1.1 : 가장많이 사용, 우리에게 가장 중요한 버전
- HTTP/2, HTTP/3 : HTTP/1.1에서 성능을 개선한 버전
기반 프로토콜
- TCP(3 way handshake) : HTTP/1.1, HTTP/2
- UDP : HTTP/3
HTTP 특징
1. 클라이언트 서버 구조
- Request Response 구조
- 클라이언트는 서버에 요청을 보내고, 응답을 "대기"
- 서버가 요청에 대한 결과를 만들어서 응답

2. 무상태 프로토콜(스테이스리스)지향
- 서버가 클라이언트의 상태를 보존 X
- 장점 : 서버 확장성 높음(스케일 아웃)
- 단점 : 클라이언트가 추가 데이터 전송
- 실무 한계
- 모든 것을 무상태로 설계할수 있는 경우도 있고, 없는 경우도있다.
- 무상태
- 예) 로그인이 필요없는 단순한 서비스 소개화면
- 상태 유지
- 예) 로그인
- 로그인한 사용자의 경우 로그인 했다는 상태를 서버에 유지
- 상태 유지는 "최소한"만 사용
- 정리
- "상태유지" : 중간에 다른 점원이 바뀌면 안된다. (무슨 상품, 갯수 이런걸 알수가없다)
- 중간에 다른 점원으로 바뀔 때 상태정보를 다른 점원에게 미리 알려줘야한다.
- "무상태" : 중간에 다른 점원으로 바뀌어도 된다.
- 갑자기 고객이 증가해도 점원을 대거 투입할수있다.
- 갑자기 클라이언트 요청이 증가해도 서버를 대거 투입할수있다.
- 무상태는 응답 서버를 쉽게 바꿀 수 있다. -> 무한한 서버 증설 가능
3. 비연결성
- HTTP는 기본이 연결을 유지하지 않는 모델
- 서버 자원을 매우 효율적으로 사용할수 있다.
- 수천명이 서버를 사용해도, 실제 서버에서 처리하는 요청은 매우작음
- 한계
- TCP/IP 연결을 새로 맺어야함
- 지금은 HTTP "지속 연결"로 문제 해결
- HTTP/2, HTTP/3 에서 더 많은 최적화
4. HTTP 메시지
- 요청 메시지
- 시작 라인 - HTTP 메서드
- 종류 : GET,POST,PUT,DELETE
- !!(중요) 서버가 수행해야할 동작 지정
- GET : 리소스 조회
- POST : 요청 내역 조회
- HTTP 상태 코드 : 요청 성공, 실패를 나타냄
- 200 : 성공
- 400 : 클라이언트 요청 오류
- 500 : 서버 내부 오류
- 이유 문구 : 사람이 이해할수 있는 짧은 상태 코드 설명 글
5. 단순함, 확장 가능