코드 그라데이션
HTTP 버전별 차이 본문
HTTP 1.0
- 단일 연결을 통한 단방향 통신.
- 각 요청마다 새로운 연결을 맺어야 했으며, 지속적인 연결이 없었기 때문에 매번 연결을 다시 설정해야 했다.
- 상태 유지가 어려웠고, 헤더에 버전 정보가 없었기 때문에 통신이 간단했으나 기능이 제한적이었다.
- 즉, 요청이 3번 오면 3번의 연결.
- 매우 비효율적
HTTP 1.1
- Keep-Alive 연결 지원으로 단일 연결을 통해 여러 요청 및 응답을 처리할 수 있게 되었다. 이로써 연결 설정에 드는 오버헤드 감소.
- 파이프라인화를 지원하여 여러 요청을 한 번에 보내 응답을 기다리지 않고 동시에 처리 가능.
- Host 헤더 도입으로 하나의 서버에서 여러 도메인을 호스팅하는 가상 호스팅을 지원.
- 캐싱 기능 강화 등으로 전반적인 성능 향상.
- 이제 3번 요청이 오면 3번 연결 굳이 안 해도 된다.
HTTP 1.1 vs HTTP / 2
HTTP/2
- 이진 프레임(바이너리 프레임) 형식 도입으로 더 효율적인 데이터 전송 가능.
- 다중화(multiplexing) 지원으로 여러 요청 및 응답을 동시에 처리 가능.
- 헤더 압축과 스트림 우선순위를 통해 더 빠른 전송.
- 서버 푸시(Server Push) 기능 도입으로 클라이언트 요청 없이 서버에서 데이터를 전송할 수 있음.
정리하자면, 데이터들을 중첩이 가능하도록 프레임 단위로 자른다.
잘라서 동시에 보낸다.
리소스 개수가 점점 많아질수록 이런 식의 중첩된 동시전송이 가능해진다면 I/O 성능이 말도 안되게 좋아진다.
wait에 의한 response가 없다.
왜 빠르냐?
- request에 대한 response를 요청의 순서와 상관 없이 전송 가능한 형태로부터 데이터를 쭉쭉쭉 보내줘 버리는 것.
- 물론 여기서 데이터가 먼저 와야만 랜더링이 가능한 CSS라든가 그런 차이점은 있을 수 있음.
HTTP/2 간략히 보기
HTTP/2 - 바이너리 프레이밍 레이
HTTP/2 - 서버 푸시
HTTP/2 - 헤더 압축
SSL (Secure Socket Layer)
보안 소켓 레이어라는 의미.
SSL은 인터넷 상에서 정보를 안전하게 전송하기 위한 프로토콜.
초기에는 주로 웹 브라우저와 웹 서버 간의 통신에서 사용되었다.
SSL은 데이터의 기밀성과 무결성을 제공하며, 통신 상대방의 신원을 확인하는 보안 기술을 제공한다.
주로 웹에서는 웹 브라우저와 웹 서버 간의 안전한 통신을 위해 사용되었다.
즉, TCP/IP 소켓 통신 내용을 암호화 시켜주는 역할이라고 생각하면 된다.
TSL (Transport Layer Security)
보안 통신을 위한 프로토콜로, 데이터의 기밀성과 무결성을 제공하며 통신 상대방의 신원을 확인할 수 있도록 하는 역할.
TLS는 주로 웹 브라우저와 웹 서버 간의 통신에서 사용되며, HTTPS(보안 HTTP)의 핵심 기술 중 하나다.
TLS는 이전 버전인 SSL(보안 소켓 레이어) 프로토콜을 대체하고 개선한 것이다.
HTTP/2 에서는 TLS 적용이 선택사항이다.
앞서 말한 것처럼 바이너리 프레이밍이 핵심인데, 굳이 아스키 코드로 변경하지 않고, 바이너리 데이터를 패킷 쪼개듯 프레임 단위로 잘라서 헤더와 함께 보낸다 ===> 동시다발적 전송 가능!!
HTTP / 3
- 전송 계층으로 TCP 대신에 UDP를 사용하여 성능 향상.
- QUIC(Quick UDP Internet Connections) 프로토콜을 기반으로 함.
- 연결 설정 및 해제에 따른 지연을 최소화하고 신속한 데이터 전송을 가능케 함.
- 헤더 압축 및 다중화 기능을 그대로 유지하면서 보다 안전하고 효율적인 통신 지원.
요약하자면, TCP 프로토콜은 전송 제어를 하는데, 이는 데이터 손실을 방지하고 전송의 안정성을 보장한다.
그런데 UDP는 흐름 제어를 하지 않는다. 대신 속도가 엄청나게 빨라진다는 장점이 있다.
이 흐름 제어를 프로토콜 수준에서 하는 게 아니라, 위에 있는 http 수준에서 하겠다는 Flow-control 개념으로 퀵이 등장.
TLS는 필수가 되었고, 보안성이 매우 향상되었다.
HTTP 버전별 비교
'백엔드 면접' 카테고리의 다른 글
WAF와 Proxy 구조 (0) | 2024.03.25 |
---|---|
IPS와 Inline 구조 (1) | 2024.03.24 |
브라우저에 URL을 입력하면 일어나는 일 (0) | 2024.03.21 |
운영체제 구조(User mode와 Kernel mode, JVM) (0) | 2024.03.20 |
웹 서비스 구조 - 확장 세 번째 (0) | 2024.03.19 |