1. 모든 것이 HTTP
HTTP(HyperText Transfer Protocol)
- HTML, TEXT
- IMAGE, 음성, 영상, 파일
- JSON, XML (API)
- 거의 모든 형태의 데이터 전송 가능
HTTP 역사
- HTTP/1.1 (1997년 : 가장 많이 사용, 우리에게 가장 중요한 버전)
기반 프로토콜
- TCP : HTTP/1.1, HTTP/2
- UDP : HTTP/3
HTTP 특징
- 클라이언트 서버 구조
- 무상태 프로토콜(Stateless), 비연결성
- HTTP 메시지
- 단순하고, 확장이 가능
2. 클라이언트 서버 구조
클라이언트는 요청(Request)하고 서버는 응답(Response)하는 구조
클라이언트와 서버를 분리하자
- 클라이언트: UI, 사용성에 집중
- 서버 : 비즈니스 로직과 데이터
얻는 효과 : 클라이언트와 서버가 각각 독립적으로 진화!
3. 무상태 프로토콜 (Stateless Protocol)
상태 유지 - Stateful
- 고객 : 이 노트북 얼마임?
- 직원 : 100만원이요 (노트북 상태 유지)
- 고객 : 2개 살래요
- 직원 : 200만원 신용카드, 현금 뭐로 결제? (노트북, 2개 상태 유지)
- 고객 : 신용카드
- 직원 : OK (노트북, 2개, 신용카드 상태 유지)
무상태 - Stateless (직원이 중간에 바뀜)
- 고객 : 이 노트북 얼마임?
- 직원A : 100만원이요
- 고객 : 2개 살래요
- 직원B : 뭘 2개 사요?
- 고객 : 신용카드
- 직원C : 뭐를 몇 개 신용카드로 구매?
고객이 필요한 데이터를 모두 직원에게 넘겨야 알아듣는다.
- stateful : 중간에 다른 직원으로 변경되면 오류, 최소한만 사용
- stateless : 중간에 직원이 변경되어도 상관 없다.
-> 무한한 서버 증설 가능
4. 비연결성(connectionless)
연결을 유지하지 않는 모델
- HTTP는 기본이 연결을 유지하지 않는 모델
- 실제 서버에서 동시에 처리하는 요청은 매우 작다.
- 서버 자원을 매우 효율적으로 사용할 수 있음
한계와 극복
스테이스리스를 기억하자!
- 정말 같은 시간에 딱 맞추어 발생하는 대용량 트래픽
ex. 이벤트, 수강신청
5. HTTP 메시지
- HTTP 메시지 구조
시작 라인
요청 메시지
request-line : HTTP 메서드 (GET: 조회), 요청 대상, HTTP Version
-
HTTP 메서드
- 종류 : GET, POST, PUT, DELETE ...
- 서버가 수행해야 할 동작 지정
GET: 리소스 조회
POST : 요청 내역 처리
-
요청 대상
- absolute-path[?query]
(절대경로 = "/" 로 시작하는 경로)
-
HTTP 버전
-
응답 메시지
-
HTTP 버전
- HTTP 상태 코드: 요청 성공, 실패를 나타냄
200: 성공
400: 클라이언트 요청 오류
500: 서버 내부 오류
- 이유 문구 : 사람이 이해할 수 있는 짧은 상태 코드 설명 글
HTTP 헤더
- HTTP 전송에 필요한 모든 부가정보
- 메시지 바디 빼고 필요한 메타데이터는 전부 포함
HTTP 메시지 바디
- 실제 전송할 데이터
(HTML, 이미지, 영상, JSON 등 byte로 표현 가능한 모든 데이터 전송 가능)