HTTP란? - 사전 지식
MDN이나 AWS 기술 블로그를 보면 가장 첫 번째 줄에 아래와 같이 HTTP를 말해줍니다.
MDN
HTTP는 HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜입니다. HTTP는 웹에서 이루어지는 모든 데이터 교환의 기초이며, 클라이언트-서버 프로토콜이기도 합니다.
AWS
HTTP(Hypertext Transfer Protocol)는 클라이언트와 서버 간 통신을 위한 통신 규칙 세트 또는 프로토콜입니다.
즉, HTTP는 클라이언트와 서버 간 통신을 위한 규칙이며 클라이언트와 서버 간에 데이터를 주고받는 응용 계층 프로토콜입니다.
또 여기서 재밌는 사실이 있습니다. 물론 저한테만 재미있을 수 있는 내용입니다..
참고: MDN
연결은 전송 계층에서 제어되므로 근본적으로 HTTP 영역 밖입니다. HTTP는 연결될 수 있도록 하는 근본적인 전송 프로토콜을 요구하지 않습니다. 다만 그저 신뢰할 수 있거나 메시지 손실이 없는(최소한의 오류는 표시) 연결을 요구할 뿐입니다. 인터넷상의 가장 일반적인 두 개의 전송 프로토콜 중에서 TCP는 신뢰할 수 있으며 UDP는 그렇지 않습니다. 그러므로 HTTP는 연결이 필수는 아니지만 연결 기반인 TCP 표준에 의존합니다.
이처럼 HTTP는 데이터를 교환하는 프로토콜이고 신뢰성 있는 데이터 전송을 위해 신뢰성 있는 연결지향 프로토콜 TCP를 사용해 연결을 하고 데이터를 전송하는 것으로 이해됩니다.
(하지만, HTTP/3.0은 UDP를 기반으로 전송된다 하니 이부분은 더 공부가 필요할 듯합니다.)
그렇기 때문에 HTTP는 데이터를 전송하기 전에 TCP를 사용해 연결을 우선시합니다.
HTTP/1.0과 HTTP/1.1 차이
- Keep Alive 기본 설정 차이
- 파이프라이닝 유무
- 호스트 헤더
이 외에도 여러 가지 기능이 추가가 되었지만, 대표적인 차이는 위에 3가지라고 생각됩니다.
HTTP/1.1까지 커넥션 모델은 아래와 같이 3가지가 존재합니다.
아래는 MDN에서 가져온 이미지입니다.
커넥션 유지(Persistent connection)는 바로 Keep Alive 커넥션이라고도 불립니다.
파이프라이닝은 밑에서 설명하겠지만 여러 가지 문제가 있어 HTTP/2.0에서 더 나은 기술인 멀티플렉싱으로 대체되었습니다.
그럼 해당 기술들을 좀 더 자세히 살펴보겠습니다.
Keep Alive(Persistent connection, 커넥션 유지)
HTTP/1.0과 HTTP/1.1 차이점에서 가장 혼란스러웠던 건 1번과 2번이었는데, 1번 같은 경우는 일부 블로그에서는 HTTP/1.1에만 존재하는 설정으로 알려주는 곳이 존재했기 때문입니다.
하지만 제가 알아본 바로는 Keep Alive는 HTTP/1.0도 가능하다는 것입니다. 단, Keep Alive를 하기 위해 HTTP/1.0은 명시적으로 헤더에 추가해줘야 하고 HTTP/1.1은 기본 설정이 되어있다는 점입니다.
Keep Alive는 설정해 놓은 시간 동안 연결을 열어 놓고 여러 요청에 재사용함으로써 새로운 TCP handShake 비용을 아끼고 TCP 성능 향상 기능을 활용할 수 있는 기능입니다.
단, 연결은 영원히 열려있지 않고 유휴 커넥션들은 설정 시간 후에 닫히게 됩니다.
단점
- 영속적인 커넥션은 유휴 상태일 때 서버 리소스를 계속 소비합니다.
- 과부하 상태에서는 서비스 거부 공격(Dos attacks)을 당할 수 있다고 합니다. 이 부분은 왜 공격을 당할 수 있는 걸까요? 흠.. 공부가 필요할 것 같습니다.
파이프라이닝
파이프라이닝은 HTTP가 1.0에서 1.1로 버전이 올라가면서 추가된 기능입니다. 파이프라이닝은 Keep Alive에서 더 나아가, 응답조차도 기다리지 않고 연속적인 요청을 보내서 네트워크 지연을 더욱 줄이는 기능이며, 커넥션의 지연을 회피하고자 하는 방법입니다.
파이프라이닝은 요청을 수신하고 처리를 위해 대기열에 넣습니다. 그런 다음 서버는 요청이 수신된 순서대로 클라이언트에 응답을 다시 보냅니다.
단점
MDN에 따르면 전송 중인 리소스의 크기, 사용될 효과적인 RTT, 그리고 효과적인 대역폭은 파이프라인이 제공하는 성능 향상에 직접적으로 영향을 미치기 때문에 파이프라이닝을 정확히 구현해 내는 게 복잡하다고 말해주고 있습니다.
또한, 이런 내용을 모른다면, 중요한 요청 데이터가 덜 중요한 응답 데이터에 밀려 지연될 수 있다고 합니다.
파이프라이닝은 응답 처리를 순차적으로 처리하기 때문에 HOL Blocking 문제가 발생합니다.
이러한 이유로 파이프라이닝은 더 나은 알고리즘인 멀티플렉싱으로 대체되는데, 이는 HTTP/2.0에서 사용됩니다.
호스트 헤더
HTTP/1.0에서는 하나의 IP당 하나의 도메인만 운영할 수 있었지만, HTTP/1.1에서는 호스트 헤더 덕분에, 동일 IP 주소에 다른 도메인을 호스팅(가상 호스팅)이 가능해져 1개의 IP에 N개의 도메인이 지원이 가능해졌습니다.
'컴퓨터 과학(CS)' 카테고리의 다른 글
[네트워크] 음성채팅이 진행되는 과정 [UDP][엄탱] (12) | 2023.11.16 |
---|---|
[컴퓨터 과학] HTTP의 진화 #3 [HTTP/1.1과 HTTP/2.0] (1) | 2023.10.17 |
[컴퓨터 과학] HTTP의 진화 #1 - [HTTP/0.9와 HTTP/1.0] (0) | 2023.10.03 |
[컴퓨터 과학 - CS]동기와 비동기 / 블로킹 논블로킹 (0) | 2022.09.28 |