Kwon's Study Blog !
[HTTP] HTTP 웹 기본 지식 - HTTP 기본 본문
이글은 모든 개발자를 위한 HTTP 웹 기본 지식강의를 학습 후
나중에 다시 복습하기 위해 정리한 글입니다.
문제시 비공개로 처리하겠습니다.
목차
- 모든 것이 HTTP
- 클라이언트 서버 구조
- Stateful, Stateless
- 비 연결성(connectionless)
- HTTP 메시지
1. 모든 것이 HTTP
HTTP (HyperText Transfer Protocol)
HTTP 메시지에 모든 것을 전송
- HTML, TEXT
- IMAGE, 음성, 영상, 파일
- JSON, XML (API)
- 거의 모든 형태의 데이터 전송 가능
- 서버간에 데이터를 주고 받을 때도 대부분 HTTP 사용
HTTP 역사
기반 프로토콜
- TCP : HTTP1.1(현재 주로 사용), HTTP/2
- UDP : HTTP/3
HTTP 특징
- 클라이언트 서버 구조
- 무상태 프로토콜(stateless), 비연결성
- HTTP 메시지
- 단순함, 확장 가능
2. 클라이언트 서버 구조
- Request, Response 구조
- 클라는 서버에 요청을 보내고, 응답을 대기
- 서버가 요청에 대한 결과를 만들어 응답
3. Stateful, Stateless
HTTP 는 무상태(Stateless) 프로토콜을 지향한다.
- 서버가 클라이언트의 상태를 보존 X
- 장점 : 서버 확장성 높음 (Scale out)
- 단점 : 클라이언트가 추가 데이터 전송
Stateful(상태유지) vs Stateless(무상태)
stateful 은 서버가 상태를 저장해서 유지시켜야 함.
이는 항상 같은 서버가 유지돼야 한다. (다른 서버는 상태가 저장돼있지 않기 때문에 )
만약 중간에 서버가 장애나면 ? -> 장애가 나는 것이다.
stateless 는 클라이언트가 상태를 저장해서 유지시켜야 함.
아무 서버나 호출해도 된다. (클라이언트가 상태를 저장하기 때문에 )
만약 중간에 서버가 장애나면 ? -> 다른 서버에게 요청하면 된다.
-> 그래서 Scale Out - 수평 확장에 유리하다.
Stateless 실무 한계
- 모든 것을 무상태로 설계 할 수 있는 경우도 있고 없는 경우도 있다.
- 무상태 ex) 로그인이 필요없는 단순한 서비스 소개 화면
- 상태 유지 ex) 로그인
- 로그인한 사용자의 경우 로그인 했다는 상태를 서버에 유지
- 일반적으로 브라우저 쿠키와 서버 세션등을 통해 상태 유지
- 상태 유지는 최소한만 사용해야 한다. !!!
Stateless 를 기억하자
정말 같은 시간에 딱 맞추어 발생하는 대용량 트래픽 (수 만명이 동시에 요청)
ex) 선착순 이벤트, 명절 KTX 예약, 학과 수업 등록, 특정 시간 선착순 XXX명 할인 이벤트
이에 대응하기 위해선 최대한 Stateless하게 설계를 하는 것이 중요하다.
서버를 증설하든 ... 대응할 수 있는 전략이 많아짐.
4. 비 연결성(connectionless)
연결을 유지하는 모델
요청을 한 클라이언트와 서버는 계속 연결을 유지한다.
서버는 연결을 계속 유지하므로 불필요한 서버 자원을 계속 소모하게 된다.
연결을 유지하지 않는 모델
서버와 클라이언트는 요청을 주고 받을때만 연결하고
응답이 완료되면 연결을 딱 끊어 버린다.
서버는 연결을 유지하지 않으므로 최소한의 자원을 유지한다.
비 연결성
- HTTP는 기본이 연결을 유지하지 않는 모델이다.
- 일반적으로 초 단위 이하의 빠른 속도로 응답.
- 1시간 동안 수천명이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 수십개 이하로 매우 작다.
- 서버 자원을 매우 효율적으로 사용할 수 있다.
비 연결성 - 한계와 극복
- TCP/IP 연결을 새로 맺어야 함 - 3way handshake 시간 추가
- 웹 브라우저로 사이트를 요청하면 html, js, css 및 추가 이미지 등 수 많은 자원이 함께 다운로드
- 지금은 HTTP 지속 연결(Persistent Connection)로 문제 해결
- 기본은 비 연결성인데, 성능 최적화를 위해서 약간의 연결 유지(몇 분 정도)를 함.
- HTTP/2, HTTP/3 에서 더 많은 최적화
5. HTTP 메시지
HTTP 메시지 구조
HTTP 시작 라인 (start-line)
- 요청 메시지
- HTTP 메서드 (GET : 조회)
- 종류 : GET, POST, PUT, DELETE ...
- 서버가 수행해야 할 동작 지정
- 요청 대상 (/search?q=hello&hl=ko)
- 절대경로 = "/" 로 시작하는 경로
- absolute-path[?query]
- HTTP Version
- 응답 메시지
- HTTP 버전
- HTTP 상태 코드 : 요청 성공, 실패를 나타냄
- 200 : 성공
- 400 : 클라이언트 요청 오류
- 500 : 서버 내부 오류
- 이유 문구 : 사람이 이해할 수 있는 짧은 상태 코드 설명 글
HTTP 헤더 (header)
- HTTP 전송에 필요한 모든 부가정보
- ex) 메시지 바디의 내용, 메시지 바디의 크기, 압축, 인증, 요청 클라이언트(브라우저) 정보, 서버 애플리케이션 정보, 캐시 관리 정보 ...
- 필요시 임의의 헤더 추가 기능
- helloworld: hihi
HTTP 메시지 바디 (message body)
- 실제 전송할 데이터
- HTML 문서, 이미지, 영상, JSON 등등 byte로 표현할 수 있는 모든 데이터 전송 가능
단순함 확장 가능
- HTTP 는 단순하다. 스펙도 읽어볼만 ...
- HTTP 메시지도 매우 단순
- 크게 사용하는 표준 기술은 단순하지만 확장 가능한 기술!
'HTTP' 카테고리의 다른 글
[HTTP] HTTP 웹 기본 지식 - HTTP 상태 코드 (0) | 2022.04.20 |
---|---|
[HTTP] HTTP 웹 기본 지식 - HTTP 메서드 활용 (0) | 2022.04.19 |
[HTTP] HTTP 웹 기본 지식 - HTTP 메서드 (0) | 2022.04.19 |
[HTTP] HTTP 웹 기본 지식 - URI와 웹 브라우저 요청 흐름 (0) | 2022.04.18 |
[HTTP] HTTP 웹 기본 지식 - 인터넷 네트워크 (0) | 2022.04.18 |