이 글은 면접을 위한 CS 전공지식노트의 책을 읽고 학습 후 스터디 공유를 위한 글입니다.
HTTP → 어플리케이션 계층
💡 RTT(Round Trip Time)
패킷이 목적지에 도달하고 나서 다시 출발지로 돌아오기까지 걸리는 시간.
즉, 패킷 왕복 시간
책에서는 이미지 스플리팅이라고 소개되었는데, 저자님께서도 용어에 대한 피드백 인정함.(https://www.inflearn.com/questions/659669/이미지-스플리팅-용어)
많은 이미지를 다운로드 받으면 과부하 → 여러개의 이미지가 모여있는 하나의 이미지를 다운로드 받고 이를 background-image의 position을 이용해 이미지 표시
네이버의 이미지 스프라이트
코드의 개행문자, 빈칸을 없애 코드의 크기를 최소화하는 방법
이미지를 64진법 문자열로 인코딩 하는 방법
💡 일반적으로 이미지를 HTTP 요청을 통해 전송하는 경우, 클라이언트는 서버에게 이미지 파일의 URL을 제공하고, 서버는 해당 URL로부터 이미지를 다운로드하여 응답으로 전송합니다. 이러한 방식은 클라이언트와 서버 간의 네트워크 통신이 필요하고, 추가적인 HTTP 요청이 발생하게 됩니다.
BASE64를 사용하는 이유.
'통신과정에서 바이너리 데이터의 손실을 막기 위해서'이다.
ASCII 문자는 대표적으로 다음과 같은 문제를 발생시킬 수 있다.
위와 같은 문제로 아스키는 시스템간 데이터를 전달하기에 안전하지 않다.
Base64는 ASCII 중 제어문자와 일부 특수문자를 제외한 64개의 안전한 출력문자만 사용한다.
HTML 또는 Email과 같이 문자를 위한 media에 Binary Data를 포함해야 될 필요가 있을 때, 포함된 Binary Data가 시스템 독립적으로 동일하게 전송 또는 저장되는 것을 보장하기 위해서 사용한다.
HTTP/1.0과의 차이점 → keep-alive가 있었지만 표준화 되어 있지 않았고 1.1부터 표준화 되어 기본 옵션으로 설정(한 번 TCP 초기화 이후 여러 파일 송수신 가능)
같은 큐에 있는 패킷이 그 첫번째 패킷에 의해 지연될 때 발생하는 성능 저하
HTTP/1.1 통신의 경우 요청-응답 쌍은 항상 순서를 유지하고 동기적으로 수행 → 지연 패킷에 따라 이후 패킷들의 지연이 생김
HTTP/1.1의 헤더에는 쿠키 등 많은 메타 데이터 포함 & 압축이 되지 않아 무거웠다.
SPDY 프로토콜에서 파생된 HTTP/1.x 보다 지연 시간을 줄이고 응답 시간을 빠르게 할 수 있다.
HTTP | SPDY | |
---|---|---|
Secure | Not Default | Default |
Header Compression | No | Yes |
Multiplexing | No | Yes |
Full-Duplex | No | Yes |
Prioritization | No(브라우저 자체 휴리스틱 사용) | Yes |
Server Push | No | Yes |
DNS Lookup | More | Less |
Connections | More | Less |
HTTP 2.0에 대부분의 장점에 해당하는 기능을 포함되었기 때문에 이제는 사용 잘 안함.
💡 HTTP/2 프로토콜은 성능 향상에 가장 초점을 맞추어 개발되었습니다. 다중화, 헤더 압축, 우선순위화, 프로토콜 협상과 같은 주요 기능은 개방 프로토콜인 SPDY에서 발전된 개념이지만, SPDY는 비표준 프로토콜이었습니다.
출처: 구글 개발 블로그(https://developers-kr.googleblog.com/2015/02/hellohttp2.html)
브라우저들의 버전이 올라감에 따라 지원을 중단하는 것을 볼 수 있다.
**허프만 코딩 압축 알고리즘**
을 사용해 헤더를 압축하는 HPACK 압축 형식을 가짐💡 허프만 코딩
문자열의 빈도수를 이용해 압축
- 빈도가 높은 정보는 적은 비트 수 사용
- 빈도가 낮은 정보는 많은 비트 수 사용
→ html 파일에는 css, js 파일이 포함되기 마련 → html을 파싱하면서 그 안에 들어있던 css 파일을 서버에서 푸시해 클라이언트에 먼저 줄 수 있다.
사진 출처: 면접을 위한 CS 전공지식노트 서적