Domain Sharding // concurrent requests in browser

woolee의 기록보관소·2023년 1월 8일
1

FE개념정리

목록 보기
31/35

domain sharding

브라우저들은 각 도메인에 대해 활성 연결 수(number of active connections)를 제한한다. 즉, 브라우저는 1개의 도메인에서 한번에 내려 받는 자원 개수에 대해 제한을 둔다.

이때 이 제한된 숫자보다 더 많은 리소스를 동시에 다운로드 받기 위해
domain sharding은 콘텐츠를 여러 개의 하위 도메인(subdomains)으로 분할한다. 이렇게 여러 하위도메인을 사용하면 제한된 수보다 더 많은 리소스를 동시에 다운로드할 수 있으므로 페이지 로드 시간을 단축할 수 있다.

(http/2(spdy)에서는 unlimited concurrent requests을 지원하므로 거의 더 이상 도메인 샤딩이 필요하지 않다고 한다.)

물론 domain sharding에 대한 비용도 존재한다. 각각 하위도메인을 찾기 위한 추가적인 DNS 조회 비용이 들며, 각 tcp 연결을 만들기 위한 오버헤드(overhead of establishing each TCP connection)가 발생한다.

예를 들어 http 요청을 하면 다운로드가 필요한 여러 js, css, 이미지 및 기타 미디어 파일 같은 리소스를 나열하는 html 파일을 응답으로 받는다. 이때 도메인당 다운로드 받을 수 있는 숫자가 제한되어 있으므로 단일 도메인에서 이를 초과하는 리소스들은 순차적으로 다운로드를 받아야 하고 이에 따라 브라우저가 필요한 모든 리소스를 제공하는 속도가 그만큼 느려진다. 이때 도메인 샤딩domain sharding을 사용하면 도메인을 둘 이상으로 분할하므로 보다 많은 리소스들을 동시에 다운로드 받을 수 있지만, 동시에 여러 도메인에 대한 DNS 조회로 인해 초기 로드 시간이 더 느려진다.

일반적으로 권장되는 하위 도메인의 숫자는 2~4개였으며, 4개 이상이면 오히려 DNS 조회 때문에 성능이 저하된다고 한다.

보통은 브라우저 캐시에 캐싱이 되기 때문에 자주 변경되지 않는 정적 웹사이트에서는 유용하지 않는다. 이미지가 자주 업데이트되고 많은 수의 이미지가 단일 페이지에 존재하는 동적 웹사이트에 적합하다.

브라우저별 concurrent requests 수

브라우저마다 한번에 요청할 수 있는 숫자는 다르다.
IE6/7과 같은 오래된 브라우저는 호스트당 2개의 요청을 허용하지만
브라우저들은 평균적으로 6개 정도의 동시 요청을 허용한다.

더 많은 리소스들을 동시에 받아오면 효율성이 증가하는 것처럼 생각할 수 있지만, 그럴 경우 서버에 큰 부담을 줄 수 있다. 오히려 너무 많은 연결은 서버 성능에 부정적인 영향을 주며, 서버에 의한 ddos 공격으로 간주되어 block될 수 있다. 이외의 리소스 로드는 ajax 호출이나 비동기 파일 로드를 사용하는 방법을 고려해보는 것도 좋다.

프론트엔드와 백엔드 사이의 균형을 유지해야 서핑 경험을 향상시키며, 차단으로 인한 웹 속도 저하를 방지할 수 있다.

필요한 프론트엔드 리소스들을 캐싱하는 하고 불필요한 요청을 줄이는 것만으로도 성능 개선에 기여할 수 있다.

참고

Domain sharding
Get number of concurrent requests by browser
How many resources will a browser download from a given domain at a time?
Domain sharding on the modern web
Why does your browser limit the number of concurrent network calls?
What are Max parallel HTTP connections in a browser?

profile
https://medium.com/@wooleejaan

0개의 댓글