1.HTTP
HyperText Transfer Protocol 의 약자로 지금은 모든 것을 HTTP 메시지에 담아서 전송.
- IMAGE,음성 , 영상, 파일
- JSON, XML (API)
- 거의 모든 형태의 데이터 전송 가능
- 서버 간 데이터 송수신에도 대부분 HTTP 를 사용한다. (TCP만 직접 이용하는 경우는 거의 없음)
2.HTTP의 역사
HTTP 2.0과 3 버전은 성능 개선에 초점을 맞추었기 때문에 1.1 버전에 맞추어 정리
3. 기반 프로토콜
- TCP : HTTP/1.1 , HTTP/2
- UDP : HTTP/3
- 현재는 HTTP/1.1 주로 사용
4. HTTP 특징
- client - server 구조
- stateless protocol
- 비연결성
- HTTP message
- 단순하며 확장 가능
4-1 . client - server architecture
client 는 server에 요청 (request)을 보내고, 서버에서는 client에 응답(response)를 보냄
클라이언트와 서버를 개념적으로 분리하는 것은 각자 작업을 분담하므로 양쪽이 독립적으로 진화할 수 있게 한다는데 있어 중요하다.
- server -> 비지니스 로직, 복잡한 데이터를 다루는것에 집중
- client -> 서버에서 받아온 데이터를 이용해 사용성이 좋은 UI를 어떻게 제공할지에 대해서만 집중 가능
=> HTTP는 클라이언트 서버 아키텍쳐를 따르는 프로토콜로 통신을 하는 상황에서 클라이언트와 서버로 역할이 나뉜상태에서 메세지를 주고 받는다.
4-2. stateless protocol
- 서버는 클라이언트의 상태를 보존하지 않는다.
- +) 서버의 확장성 높아짐
- -) 클라이언트가 추가 데이터를 전송해야한다.
?Stateful 과 Stateless 차이점은?
- stateful -> 통신하는 클라이언트의 정보를 유지한 상태에서 통신
- 통신하던 서버 고장시 작업 불가능
- stateless -> 통신하는 클라이언트의 정보를 유지하지 않고 통신
- 상태 정보가 필요없기 때문에 통신하던 서버 고장시 다른 서버로 대체 가능 -> 수평확장에 유리하다.
- [stateless 한계]
- 모든것을 무상태로 설계할 수는 없다. 예를 들어 로그인이 필요없는 단순 서비스라면 무상태로 구현이 가능하다.
- 그러나, 로그인같이 상태 유지가 필요할 경우 로그인했다는 상태 정보를 서버에 유지하며 브라우저 쿠키와 서버의 세션 등을 결합해 상태 유지에 사용해야한다. -> 상태 유지는 최소한으로만 사용해야
4-3. 비연결성
일반적인 TCP/IP를 사용하여 연결을 유지하는 모델을 생각해보자면, 연결을 유지하는 모델의 경우 자원을 주고 받고도 계속해서 서버와 연결을 유지하기 때문에, 자원의 낭비가 심하다.
반면, 연결을 유지하지 않는 모델은 필요한 정보를 주고받는 즉시 연결을 해제하므로 자원을 절약하는 방식을 취하려는 방식으로 동작한다.
- HTTP는 기본적으로 연결을 유지하지 않는 모델에 해당함
- 일반적으로 초 단위 이하의 빠른속도로 응답
- 수천명이 1시간동안 서비스를 사용한다 하더라도 실제 서버에서 동시에 처리하는 요청은 수십 개 이하로 매우 작다. -> ex. 동시에 검색하는 경우 별로없음
- 서버 자원 효율적으로 활용 가능
[비연결성의 한계]
- TCP/IP 연결 매번 새로 맺어야함 -> 3 - way handshake에 따른 시간 추가적 소모
- 웹 브라우저로 사이트 요청시 HTML 뿐 아니라 css,js , 추가 이미지 등의 부가 파일들 같이 다운로드
- 지금은 HTTP 지속 연결로 이러한 문제 해결 -> 한번의 요청에 따른 HTML,css, javascript 을 받아오는 동안에는 유지할 수 있도록 개선
[stateless 기억 ! (-> 서버 개발자들이 주로 어려워함) ]
- 6시 선착순 이벤트 (-> 대용량트래픽)
- 이런 경우 머리를 쥐어 짜내서 stateless로 최대한 구현해야 대용량 트래픽에 효율적인 대응 가능
5. HTTP message
기본적으로 HTTP 메시지는 요청, 응답 상황에 따라 다르게 생겼다.
HTTP message에는 필수적으로 start-line, header와 message body를 구분하기 위해서 공백 라인이 포함되어야한다.
5-1. Start-line
start-line 은 request에서는 request-line이고 response 에서는 status-line 이다.
- request - line -> method SP(공백)/request-target SP HTTP-version CRLF(엔터)
- request-target -> /로 시작하는 절대 경로 [?쿼리]형식 따름
- status - line -> HTTP-version SP status-code SP reason-phrase CRLF
- statue-code(상태코드)
- 200: 성공
- 400:client request error
- 500:server error
- ...etc
- reson-phrase : 사람이 이해 가능한 짧은 상태 코드 설명
5-2. HTTP method (req)
- GET : 조회
- POST : 요청내역처리
- PUT : 수정
- DELETE : 삭제
- PATCH : 수정
-> 서버가 수행해야 할 동작 지정을 위해 사용
5-3. HTTP header
- request는 host의 domain name 작성
- response 는 field-name과 field-value 쌍의 목록 작성
- field-name:OWS field-value OWS (OWS -> 띄어쓰기 허용)
- filed-name -> 대소문자 구별 x, field-value -> 대소문자 구별
[HTTP 헤더 사용 목적]
- HTTP 전송에 필요한 모든 부가 정보를 담음
- 표준 헤더는 너무 많아 이후 정리 ^^
- 필요한 경우 임의의 헤더 추가 가능
김영한님의 모든 개발자를 위한 HTTP 웹 기본 지식을 수강하면서 정리한 내용입니다.
'CS > 네트워크' 카테고리의 다른 글
보안 프로토콜 : VPN, IPSec, SSL/TLS (0) | 2024.06.21 |
---|---|
HTTP vs HTTPS 외 프로토콜 종류 (0) | 2024.01.19 |
[모든 개발자를 위한 HTTP 웹 기본지식] 04- Http 메서드 (0) | 2023.10.07 |
[모든 개발자를 위한 HTTP 웹 기본지식] 01- 인터넷 네트워크 (0) | 2023.10.03 |
[네트워크] 웹풀스택과정 4W_10 _01: Server (0) | 2023.08.08 |