RTT(Round-Trip Time)는 패킷을 보내고 그에 대한 응답이 돌아오기까지 걸리는 왕복 시간이다. ping으로 잴 수 있다. 브라우저가 새 서버에 요청하려면 데이터를 보내기 전에 왕복을 몇 번 거쳐야 하므로, 첫 요청의 시작 시점은 RTT 몇 배만큼 늦어진다.
첫 요청 전에 드는 왕복
DNS 조회 도메인 → IP (캐시에 없으면 왕복 발생)
TCP 핸드셰이크 SYN → SYN-ACK → ACK ≈ 1 RTT
TLS 핸드셰이크 1.3은 1 RTT, 1.2는 2 RTT
HTTP 요청·응답 요청을 보내고 첫 바이트를 받기까지 ≈ 1 RTT + 서버 처리- DNS(Domain Name System) 조회, TCP(Transmission Control Protocol) 연결, TLS(Transport Layer Security) 암호화를 합친 연결 준비에는 최대 3번 정도의 왕복이 든다. 최적화되지 않은 환경에서는 더 든다
- DNS 결과가 캐시돼 있고 RTT가 100ms라면 TLS 1.3 연결은 TCP 100ms + TLS 100ms를 쓴 뒤에야 요청을 보낸다. 첫 바이트는 서버 처리 시간을 빼고도 약 300ms 뒤에 온다. TLS 핸드셰이크 자체는 HTTP와 HTTPS를 본다
- 이 시간은 파일 크기와 관계없다. 작은 파일일수록 다운로드보다 연결 준비가 차지하는 비중이 크다
- 리다이렉트는 RTT 자체를 키우지 않는다. 대신 요청을 한 번 더 하게 만들어 왕복 횟수를 늘린다. 다른 호스트로 가면 연결 준비도 다시 한다
연결 재사용
연결 준비 비용은 연결을 다시 쓰면 한 번만 치른다.
- HTTP/1.1은 지속 연결(persistent connection)이 기본이다. 한 연결로 여러 요청·응답을 주고받으므로 요청마다 TCP 핸드셰이크를 하지 않는다.
keep-alive연결이라고도 부른다 - 쉬는 연결은 일정 시간 뒤 닫힌다. web.dev에 따르면 브라우저는 10초 안에 쓰지 않은 연결을 닫는다. 그래서 preconnect는 곧 쓸 서버에만 건다
- TLS 1.3은 전에 연결한 서버에 다시 연결할 때, 이전 연결에서 받은 사전 공유 키(Pre-Shared Key, PSK)로 첫 핸드셰이크 메시지와 함께 데이터를 보내는 0-RTT 방식을 쓸 수 있다
같은 출처에 두면 빠른 이유
LCP(Largest Contentful Paint) 이미지처럼 중요한 리소스를 HTML 문서와 같은 출처에 두면, 이미 열린 연결을 그대로 써서 연결 준비를 건너뛴다. 이미지 CDN(CDN, Content Delivery Network)을 다른 도메인으로 쓰면 그 도메인에 새로 연결하는 비용이 붙는다. preconnect로 일부를 줄일 수 있지만, web.dev는 가능하면 같은 출처로 서빙하라고 권한다. 많은 CDN이 내 출처로 온 요청을 CDN으로 프록시하는 기능을 준다. 이 차이는 LCP 하위 구간에서 TTFB 이후 구간에 드러난다.
다만 출처(동일 출처 정책)는 보안 경계를 정하는 개념이고, 연결을 나누는 기준과 꼭 같지는 않다. HTTP/2는 다른 호스트 이름이라도 같은 서버가 그 호스트들에 대해 권한이 있으면 연결 하나를 같이 쓸 수 있다(connection coalescing). HTTPS라면 서버 인증서가 그 호스트들에 유효해야 하고, TLS 없는 TCP 연결이라면 호스트들이 같은 IP로 풀려야 한다.
연결을 하나로 모은 뒤에도 그 안에서 여러 요청이 대역폭을 나눠 쓰는 문제는 남는다 → HOL 블로킹과 HTTP/2 멀티플렉싱
명세: RFC 9112 §9.3 — Persistence · RFC 9113 §9.1.1 — Connection Reuse · RFC 8446 §2 — TLS 1.3 Protocol Overview 출처: MDN — Round Trip Time (RTT) · MDN — TCP handshake · MDN — Connection management in HTTP/1.x: Persistent connections · web.dev — Establish network connections early · web.dev — Optimize LCP: Reduce the distance the resource has to travel