서버로부터 파일을 가져올 때마다 TCP의 3-웨이 핸드셰이크를 계속해서 열어야 하기 때문에 RTT가 증가하는 단점이 있다.
cf. RTT
매번 연결할 때마다 RTT가 증가하니 서버에 부담이 많이 가고 사용자 응답 시간이 길어졌다
이를 해결하기 위해 이미지 스플리팅, 코드 압축, 이미지 Base64 인코딩 사용
많은 이미지를 다운로드받게 되면 과부하가 걸리기 때문에 많은 이미지가 합쳐 있는 하나의 이미지를 다운로드 받고 이를 기반으로 background-image의 position을 이용하여 이미지를 표기하는 방법
#icons>li>a{
background-image: url("icons.png");
width: 25px;
display: inline-block;
height: 25px;
repeat: no-repeat;
}
#icons>li:nth-child(1)>a{
background-position: 2px -8px;
}
#icons>li:nth-child(2)>a{
background-position: -29px -8px;
}
하나의 이미지 background-image: url("icons.png");, background-position 등을 기반으로 이미지를 설정
코드를 압축해서 개행 문자, 빈칸을 없애서 코드의 크기를 최소화하는 방법
이미지 파일을 64진법으로 이루어진 문자열로 인코딩하는 방법
장점 : 서버와의 연결을 열고 이미지에 대해 서버에 HTTP 요청을 할 필요가 없다
단점 : base64 문자열로 변환할 경우 37%정도 크기가 더 커진다
cf. 인코딩
정보의 형태나 형식을 표준화, 보안, 처리 속도 향상, 저장공간 절약 등을 위해 다른 형태나 형식으로 변환하는 처리 방식
한번 TCP 3-웨이 핸드셰이크가 발생하면 그 다음부터 발생하지 않는다
문서 안에 포함된 다수의 리소스를 처리하려면 요청할 리소스(이미지, css파일, script파일) 개수에 비례해서 대기 시간이 길어지는 단점이 있다
HTTP/1.1의 헤더
cf. 스트림
시간이 지남에 따라 사용할 수 있게 되는 일련의 데이터 요소를 가리키는 데이터 흐름
HTTP/1.x
: 헤더가 너무 크다
HTTP/2
: 헤더 압축을 써서 해결
: 허프만 코딩 압축 알고리즘을 사용하는 HPACK 압축 형식을 가진다
문자열을 문자 단위로 쪼개 빈도수를 세어
HTTP/1.1
: 클라이언트가 서버에 요청을 해야 파일을 다운로드 받을 수 있었다
HTTP/2
: 클라이언트 요청 없이 서버가 바로 리소스를 푸시할 수 있다
html에는 css나 js파일이 포함되기 마련
html을 읽으면서 그 안에 들어 있던 css파일을 서버에서 푸시하여 클라이언트에 먼저 줄 수 있다
HTTP/2는 HTTPS 위에서 동작
HTTPS
: 애플리케이션 계층과 전송 계층 사이에 신뢰 계층인 SSL/TLS 계층을 넣은 신뢰할 수 있는 HTTP 요청을 말한다
이를 통해 통신을 암호화한다
SSL (Secure Socket Layer)
SSL/TLS
보안이 시작되고 끝나는 동안 유지되는 세션
SSL/TLS는 핸드셰이크를 통해 보안 셰션을 생성하고 이를 기반으로 상태 정보 공유
cf. 세션
운영체제가 어떤 사용자로부터 자신의 자산 이용을 허락하는 일정한 기간
사용자는 일정 시간 동안 응용 프로그램, 자원 등을 사용할 수 있다
클라이언트와 서버와 키 공유
이를 기반으로 인증, 인증 확인 등의 작업이 일어나는 단 한 번의 1-RTT가 생긴 후 데이터를 송수신하는 것을 볼 수 있다
클라이언트에서 사이퍼 슈트를 서버에 전달
서버는 받은 사이버 슈트의 암호화 알고리즘 리스트 제공할 수 있는지 확인.
제공할 수 있다면 서버에서 클라이언트로 인증서를 보내는 인증 메커니즘이 시작되고
이후 해싱 알고리즘 등으로 암호화된 데이터의 송수신 시작.
프로토콜, AEAD 사이퍼 모드, 해싱 알고리즘이 나열된 규약
ex. TLS_AES_128_GCM_SHA256
데이터 암호화 알고리즈
ex. AES_128_GCM
CA에서 발급한 인증서 기반으로 이루어진다
CA에서 발급한 인증서
인증서
CA
CA 발급 과정
cf. 개인키
비밀키
개인이 소유하고 있는 키
반드시 자신만이 소유해야 하는 키
cf. 공개키
공개되어 있는 키
클라이언트와 서버 모두 개인키와 공개키 생성
서로에게 공개키를 보내고 공개키와 개인키를 결합하여 PSK(사전 합의된 비밀키 생성) 생성
악의적인 공격자가 개인키 또는 공개키를 가지고도 PSK가 없기 때문에 아무것도 할 수 없다
이를 통해 키를 암호화환다
데이털르 추정하기 힘든 더 작고, 섞여 있는 조각으로 만드는 알고리즘
ex. SSL/TLS(SHA-256, SHA-384 사용)
cf. 해시
: 다양한 길이를 가진 데이터를 고정된 길이를 가진 데이터로 매핑한 값
cf. 해싱
: 임의의 데이터를 해시로 바꿔주는 일. 해시 함수가 담당
cf. 해시 함수
: 임의의 데이터를 입력으로 받아 일정한 길이의 데이터로 바꿔주는 함수
SEO
사이트 링크에 캐노니컬을 설정한다
<link rel='canonical' href='link주소' />
html 파일의 가장 윗부분인 메타를 잘 설정해야 한다
사이트의 속도는 빨라야 한다
구글의 PageSpeedInsights로 가서 자신의 서비스에 대한 리포팅 주기적으로 받으며 관리
해당 주소를 넣어 페이지 속도 리포팅을 받아볼 수 있다
사이트맵(sitemap.xml)을 정기적으로 관리해야 한다
사이트맵 제너레이터 사용 또는 직접 코드 만들어 구축
방법1. 직접 CA에서 구매한 인증키 기반으로 HTTPS 서비스 구축
방법. 서버 앞단의 HTTPS를 제공하는 로드밸런서를 둔다
방법3. 서버 앞단에 HTTPS를 제공하는 CDN을 둔다
HTTP/1.1 및 HTTP/2와 함께 정보를 교환하는데 사용되는 HTTP의 세번째 버전
TCP위에서 돌아가는 HTTP/2와는 달리 HTTP/3는 QUIC라는 계층 위에서 돌아간다
TCP기반이 아닌 UDP 기반으로 돌아간다
멀티플렉싱
장점 : 초기 연결 설정 시 지연 시간 감소
QUIC