CS탭을 신설했다.

 

글을 보는 사람 중 롤악귀들은 (내가 그렇다) 미니언 막타? 라는 생각을

 

굉장히 연로한 FPS 유저라면 카운터스트라이크를 떠올리겠지만 

 

애석하게도 재미없는 컴퓨터 과학 이야기가 될것이다.

 

 

얼마전 HTTP1.1 / 2.0의 차이가 무엇일까요? 라는 질문을 받았다. 

 

내 대답은 심플했다.

 

"메이저 업데이트가 있었나 보네요"

 

이렇게 대답하면 실력없는거 티 나는데..이제부터 아는척이라도 해야겠으니 먼 과거의 기억과 구글을 더듬으며

 

정리해보겠다.

 

 

HTTP1.1과 2.0의 차이 알기전에 이글부터봐라

https://developer.mozilla.org/ko/docs/Web/HTTP

 

HTTP | MDN

하이퍼텍스트 전송 프로토콜(HTTP)은 HTML과 같은 하이퍼미디어 문서를 전송하기 위한 애플리케이션 레이어 프로토콜입니다. 웹 브라우저와 웹 서버간의 통신을 위해 설계되었지만 다른 목적으로

developer.mozilla.org

 

윗 링크에는 여러 목차들이 있는데 전부 볼 필요는 없다 하지만 보면 좋다

 

 

 

1. 설계 방식의 변경

 

서로 통신을 행할땐 1.1은 요청과 응답이 순차처리되는 방식이였다.

 

여러개의 요청이 접수되어도 요청 -> 응답 -> 요청 -> 응답 .... 같은 방식을 가지고 있었고

 

요청이 여러건이 있어도 응답이 오지않으면 요청을 보내지 않았다 

 

이러한 형태는 지금의 우리가 보아도 

 

라는 생각이 절로 난다(물론 웃자고 하는 이야기다)

 

이러한 설계는 동시 전송 문제와 다수의 정보를 처리하는데 문제가 있었다. 하지만 당시에는 큰 문제가 아니였는데

 

이유는 심플했다 

 

"사용자가 그걸 체감할만큼 인터넷이 빠르지않았고 많은 요청이 없었다" 

 

(나에게 이걸 알려준 사람은 IT업계를 발전시키는 방법은 개발자에게 로딩시간을 지연시켜 멍하니 화면 바라보게 하면 된다고 했다)

 

하지만 시대는 바야흐로 2023년이다.

 

많은 요청 더 빠른 속도 더 많은 처리 더 많은 응답을 갈구하고 있는 시대이다.

 

이를 개선시키고자 여러 시도가 있었으나 구조적인 문제(설계상 이슈)로 인해 크게 발전하지 못했고 결국 

 

이 문제는 HTTP 2.0이 등장하고 멀티플렉싱이라는 요청은 요청대로 응답은 응답대로 진행시키는 구조가 정착되며

 

해결되었다.

 

2. 절약 그리고 압축

 

1.1의 문제는 속도도 문제였지만 자원을 낭비하는 경향이 매우컸다.

 

그 원인은 두가지로 지목되었는데

 

첫번째는 모든 요청과 응답마다 헤더 정보를 중복해서 보내기에 문제가 되었고

 

두번째는 클라이언트가 요청하지 않은 자원을 서버에서 보내주는 경우가 문제를 일으켰다

 

첫번째는 우리가 이해할수있는 경우다. 그런데 아무리 돌이켜봐도 두번째는 이해할수없다.

 

두번째 경우에는 숨은 이유가 있다

 

1.1의 구조에서는 클라이언트가 서버에게 요청한 페이지와 함께 필요한 모든 파일들

 

(js,css 심지어 이미지까지!) 사용자가 보러갈지 말지도 모르지만 일단 주고 본다

 

아래를 보면 이것을 나타내는 용어가 adhoc이라는것을 알수있다

 

https://github.com/opentracing/opentracing.io/issues/158

 

What does "ad hoc HTTP calls" mean? · Issue #158 · opentracing/opentracing.io

In Section 1.4.3, in "The Big Picture" for explicit trace propagation, there is a cross-process called ad hoc HTTP calls. HTTP calls is easy to understand, but what is ad hoc? I am confused. @yuris...

github.com

이러한 불필요 자료(adhoc이라 부르는것들)는 분명 유용한 경우도 있었지만 대부분 그렇지 못했고

 

치명적인것은 이렇게 전달한것은 캐싱되지않은채 페이지를 떠나거나 이동하면 버려지고 새로 요청되는

 

악순환을 반복시켰고(개발자의 혈압도 오르게했다) 결국 2.0이 되면서

 

헤더 압축 그리고 서버 푸시 기능이 나오며 이러한 자원 낭비를 획기적으로 줄였다.

 

헤더 압축은 헤더 정보들(host,accept-language 등등..)을 텍스트에서 HPACK이라 불리는 압축방식으로

 

데이터를 인코딩하여 전달하는것이다. 표기상 50% 이상 줄이는데 성공했다는데...

 

예시를 한번 보고 넘어가도록 하자

 

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.5
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36

1.1은 이러한 형태의 청보들을 모두 담아 텍스트 형태로 전송하던것을...

 

\x0caccept\x1dtext/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\x10accept-encoding\x0bgzip, deflate, br\x0faccept-language\x08en-US,en;q=0.5\x0fuser-agent\x86Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36

아래와 같이 인코딩하여 전달된다.

 

서버 푸시기능은 이름에서 알다시피 기존에 모든 파일이 전달되던것을 서버가

 

이 웹페이지에 필요한 자원들을 미리 클라이언트에게 보내서 웹페이지의 로딩속도를 개선시키는것이다.

 

 

마지막은 보안이다.

 

심플하다 여러분도 알고있다 http는 이제 1.1이다. https가 2.0이다

 

불철주야 SSL 혹은 TLS 인증과 싸우고 있는 사람들이 있다 

 

이 SSL/TLS가 1.1에서는 선택사항이였던것이 필수사항으로 변경되며 모든 통신이 암호화 되는 이점을 얻었다.

 

그리고 1.1에서 자주 악용되던 헤더 인젝션 공격이 있었는데 이를 통해 여러가지 악의적인 동작,개인정보 유출이

 

되는 취약점이였는데 2.0에는 이를 수정했다.

 

 

 

 

이로써 HTTP1.1과 2.0의 차이를 알아보았다.

 

도움이 되었길!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'개발 > CS' 카테고리의 다른 글

리눅스 find와 grep의 차이  (1) 2024.01.02
SQL 에서 IS NULL 과 = NULL의 차이  (1) 2023.11.20
객체지향 그 잡힐듯 잡히지 않는 무언가  (0) 2023.04.10
SSR과 CSR의 차이  (0) 2023.04.10

+ Recent posts