HTTP에 대한 이해도의 차이가 중급 개발자로 Grow up할 가능성을 만든다.
▶ 기본적으로 집고 넘어가야 할 지식
HTTP는 OSI7Layer의 7계층에 존재하며 하단 계층을 가져간다.
• Ethernet II
Point-to-Point
Error Control
• IP
IP Address
Packet
• TCP
• Connection Oriented (Seq, Ack, Control Flags) • Flow Control
• PORT
※ 열결지향 (Connection Oriendted)
- 상대방이 누군지 아는것
- 신뢰성이 높다.
▶ URI
자원을 식별하기 위한 통일된 방식 (일관성)
Uniforn : 통일된 방식
Resource : 자원, 모든것
Indentifier : 식별자
"인터넷 망에서는 원격지에 있는 문서를 저장하고 있다."현재는 URL만 사용중
URI : Identifier
URL : Locator (위치)
URN : Name
※ fragment : 잘 사용하지 않는다. ex) 북마크 이동
※ Multi Media : 다양한 형식으로 존재하는 모든 정보 (동영상, 텍스트, 사진 등)
▶ HTTP
HyperText Transfer Protocol, 정보(문서)를 송수신하기 위한 프로토콜
간단한 프로토콜이며 여러가지 데이터를 전송하는데 쓰인다.
핵심 버전은 1.1이며 성능이 개선된 HTTP2와 UDP기반 구조인 HTTP3가 있다.
HTML 1.1 과 HTML 3의 차이
TCP와 UDP의 장점과 단점
TCP 의 장점 : TCP의 기능인 흐름제어, 혼잡제어가 가능하며 연결지향적이다. -> 신뢰성 +
TCP 의 단점 : 기능이 많아짐으로서 부가적인 잉여 데이터가 발생해 데이터의 오버헤드가 생긴다. 속도 -
UDP의 장점 : 제어 메커니즘이 없기 때문에 속도가 빠르다.
UDP 의 단점 : 신뢰성 -, 네트워크 망의 품질이 좋아야 사용이 가능하다.
※ QUIC : Google의 Jim Roskind가 설계한 범용 목적의 전송계층 포로토콜이다.
TCP의 기반에서 UDP를 채택하여 전달 속도의 개선과 더불어 클라이언트와 서버의 연결수를 최소화하고 대역폭을 예상하여 패킷혼잡을 피하게 하는것이 특징이다.
Naver는 HTTP3를 사용하지 않음에도 국내 네트워크 망의 품질덕에 빠른 속도를 유지 하고 있다.
▶ 클라이언트 / 서버 구조
Request Response 구조이다.
클라이언트는 서버에 요청을 보내고 응답을 대기한다.
서버가 요청에 대한 결과를 만들어서 응답한다.
과거에는 클라이언트와 서버가 분리 되어 있지 않았다.
클라이언트의 기능은 요청이며 서버의 기능은 응답하는것인데 이 역할을 나누고자 분리 하였고 역할이 분담이 됨에 따라 각 기능을 수행하는데 좋아졌다. 하지만 각 서로의 상태를 어떻게 유지 하느냐가 이슈화 되었다.
▶ Stateful (상태유지)
클라이언트 상태를 유지한다.
상태를 유지 하기 때문에 상태유지 비용이 발생한다. (서버의 자원이 사용된다.)
중간에 서버를 바꿀 수 없다.
고정적인 구조다.
모든 클라이언트의 정보를 서버가 기억하고 있다.
장점 : 데이터가 적다.
단점 : 서버 인프라에서 메모리가 많아짐에 따라 부하가 생긴다. 가용성이 낮다.
▶ Stateless (상태비유지)
클라이언트 상태를 유지 하지 않는다.
클라이언트가 자신의 상태를 지속적으로 알린다.
유연적인 구조다.
장점 : 상태를 유지 하지 않기 때문에 저장 비용이 발생하지 않는다. 가용성이 좋다.
단점 : 클라이언트가 모든 정보를 가지고 있으므로 전송 데이터가 많아진다.
· Stateless의 설계 한계
Web서비스 구현시 Stateless는 메세지가 많아진다는 단점이 있다.
하지만 확장성, 연속성을 위해 최대한 Statless로 설계한다.
▶ Connectionless (비연결성)
서버의 자원을 최소한으로 하여 클라이언트가 많은 경우 자원의 효율성, 가용성 측면에서 큰 장점이 있다.
상호간의 상태를 알 수 있고 상태를 저장 하고 있다.
Stateful 과 동일 하나 제한적이다. = 상태를 저장하지만 제한적으로 저장한다.
서버가 Fin을 보내는 순간 데이터도 같이 보낸다.
▶ HTTP Message
HTTP 통신할 때 쓰는 HTTP 데이터의 구조
Start-Line
· Request (요청) : request - line
· Response (응답) : status - line
HTTP Header
· 바디를 제외한 HTTP의 전송에 필요한 모든 정보
· 표준헤더가 과도하게 많다.
HTTP Message body
· 실제 전송할 바이트 스트림
Header : 메타 데이터의 형식
Body : 실직적으로 주고 싶은 것
method : 요청의 유형.
'HTTP' 카테고리의 다른 글
HTTP Method (0) | 2022.03.23 |
---|