Headless는 더 이상 숨겨지지 않습니다
7일 전, cside는 2026년 헤드리스 브라우저 탐지에 대한 기술적 분석을 발표했습니다. 핵심은 다음과 같습니다. 탐지기들은 이제 픽셀 수준에서 헤드리스 세션을 잡아냅니다. 동일한 명목상 브라우저, 동일한 운영 체제라도 WebGL 출력은 다릅니다. AudioContext 타이밍이 다릅니다. 폰트 열거가 다릅니다. 작은 신호들이지만 점수를 매기기에는 충분히 일관적입니다.
이 글은 다른 경로를 통해 같은 결론에 도달한 WebDecoy의 Browser Fingerprinting 2026 요약이 나온 지 일주일 후에 올라왔습니다. (올해 초에 발표된) Browserless의 State of Web Scraping 2026은 이를 분명하게 밝혔습니다. 헤드리스 브라우저는 사용자 주도 브라우저보다 더 자주 차단되며, 그 격차는 계속 벌어지고 있습니다.
프로덕션 환경에서 Puppeteer 또는 Playwright를 실행한다면, 이는 비용 곡선을 변화시킵니다.
실제로 변경된 사항
헤드리스 탐지에 대한 이전 이야기는 navigator.webdriver === true, 빈 플러그인 배열, 그리고 User-Agent의 HeadlessChrome에 관한 것이었습니다. 2020년 이후의 모든 스텔스 플러그인은 이를 패치합니다. 따라서 탐지기들은 스택 아래로 이동했습니다.
소프트웨어 렌더링이 가장 큰 요소입니다. 사용자의 브라우저는 GPU를 사용합니다. 컨테이너에서 실행되는 헤드리스 환경은 대개 소프트웨어 래스터라이저로 대체됩니다. WebGL 렌더러 문자열이 다르게 읽힙니다. 동일한 명목상 입력에 대해 픽셀 출력이 다릅니다. Canvas 지문은 동일한 입력에서 달라집니다. 이 중 어느 것도 불리언 검사에 걸리지 않지만, 확률적 점수에 반영됩니다.
두 번째는 AudioContext입니다. 페이지가 오디오 컨텍스트를 인스턴스화하고 샘플 속도 또는 채널 수를 요청할 때, 헤드리스 환경은 일반 데스크톱 세션과 미묘하게 다른 값으로 응답합니다. 동일한 작업에 대한 타이밍이 예측 가능하게 변경됩니다.
세 번째는 폰트 열거입니다. 사용자 컴퓨터에는 기록에 따라 폰트가 설치되어 있습니다. 컨테이너 이미지에는 큐레이팅된 (그리고 작은) 세트가 있습니다. 지문 수집 스크립트가 50개의 폰트에 걸쳐 100개의 일반적인 문자열의 너비를 측정할 때, 누락된 폰트 패턴은 진단 기준이 됩니다.
이러한 각각은 약한 신호입니다. 하지만 이들을 결합하고 탐지기가 여전히 확인하는 이전 신호와 함께 사용하면, 조치를 취하기에 충분히 높은 신뢰도로 자동화된 세션과 사용자 세션을 구별하는 점수가 됩니다.
탐지기들이 지금 투자하는 이유
수치들이 마침내 R&D 예산을 정당화했기 때문입니다.
F5의 2026 Advanced Persistent Bot Report는 기존 봇 완화 기능이 적용된 후의 스크래퍼 트래픽을 전 세계 웹 트래픽의 10.2%로 산정했습니다. 이는 잔류 트래픽, 즉 방어자가 이미 보유한 도구로는 0으로 만들 수 없는 부분입니다. 그 비율의 모든 증가분은 차단할 가치가 있습니다.
Cloudflare는 7월 13일에 Precursor를 출시했습니다. Precursor는 지속적인 클라이언트 측 동작 신호(포인터 움직임, 키보드 타이밍, 포커스, 가시성)를 수집하고 이를 페이지 새로고침 시에도 유지되는 봇 점수에 반영합니다. 우리는 2주 전에 이에 대해 작성했습니다. 이제 세션 동작은 1년 전에 fingerprint가 평가되던 방식과 동일하게 점수가 매겨집니다.
Precursor와 headless 전용 신호의 흐름은 별개의 움직임이 아닙니다. 이는 동일한 전략입니다. 하나의 request를 고립시켜 점수를 매기는 것을 중단하십시오. 측정 가능한 모든 축을 기준으로 전체 세션을 평가하십시오.
실제로 지불하고 있는 두 가지 세금
사내에서 headless를 실행하는 것은 이론상 항상 저렴했습니다. 프레임워크와 브라우저가 무료이며 컨테이너 비용도 저렴합니다. 하지만 2026년에는 청구서에 나타나지 않는 두 가지 항목이 추가되었습니다.
유지보수 세금은 사람들이 쉽게 눈치채는 부분입니다. 과거에는 Puppeteer-extra-stealth를 통해 패치 사이에 몇 달의 시간을 벌 수 있었습니다. 하지만 2026년 실질적인 방어 체계를 갖춘 사이트에서는 그 기간이 몇 주에 불과합니다. headless 업데이트, 브라우저 업데이트, 방어 업데이트 및 스텔스 플러그인 업데이트 사이에서 엔지니어 한 명이 스택을 유지하는 데 매월 1주일을 통째로 소모할 수 있습니다. 아무도 이것을 로드맵에 포함시키지 않습니다. 이는 그저 로드맵을 잠식할 뿐입니다.
탐지 세금은 사람들이 눈치채지 못하는 부분입니다. 성공률 차트에 숨어 있기 때문입니다. 보호되는 타겟의 차단율이 서서히 증가합니다. 재시도 횟수가 늘어납니다. 성공적인 fetch당 비용도 함께 상승합니다. 여러분은 "사이트가 더 까다로워졌다"고 여기고 넘어갑니다. 그 중 일부는 사실입니다. 일부는 여러분의 스택과 일반 브라우저의 모습 사이의 격차가 벌어지고 있기 때문입니다. 두 가지 모두 같은 추세를 보입니다.
두 세금 중 어느 것도 단독으로 프로젝트를 망치지는 않습니다. 하지만 이 둘이 결합되면 자체 구축과 구매 사이의 계산이 달라집니다.
데이터 팀을 위한 의미
모든 스크래핑에 브라우저가 필요한 것은 아닙니다. 이 부분은 변하지 않았습니다. 하지만 단순한 HTTP 호출로 해결할 수 있었던 페이지에서 많은 headless 배포가 시작되었기 때문에 다시 강조할 가치가 있습니다.
타겟의 데이터가 XHR이나 JSON endpoint를 통해 제공된다면 브라우저를 건너뛰십시오. HTTP request는 더 저렴하고 빠르며 애초에 이러한 fingerprint 신호를 전달하지 않습니다. 7월에 작성된 okhlopkov의 글은 API 및 XHR 우선, 임베디드 JSON 다음, 페이지에 진정으로 필요한 경우에만 브라우저 사용, 다른 모든 것이 확인된 후에만 LLM 추출이라는 올바른 순서를 제시합니다.
브라우저가 필요한 사이트의 경우 방어 수준이 문제입니다. 가벼운 보호(rate limit, User-Agent 필터, 레퍼러 확인)의 경우 잘 구성된 headless 스택이 여전히 작동하며 세금도 낮습니다. 강력한 보호(Cloudflare, PerimeterX, 전체 세션 점수 측정 기능이 있는 DataDome)의 경우 세금은 실재하며 복리로 증가합니다. 이 시점에서 계산이 역전됩니다.
아무도 이야기하지 않는 중간 영역도 있습니다. 사이트가 완전히 차단하지는 않지만 조용히 품질을 저하시킵니다. 다른 가격, 더 적은 목록, 누락된 이미지, 누락된 리뷰. 스크래퍼는 성공을 보고합니다. 데이터는 은밀하게 잘못되어 있습니다. 핑거프린팅 점수가 차단 결정이 아닌 콘텐츠 결정의 입력이 되면서 이러한 실패 모드가 더 흔해지고 있습니다.
자신이 그 영역에 있는지 알 수 없다면, 아마도 그 영역에 있을 것입니다.
향후 전망
headless는 아무도 주의 깊게 보지 않았기 때문에 10년 동안 작동한 임시방편이었습니다. 지난 2년 동안 상황이 바뀌었습니다. 탐지 공급업체는 마침내 남은 스크래퍼 점유율을 차단할 가치가 있다고 결정했으며, 자동화를 격리하기 가장 쉬운 계층을 선택했습니다.
다음 단계는 더 똑똑한 스텔스 플러그인에 관한 것이 아닙니다. 접근성 도구, 구형 GPU, 기업용 proxy, 사설 DNS와 같이 특이한 설정을 가진 합법적인 사용자에 대한 오탐률을 감수할 만큼 탐지 정밀도가 가치 있다고 결정하는 사이트가 어디인지에 관한 것입니다. 그들이 확보하는 headless 탐지 정확도의 모든 포인트는 실제 사용자의 일부 비율을 희생시킵니다. 그 트레이드오프가 군비 경쟁이 실제로 일어나는 곳이며, 여러분의 Puppeteer 구성에서 일어나는 것이 아닙니다.
이미 headless 세금을 내고 있다면 최소한 측정이라도 하십시오. 그렇지 않으면 그것은 자신이 동의한 줄도 몰랐던 항목에 불과합니다.