home
🔫

[메디스트림 개발팀] HTTP (HyperText Transfer Protocol)

먼저 알려드립니다.

* 표시가 있는 단어는 궁금해요! 앞에 있는 화살표를 클릭하시면, 부가적인 설명을 보실 수 있습니다.
표시 오른쪽에 있는 부분을 클릭하시면, 자세한 설명을 보실 수 있습니다.
안녕하세요, 메디스트림 프론트엔드 개발자 박민지입니다. 이번 글은 사내 기술 세미나 때 이야기했던 주제 'HTTP란 무엇인가'를 정리한 글 입니다. - 컴퓨터 네트워크의 개념적인 이해가 더 필요하시다면 이 영상을 한번 보시면 좋습니다. 이 글은 아래의 순서로 기술하였습니다. 목록의 제목을 클릭하시면 해당 설명으로 바로갑니다.

HTTP 란 ?

HTTP(HyperText Transfer Protocol) Client( Internet Explorer, Chrome, Firefox) 와 Server( 웹서버 eg: httpd, nginx, etc...)간의 웹 상에서의 통신을 위한 Protocol(규약)입니다. 현대 인터넷(웹 브라우저, 서버, 웹 어플리케이션 등)의 공용어라고 할 수 있습니다. ( HTTP 또는 여기 클릭해주세요 )
HTTP 통신은 패킷 교환 네트워크 프로토콜(컴퓨터/네트워크 장비에서 널리 쓰이는)들이 계층화 된 집합인 TCP/IP 를 통해 이루어집니다. 아래 그림이 TCP프로토콜의 작동 방식 입니다.
궁금해요! TCP/IP 란 ?
궁금해요! OSI 란 ?

요약 - "음~ 그러니까, HTTP는 웹 상에서 정보를 주고받기 위한 인터넷 공용어로군!"

그런데, 또 의문이 생깁니다. HTTP HTTP1.1 HTTP2 HTTPS 등.. 무수한 HTTP들은 도대체 뭘까요?

HTTP/1.1 ?

HTTP의 첫번째 표준 버전인 HTTP/1.1은, HTTP/1.0이 나온지 몇 달 안되서 1997년 초에 공개되었습니다.

...

지금은 상상도 할 수 없는 화면이지만, '인터넷' 하면 위의 화면이 떠오르던 시절이 있었습니다. 세월이 흐르면서 컴퓨터도 발전하고, 네트워크 기술도 발전하고, 사람들이 인터넷 상에서 나누고 싶은 정보의 수준도 발전합니다. 이에 따라, HTTP/1.1의 아래와 같은 단점이 점점 두드러지게 됩니다.
HTTP/1.1의 단점 1. HOL(Head Of Line) Blocking - 특정 응답의 지연. 네트워크에서 같은 큐에 있는 패킷이 첫 번째 패킷에 의해 지연될 때 발생하는 성능 저하. 2. RTT(Round Trip Time) 증가 - HTTP/1.1의 경우 일반적으로 Connection 하나에 요청 한개 처리. 매 요청 별 Connection 생성 > TCP 3-way Handshake 반복, 불필요한 RTT증가, 네트워크 지연 초래. 3. 무거운 Header - 매 요청 마다 중복 헤더 값 전송. 서버 도메인 관련된 쿠키 정보도 헤더에 함께 포함 됨. 그 외에도…텍스트로 데이터 전송(바이너리아님) - TCP 위에서 작동(3hand-shake 계속 발생) - 동기적으로 데이터 요청 진행(1개 요청하고 대기, 도착하면 그다음 데이터 요청) 등..
단점 해결을 위해 해왔던 것들 1. Image Spriting 2. Domain Sharding 3. Minified CSS/Javascript 4. Load Faster - 옛 방식 : 스타일시트 파일을 HTML 문서 상위에 배치, 스크립트 파일을 HTML 문서 하단에 배치. 전체 DOM을 파싱하기 전까지 스크립트 파일을 받아오지 못함. - 최근 방식 : async / defer head 태그에 자바스크립트 삽입 시 async 키워드나 defer 키워드 사용해서 삽입하는 방법. 5. Data URI Scheme - HTML 문서 내 이미지 리소스를 Base64로 인코딩된 이미지 데이터로 직접 기술하여 네트워크 요청을 줄이는 방법.
..힘들고 복잡하고 긴- 고뇌의 시간을 개발자들이 겪고 있을 무렵, 구글이 등장합니다!
“제목은  SPDY(스피디)으로 하겠습니다. 근데 이제 HTTP를 곁들인..” - End-user가 느끼는 latency나 네트워크, 서버 리소스 사용량 등과 같은 성능 위주로 개선. - HTTP/2 초안의 참고 규격이 됨. - 지금은 QUIC를 뚝딱 뚝딱 중이네요, QUIC (http/3) 구글의 SPDY를 초안으로, 드디어 현재 우리가 많이 사용하는 HTTP/2가 탄생했습니다.

HTTP/2 ?

http2 공식 github 페이지의 서문에서 말하는 http2의 목적은 아래와 같습니다.
"HTTP/2 is a replacement for how HTTP is expressed “on the wire.” It is not a ground-up rewrite of the protocol; HTTP methods, status codes and semantics are the same, and it should be possible to use the same APIs as HTTP/1.x (possibly with some small additions) to represent the protocol. The focus of the protocol is on performance; specifically, end-user perceived latency, network and server resource usage. One major goal is to allow the use of a single connection from browsers to a Web site."
요약하자면, "HTTP/2의 초점은 성능에 있다." 입니다. HTTP/2 명세인  RFC 7540는 2015년 5월 발행됩니다. 이후 인터넷과 WWW에 널리 구현, 배포되었습니다. 새로운 것이 아니라, 기존의 HTTP/1.1을 발전시킨 버전입니다. 개선 내용 1. Multiplexed Streams - Connection 한 개로 동시에 여러개 메시지를 주고 받음. 순서 상관없이 Stream으로 응답. (HTTP/1.1의 Connection Keep-Alive, Pipelining의 개선 버전) HTTP 1.1 - HTTP 요청과 응답 구성 메시지 (Header / Body 등의 데이터) HTTP2 - 메시지는 다수의 Frame으로 구성 (Frame과 Stream 개념 추가) Frame: HTTP2 통신에서 데이터를 주고받을 수 있는 가장 작은 단위 (헤더 프레임, 데이터 프레임으로 구성) Stream: 클라이언트와 서버 사이에 맺어진 연결을 통해 양방향으로 데이터를 주고 받는 한 개 이상의 메시지 2. Stream Prioritization - 리소스 간의 의존 관계에 따른 우선 순위 설정 가능. 3. Server Push - 클라이언트가 요청하지 않은 리소스를 사전에 서버가 푸쉬를 통해 전송. 클라이언트 요청의 최소화. 4. Header Compression -  Header Table과 Huffman Encoding 기법을 사용 처리. HPACK 압축방식이라고 함. (별도 명세서(RFC 7531)로 관리)
요약하자면, HTTP/2는 헤더 필드 압축을 도입했습니다. 동일 연결에서 다중 동시 교환을 허용함으로써, 네트워크 리소스를 효율적으로 사용하게 합니다. 그래서 지연 시간이 줄어듭니다. HTTP 헤더 필드에 효율적인 코딩을 사용합니다. 요청의 우선순위 지정을 허용하여 더 중요한 요청이 더 빨리 완료되도록 성능이 개선되었습니다. 바이너리 메시지 프레이밍을 사용하여 보다 효율적인 메시지 처리가 가능합니다. 이 프로토콜은 HTTP/1.x에 비해 더 적은 TCP 연결이 사용되므로, 네트워크에 더 친화적입니다. 즉, 다른 흐름과의 경쟁이 줄어들고 연결 수명이 더 길어지므로 가용 네트워크 용량의 활용도가 향상됩니다. 출처 : HTTP/2 소개  |  Web Fundamentals  |  Google Developers
HTTP2는 TLS 기반에서 작동됩니다.(HTTP/2 프로토콜 이용의 조건으로 TLS Handshake 를 전제) 즉, TLS / SSH 인증서 가 필요합니다.
궁금해요! TLS 란 ?
HTTPS(HTTP Secure) - TLS를 사용해 암호화된 연결을 하는 HTTP 웹사이트 주소가 https:// 로 시작 됨. 기본 포트443. * TLS와 HTTPS TLS는 다양한 종류의 보안 통신을 하기 위한 프로토콜입니다. HTTP뿐만이 아니라  FTP(파일전송프로토콜),  SMTP(메일전송프로토콜)와 같은 프로토콜에도 적용할 수 있어요. HTTPS는 TLS 위에 HTTP 프로토콜을 얹어 보완된 HTTP 통신을 하는 규약인거죠. * 네이버나 은행 등 최근 웹 사이트 주소창에 보면 앞에 자물쇠가 붙는 걸 아시나요? 그게 바로 '해당 웹사이트는 HTTPS가 적용되었다, 안전이 인증된 사이트다' 라는 힌트(!)입니다.
이제, HTTP 와 HTTPS 의 작동방식은 어떤 차이가 있는지 알아볼까요?

HTTP vs HTTPS

1.
HTTP 에서 클라이언트의 동작
웹서버의 80번 포트로 TCP 연결
요청메세지 보냄,
응답메세지 받고,
커넥션 종료.
2.
HTTPS 에서 클라이언트의 동작
웹서버의 443번 포트로 연결.
TCP 연결
클라이언트와 서버는 암호법 매개 변수와 교환 키를 협상하며 SSL(Secure Socket Layer) 계층 초기화.SSL은 암호화된 링크를 수립하기 위한 표준 보안 기술.핸드셰이크 완료 시 SSL 초기화 완료. 클라이언트는 요청 메세지-TCP로 보내지기 전에 암호화 된-TCP 를 보안 계층에 보냄.
SSL을 통해 보내진 HTTP 요청 / TCP를 통해 보내진 암호화 된 요청
SSL 닫힘을 통지.
TCP 커넥션 종료.
그림으로 보면 둘의 차이는 아래와 같습니다.
성능과 신뢰성이 향상된 것이 한 눈에 보이시나요?

마치며

'HTTP'를 아주 깊고 자세히 들여다 본 시간이었습니다. 페이지 로딩 속도 개선을 위해 포토샵에서 이미지를 합치고, 1px씩 css를 수정해가며 Image sprite를 하던 그 시절이 새삼 떠오릅니다. 기술의 발전이 이토록 빠르게 우리의 삶을 변화시키고 있다니 감동이 밀려오네요. HTTP/2가 도입된 지 얼마 안된 것 같은데, 구글은 HTTP/3를 (벌써!) 제안하고 사용 중입니다. 끊임없이 발전하는 기술의 역사 속에서 함께 성장한다는 것은 즐거운 일입니다. 메디스트림은 오늘도 성장하고 있습니다. 다음 편도 기대해주세요! 감사합니다.

References

HTTP 개요 : HTTP 개요 - HTTP | MDN HTTP2 : HTTP2 SPDY : SPDY HTTP3: HTTP3