2017년 무렵 일반적인 페이지는 수십 개의 서드파티 스크립트를 로드했고, 추적 스크립트는 사용자가 실제로 기다리는 콘텐츠와 같은 네트워크 대기열에 자리하고 있었다. Firefox Quantum(버전 57)은 네트워크 요청 스케줄러를 다시 작성했는데, 그 변경 중 하나는 추적 보호 데이터베이스를 이용해 페이지가 아직 활발히 로드되고 렌더링되는 동안 추적 도메인의 스크립트 로드를 지연시키는 것이었다. Mozilla 엔지니어 Jan Bambas는 이 기법을 테일링(tailing)이라고 불렀다.

노골적인 선택지는 추적기를 아예 차단하는 것이었지만, Firefox에는 이미 그를 위한 추적 보호 기능이 있었고, 차단은 렌더링이나 비즈니스가 해당 스크립트에 의존하는 사이트를 망가뜨린다. 다른 뻔한 선택지는 아무것도 하지 않고 분석과 광고 페이로드가 실제 콘텐츠와 경쟁하는 것을 받아들이는 것이었다. 테일링은 그 중간을 택했다. 아무것도 비활성화하지 않고 우선순위만 낮췄다.

추적 도메인에 대한 요청은 사이트 자체의 하위 리소스가 아직 로드되는 동안에만, 그리고 약 6초까지만 보류되었다. 동적으로 추가되거나 비동기로 로드되는 스크립트는 지연될 수 있었고, 추적 이미지와 XHR, 그리고 추적 스크립트가 요청하는 모든 것은 항상 지연되었다. HTML 명세가 다운로드 스케줄링과 우선순위 지정을 브라우저에 맡기기 때문에 이 변경은 웹의 규칙상 합법이었고, 잘 만들어진 사이트는 표시하는 것 중 추적기에 의존하는 것이 없었기에 기능상 차이를 겪지 않았다.

페이지 로드 성능의 이득은 사이트 자체가 필요로 하는 이미지와 스크립트를 위해 네트워크 대역폭과 I/O, CPU를 절약하는 데서 나왔다. 눈에 보이는 비용은 형편없이 만들어진 사이트에 떨어졌다. www.google-analytics.com의 스크립트가 페이지를 다시 보이게 할 때까지 opacity 0으로 페이지를 숨기던 Google의 A/B 테스트 스니펫은 페이지를 4초 동안 빈 화면으로 남길 수 있었고, 동기 스크립트에서 Twitter API를 호출하던 L'Équipe 같은 사이트는 지연된 비동기 스크립트가 아직 없어서 실패했다. Bambas는 그런 사이트들이 운 좋게 작동했을 뿐이라고 주장했는데, 같은 경쟁 조건이 시크릿 브라우징이나 추적 보호 아래에서도 그들을 망가뜨렸기 때문이다.

차단 대신 지연: 페이지 자체 리소스가 끝날 때까지 추적 도메인 요청을 보류한 뒤 해제

추적기는 페이지를 렌더링하는 데 거의 필요하지 않으므로, 지연시키면 사용자가 보는 것을 눈에 띄게 바꾸지 않으면서 사이트 자체 리소스를 위해 대역폭과 I/O, CPU를 확보한다.

차단 대신 지연하면 기능이 HTML 명세 안에 머물고 분석이나 광고 경제를 파괴하지 않으며 단지 미룰 뿐이다.

추적 보호 데이터베이스가 이미 서드파티 도메인을 분류하고 있었기에, 스케줄러는 새 목록을 만들거나 유지하지 않고도 우선순위 신호를 얻었다.

망가진 사이트들은 렌더링을 추적기에 의존하거나 추적기 서버가 빠르게 응답해서야 이긴 경쟁 조건에 의존하고 있었기에, 그 회귀는 잘못된 트레이드오프가 아니라 실제 취약성을 드러낸 것이었다.

비용을 없앨 수 없다면 일정을 바꿔라. 가치가 낮은 작업을 사용자에게 보이는 로드가 끝난 뒤로 보류하면, 싸우지 않고도 이득의 대부분을 얻는다

테일링은 Firefox 57(Quantum)에 포함되어 출시되었다. Bambas의 2017년 12월 설명 글은 472점, 261개 댓글의 Hacker News 스레드와 Bleeping Computer, gHacks의 보도를 불러일으켰다. Mozilla가 기록한 회귀, 이를테면 Google의 페이지 숨김 스니펫이 페이지를 최대 4초 동안 빈 화면으로 만든 사안은 Bugzilla로 갔고, Bambas는 영향을 받은 사이트들이 새로운 스케줄링을 받아들이려면 고쳐져야 한다고 주장했다. 그는 또한 더 광범위한 측정이 아직 진행 중이며 로컬 테스트에서는 이득이 노이즈에 묻혀 있었기에 전체 효과는 아직 정량화되지 않았다고 덧붙였다.

근거 확인하기

출처

  1. Firefox 57 delays requests to tracking domains Jan Bambas's blog · janbambas.cz ·
  2. Firefox 57 delays tracking domains gHacks Tech News · ghacks.net ·
  3. Hacker News discussion: Firefox 57 delays requests to tracking domains Hacker News · news.ycombinator.com ·