텔레메트리를 끌 권리를 존중하면서도, 파이어폭스에서 텔레메트리가 안정성·보안·성능·배포 안전에 실제로 기여해 온 사례들을 정리한다.
telemetry helps. you still get to turn it off
5 Mar 2026 10:12 EST
후, 마지막으로 뭔가를 쓴 지 꽤 됐네요. 그리고 이 블로그 디자인도 꽤 구식이고요... 이 말부터 시작하겠습니다: 텔레메트리를 비활성화할 권리는 당신에게 있습니다. 저는 그 권리를 전적으로 지지하고, 많은 경우 저도 텔레메트리를 끕니다. 당신의 위협 모델이 "절대 안 돼"라고 말하든, 혹은 그냥 마음에 들지 않든, 스위치를 내리세요. 소프트웨어와 그 작성자 사이에서 당신이 맺고 있는 관계는 텔레메트리를 켤지 말지를 결정하는 훌륭한 기준입니다.
제가 납득하지 못하는 건, 텔레메트리가 쓸모없고 실제로 도움이 되지 않는다는 주장을 계속 보게 된다는 점입니다. 저는 Firefox 텔레메트리에 대해서만 말할 수 있지만, 교훈은 일반화될 거라고 생각합니다. 텔레메트리는 기술적인 측면에서 이미 여러 번 자기 몫을 해냈습니다. 안정성, 보안, 성능, 그리고 롤아웃(점진 배포) 안전성에서요. 퍼블리셔를 신뢰하고 매일 사용하는 물건을 개선하는 데 도움을 주고 싶다면, 텔레메트리를 켜는 건 가장 노력이 적게 드는 방법입니다. 신뢰하지 않거나, 혹은 그냥 하기 싫다면… 좋아요.
하지만 경고해 두겠습니다. 아주 소수의 사람이 아주 이상한 일을 하고 있다면, 우리는 그걸 지원해야 한다는 사실조차 알지 못합니다. (이건 뒤에서 더 얘기하죠.)
텔레메트리는 프로그램이 본가(퍼블리셔)로 보내는 측정치와 신호를 통칭하는 말입니다. 브라우저에서는 여기엔 "기술 및 상호작용 데이터"(성능, 기능 사용량, 하드웨어 기본 정보) 같은 것들이 포함되고, 종종 별도 체크박스로 제어되는 크래시 리포트 같은 것도 포함됩니다. 제게 텔레메트리란, 당신이 퍼블리셔에게 보내고 그 대가로 직접적으로 무언가를 돌려받지는 않는 것들입니다.
반대로, 저는 텔레메트리라고 부르지 않을 다른 종류의 "본가로 전화하기(phone-home)"도 많습니다. 예컨대 소프트웨어 업데이트 핑(ping) 같은 것들요. 퍼블리셔는 여기서 데이터도 추론할 수 있습니다. 실제로 이건 Tor Browser가 '수집'하는 몇 안 되는 것 중 하나이기도 하죠. 하지만 목적은 퍼블리셔에게 무언가를 알려주기 위한 게 아니라, 최신 버전을 당신에게 전달하는 데 있고, 그건 당신이 직접 얻는 이득입니다. Firefox에는 당연히 업데이트 핑이 있지만, Remote Settings라는 것도 있습니다. 이건 여러 유용한 일을 위해 데이터가 브라우저로 동기화되도록 하는 도구입니다. 당신은 이 데이터를 받기 위해 본가로 연락합니다. 컬렉션 목록은 여기에 있고, 무작위 예시는 여기입니다(특정 웹사이트를 고치기 위해 비밀번호 자동완성 동작을 오버라이드하는 데이터입니다). 전체적으로는 그래픽 드라이버 차단 목록, 애드온 차단 목록, 인증서 차단 목록, CRLite용 데이터, 사이트가 망가지지 않도록 추적 방지 예외를 주는 데이터 등등이 있습니다.
그리고 마지막으로, 과도한 "본가로 전화하기"처럼 보이지만 저는 텔레메트리로 보지 않는 것들도 있습니다. 이 기능들이 아직 존재하는지, 어떤 상황에서 동작하는지는 전부 알지 못하지만, 예를 들어 캡티브 포털 환경인지 판단하기 위해 알려진 정상 웹사이트에 핑을 날린다거나, 혹은 인증서 검증이 전부 망가질지 확인하기 위해 roughtime을 사용하는 것 같은 것들입니다.
그리고 텔레메트리 자체에 대해서도, 저는 "사람들이 이 버튼을 클릭하나요?" 같은 제품 의사결정 이야기는 하지 않겠습니다. 그런 것들도 존재하긴 하지만, 그건 보통 제 일이 아닙니다. 그 영역에서의 개인적인 성공담도 없습니다. 저는 기술 텔레메트리—크래시와 행(hang)을 찾아내고, 위험한 보안 변경이 Nightly를 벽돌로 만들지 않는다는 걸 증명하고, 가장 빠르면서도 안전한 구현을 고르는 데 도움을 주는 종류—를 다룹니다.
또, Firefox 텔레메트리를 신뢰해야 한다고 주장하지도 않겠습니다. 저는 당신이 정보를 바탕으로 결정하길 바랍니다. 하지만 우리가 무엇을 수집하는지(그리고 이런저런 데이터 리뷰 승인 절차의 뒤섞임까지), 이를 어떻게 수집하는지(예: 'regular telemetry'는 IP를 즉시 버림), OHTTP(우리는 당신의 IP를 절대 보지 않음), Prio(프라이버시 보존 계산); 그리고 어떻게 저장하는지(오래된 데이터 자동 삭제, 분리되고 서로 연결되지 않은 데이터셋 등)까지 알고도, 여전히 우리가 프라이버시를 보존하기에 충분하지 않다고 생각한다면… 음, 그건 반박할 수 없습니다. 우리는 세상에서 최고는 아니고, 최악과는 거리가 멉니다. 그리고 당신의 기준을 충족하지 못한다면, 끄세요.
하지만 제 요지는 이겁니다: 무의미하지 않습니다. 쓸모없지 않습니다. 도움이 됩니다. 당신이 의존하는 기능들이 그 덕분에 출시됐습니다.
아주 간단하고 당신이 직접 들여다볼 수 있는 예로, Mozilla의 Background Hang Reporter (BHR)는 엔지니어가 느린 경로를 찾아서 고칠 수 있도록, 프리릴리스 채널에서 행(hang) 중 스택을 수집하기 위해 존재합니다. 그게 텔레메트리입니다.
이건 한 개발자에게서 나온 아주 작은 조각입니다. 프로젝트 전반에는 수백 가지가 더 있습니다.
부모 프로세스에서 eval 제거하기 (1473549) Eval은 나쁘죠, 맞죠? XSS 공격으로 이어질 수 있고, 브라우저 프로세스가 (부분적으로) JavaScript로 작성되어 있다면 샌드박스 탈출로 이어질 수도 있습니다. 우리는 부모(UI) 프로세스에서 eval을 제거하려고 시도했고, Nightly에 배포했는데 즉시 Nightly가 망가졌습니다. 전체 테스트 스위트는 전부 초록불이었고, Mozillians도 수주 동안 이 기능을 직접 써 봤는데도… 실제 사용자들이 실제 커스터마이징을 한 환경에서는 폭발했습니다. 우리는 빠르게 되돌리고 새 빌드를 돌려야 했습니다. 꽤 큰 사고였고, 좋은 하루가 아니었습니다. 그래서 우리는 이 접근을 완전히 다시 설계했고, 여러 차례의 광범위한 텔레메트리를 넣었습니다.
그 결과, 야생(wild)에서 eval이 어디서 여전히 발생하는지 알 수 있었습니다. 테스트가 없는 Mozilla 코드 경로뿐 아니라, 결정적으로 userChromeJS 같은 걸 쓰는 Firefox 튜닝/해킹 커뮤니티가 활발하다는 사실까지요. 텔레메트리가 그 스크립트들을 드러내 줬기 때문에, 저는 그 커뮤니티에 가서 다가오는 변경을 설명하고, 깨지는 부분을 우회할 수 있었습니다. 그 대화 분위기는 firefox-scripts 저장소의 공개 스레드를 보면 감이 올 겁니다. 텔레메트리 없이 이걸 안전하게 출시할 방법은 없었고, 특히 당신이 원하는 대로 Firefox를 해킹할 수 있는 능력을 보존하는 건 더더욱 불가능했을 겁니다.
Background Hang Reporter가 나 자신에게서 나를 구해줬다 (1721840) BHR 데이터는 제 코드가 행(hang)에 빠지는 특정 상호작용을 보여줬습니다. 이유도 겉으로는 전혀 보이지 않았고, 저는 절대 추측도 못 했을 겁니다. 저는 리팩터링했고, 행 그래프는 떨어졌습니다. 이 피드백 루프는 프리릴리스에서 텔레메트리가 켜져 있지 않으면 존재할 수 없습니다.
Fission(사이트 격리)과 데이터 최소화 (1708798) Chrome은 컨텐츠 프로세스에서 교차 오리진 데이터를 제거하는 것, 그리고 교차 오리진 데이터 조회에 대한 IPC 보안 경계를 강화하는 것에 많은 초점을 맞춰왔습니다. Tor Browser(저도 개발자이긴 하지만 활동은 아주 많지 않습니다)에서 온 입장에서는, 오리진 데이터와 무관한 개인 사용자 데이터도 꽤 걱정됐습니다. 예를 들면 프린터나 디바이스 이름 같은 것들이요. Fission의 일부로, 저는 Spectre 공격을 수행하는 웹 프로세스가 그런 세부정보를 가져갈 수 없도록 컨텐츠 프로세스에서 교차 오리진 데이터와 개인 식별 가능한 것들을 모두 제거하는 작업을 했습니다. 텔레메트리는 이런 식별자를 빼내는 과정에서 사용자 워크플로우가 깨지지 않는다는 걸 확인하는 데 도움을 줬습니다.
인터넷에 노출된 jar: 사용 종료
몇 년 전 Firefox는 웹 컨텐츠에서 jar: URI를 허용했고, 보안 모델은… 썩 좋지 않았습니다. 텔레메트리는 실제 웹에서의 사용이 사실상 없다는 걸 보여줄 수 있게 해줬고, 덕분에 웹에서 그 공격면을 닫는 건 고민할 필요가 없는 선택이 됐습니다.
XSLT에서도 같은 이야기가 만들어지는 중 보안/유지보수 위험과 매우 낮은 사용량 때문에 Chrome은 브라우저에서 XSLT를 폐기/제거하려고 밀고 있습니다. 저도 지지합니다. 사용량 텔레메트리는 웹에서 기능을 제거하는 걸 정당화할 수 있는 사실상 유일한 방법입니다.
가장 빠르면서도 안전한 캔버스 노이즈 고르기 (1972586) 안티 핑거프린팅 캔버스 노이즈 생성에서, 저는 텔레메트리로 CPU 전반에서 어떤 구현이 실제로 가장 빠른지 측정했습니다. SHA 확장(SHA extensions)이 있으면 SHA-256이고, 없으면 SipHash입니다—또는 입력이 ~2.5KB 미만일 때도 SipHash입니다. 이 선택은 수십억 번의 호출로 곱해지면 큰 차이를 만듭니다.
안티 핑거프린팅을 위한 폰트 허용 목록 (Lists, 1795460) 폰트는 거대한 핑거프린팅 벡터입니다. 우리는 폰트 허용 목록과 폰트 가시성 제어를 만들었습니다. 설계상 Firefox의 핑거프린팅 보호는 웹에서 당신의 로컬에 설치된 특이한(일회성) 폰트를 쓰지 않도록 합니다. 이는 정상 사이트를 깨뜨리지 않으면서 "어떤 폰트를 가지고 있나요?"의 엔트로피를 극적으로 줄입니다. 이제 많은 브라우저가 비슷한 일을 하지만, 텔레메트리는 이런 방어를 계속 개선하는 데 도움을 줬고, Android에서 폰트 허용 목록을 가진 건 우리가 아직 유일한 것 같다고 꽤 확신합니다.
Resist Fingerprinting 사용자에 대한 현실 점검 수동으로 "Resist Fingerprinting" 설정(우리가 공식 지원하지도 않고, 저는 일반적으로 권하지도 않지만—뭐, 당신은 당신대로 하세요)을 켜는 사람들은 Bugzilla에서 아주 시끄럽습니다. 정말 아주요. 그 정도라서, 저는 여러 매니저와 임원들이 "다들 이게 뭔가를 망가뜨린다고 불평하잖아, 사람들이 실수로 켤 수 없게 이걸 비활성화해야 해"라고 말하러 오는 일을 꽤 많이 겪었습니다. 텔레메트리는, 그렇게나 시끄럽지만 여전히 전체 사용자 중에서는 극히 일부라는 걸 보여줄 수 있게 해줬습니다. 경영진의 질문 "막아야 하나?"는 "아니오"가 됐죠. 천만에요.
이건 제 영역 이야기일 뿐입니다. 제가 가까이서 일하는 사람들은 텔레메트리를 써서 다음을 해냈습니다:
더 많은 예시를 들 수도 있지만, 요지는 전달됐다고 생각합니다.
주요 브라우저는 모두 텔레메트리를 직접 구현하든, 업스트림 엔진에 그 일을 외주 주든, 그리고 그 덕을 보든 합니다. 끝입니다. Brave조차 텔레메트리를 하고, 그 설계(P3A)를 꽤 공개적으로 설명합니다. 버킷/히스토그램으로 수집하고, 셔플링/임계값 처리 같은 프라이버시 기법을 쓰는 방식이죠. 충분히 존중할 만한 접근입니다.
우리는 서로 다른 텔레메트리 설계의 효율이나 프라이버시 특성을 논쟁할 수 있습니다. 수집하면 안 되는 것들을 과도 수집하는 사례를 함께 경악할 수도 있습니다. 옵트아웃이어야 하는지 옵트인이어야 하는지도 논쟁할 수 있습니다. 하지만 그 모든 논쟁은, 텔레메트리가 철학적으로 나쁜 게 아니라 "잘못 구현될 수 있다"는 점에서 출발해야만 합니다.
텔레메트리를 껐다고 자랑하는 모든 Foo 브라우저는 업스트림—Firefox든 Chrome이든—의 텔레메트리에 의존해서 Foo 브라우저를 개선하고 있습니다. 남의 텔레메트리를 쓰면서, 도덕적 우위를 차지하려는 거죠.
Foo를 쓰는 이유가, 당신이 좋아하는 기능을 더해주기 때문이거나, 업스트림보다 그 퍼블리셔가 기본값을 더 잘 고른다고 신뢰하기 때문이라면—그건 완전히 타당한 이유입니다. 하지만 이유가 "텔레메트리는 Firefox가 나를 염탐하기 위한 수단일 뿐"이라면, 제가 그 인식을 조금이라도 깨뜨렸기를 바랍니다.
Comments
이름: 필수
이메일: 필수, 숨김, gravatar 적용
웹사이트:
댓글: 필수, markdown 사용 가능(도움말)
입력: 표시: italicsitalics bold****bold stolen from reddit!stolen from reddit!
item 1
item 2
item 3* item 1
item 2
item 3
quoted text> quoted text 네 칸 공백으로 시작하는 줄은
코드로 취급됩니다:
if 1 * 2 < 3:
print "hello, world!"네 칸 공백으로 시작하는 줄은
코드로 취급됩니다:
if 1 * 2 < 3:
print "hello, world!"
me
sec/code
quick links
design: wanglith fry
ritter.vg