> ## Documentation Index
> Fetch the complete documentation index at: https://www.octoparse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# 브라우저 핑거프린팅

> 안티봇 시스템이 캔버스, WebGL, 글꼴, UA 등 여러 신호를 조합해 스크래퍼를 식별하는 방식과 핑거프린트 유출 및 관리 방법을 알아보세요.

모든 브라우저 세션은 User-Agent, 캔버스 그리기 결과, WebGL 렌더러 문자열, 글꼴 목록, 화면 해상도, 설치된 플러그인, 시간대, 언어 헤더, 오디오 컨텍스트 출력 등이 결합된 식별 서명을 노출합니다. 최신 안티봇 시스템은 이러한 신호를 **브라우저 핑거프린트**로 결합하여 IP 주소보다 더 안정적으로 세션을 식별합니다. 핑거프린트를 관리하지 않는 스크래퍼는 요청할 때마다 탐지 계층에 선명한 신분증을 건네는 셈입니다.

핑거프린트 계층은 [행동](/docs/ko/academy/human-like-scraping) 아래에 있습니다. 즉, 세션이 무엇을 *하는지*가 아니라 세션 자체가 *무엇인지*를 나타냅니다. 강력한 안티봇 시스템에 탐지되지 않으려면 스크래퍼가 깔끔한 핑거프린트와 사람과 유사한 행동이라는 두 계층을 모두 통과해야 합니다.

## 추적되는 신호

최신 핑거프린트는 일반적으로 다음 신호를 조합합니다.

* **User-Agent 및 Accept 헤더.** 가장 명확한 출발점입니다. UA의 `HeadlessChrome`은 자동화임을 드러냅니다.
* **캔버스 핑거프린트.** 사이트가 브라우저에 숨겨진 캔버스 요소를 렌더링하도록 요청한 뒤 출력을 해시합니다. GPU, 드라이버, OS 조합에 따른 미세한 렌더링 차이가 기기별로 안정적인 서명을 만듭니다.
* **WebGL 핑거프린트.** 렌더러 문자열, 공급업체 문자열, 지원 확장 프로그램을 조합하면 GPU와 드라이버 스택을 강력하게 식별할 수 있습니다.
* **글꼴 목록.** 브라우저가 렌더링할 수 있는 글꼴과 그 순서는 세션 하나를 식별할 만큼 고유한 경우가 많습니다.
* **화면 및 뷰포트.** 해상도, 색 농도, 기기 픽셀 비율입니다. 배율이 200%인 `1366×768` 데스크톱은 `2560×1440` Retina 디스플레이와 다른 핑거프린트를 가집니다.
* **시간대 및 언어.** `Intl.DateTimeFormat`과 `navigator.languages`에서 얻습니다.
* **오디오 컨텍스트.** 오디오 렌더링도 캔버스와 마찬가지로 기기별 핑거프린트가 가능한 출력을 만듭니다.
* **플러그인, navigator 속성, 하드웨어 동시성.** 개별 영향은 작지만 조합 가능한 신호입니다.
* **`navigator.webdriver`.** 관리되지 않은 자동화를 확실하게 드러내는 신호입니다.

수십 개의 작은 신호는 곱셈식으로 결합됩니다. 사이트가 모든 신호에서 고유성을 확보할 필요는 없습니다. 추적할 수 있을 만큼 *조합*이 고유하면 됩니다.

## 스크래퍼가 핑거프린트를 유출하는 이유

대표적인 실패 방식은 세 가지입니다.

* **동일한 기본 ID 반복.** 기본 Puppeteer 인스턴스가 10,000개 세션을 실행하면서 같은 캔버스 해시, WebGL 문자열, 글꼴 목록을 제시하면, 서로 다른 10,000명의 "사용자"가 한 기기의 핑거프린트를 공유하게 됩니다. 탐지하기 매우 쉽습니다.
* **실제 사용자가 만들지 않는 일반 값.** 비어 있는 `navigator.plugins`, 표준 Linux/Chrome 렌더링과 비트 단위까지 같은 캔버스 출력, 일반적인 시스템 글꼴이 빠진 글꼴 목록은 실제 Chrome 사용자에게서 나타나지 않는 이상 징후입니다.
* **신호 간 불일치.** `en-US`와 `America/New_York`을 표방하면서 러시아 IP를 사용하는 경우, iPhone User-Agent와 데스크톱 뷰포트를 함께 쓰는 경우, macOS 전용 글꼴을 포함한 Windows 핑거프린트가 이에 해당합니다. 탐지 계층은 내부 모순을 찾습니다.

## 핑거프린트 관리

해결책은 각 실패 방식에 직접 대응합니다.

* **세션별 고유성.** 각 작업 인스턴스는 서로 다른 캔버스 해시, WebGL 렌더러, 글꼴 목록 등 고유한 핑거프린트를 제시해야 합니다. 그래야 서로 다른 "사용자"에서 같은 핑거프린트가 반복되지 않습니다.
* **세션 내 일관성.** 하나의 세션 안에서는 핑거프린트가 안정적으로 유지되어야 합니다. 세션 도중에 바뀌는 것 자체가 탐지 신호입니다.
* **IP와 지리적으로 일치.** 핑거프린트의 시간대, 언어, Accept-Language 헤더는 [프록시 IP](/docs/ko/academy/rotating-proxies)의 지역과 일치해야 합니다. 동유럽 IP에는 기본 `en-US`가 아니라 동유럽 핑거프린트를 연결하세요.
* **무작위가 아닌 현실적인 값.** 순수하게 무작위 값으로 조합한 핑거프린트도 이상 징후입니다. 사람이 사용하지 않는 특이한 값이 아니라 일반적인 GPU 문자열, 그럴듯한 글꼴 목록, 보편적인 화면 크기 등 현실의 핑거프린트 분포에서 선택해야 합니다.

이 원칙을 합하면 런타임 기본값에 의존하는 것과 반대되는 **능동적 핑거프린트 관리**가 됩니다.

## Octoparse의 핑거프린팅 접근 방식

Octoparse는 [헤디드 중심 런타임](/docs/ko/academy/headed-vs-headless-browsers)이 헤드리스 도구보다 적은 신호를 노출한다는 본래의 장점에 더해 브라우저 핑거프린트를 능동적으로 관리합니다. 모든 작업에서 동일한 기본 ID를 반복하는 대신 세션마다 고유하고 현실적인 핑거프린트 프로필을 제시하여, 고정 핑거프린트 설정으로는 충족할 수 없는 세션별 고유성 요건을 해결합니다. 사용자가 외부 핑거프린트 서비스를 직접 연결하지 않아도 헤디드 방식에서 오는 "수동적" 스텔스와 핑거프린트 다양성에서 오는 "능동적" 스텔스를 모두 런타임이 처리합니다.

핑거프린트 관리는 Octoparse의 [행동 시뮬레이션](/docs/ko/academy/human-like-scraping)과 함께 작동합니다. 런타임은 세션마다 서로 다른 실제 사용자처럼 보이고, 페이지에 진입한 뒤에도 실제 사용자처럼 행동합니다.

## 필요한 상황

능동적 핑거프린트 관리는 정적 사이트와 기본적인 봇 탐지에는 과한 방법일 수 있지만 더 강력한 방어 체계에서는 그 가치를 발휘합니다.

* **가벼운 방어.** 기본 헤디드 방식만으로 대부분 처리할 수 있습니다.
* **중간 수준의 방어(속도 제한 + 기본 탐지).** 다른 계층에 문제가 없다면 기본값으로도 대체로 충분합니다.
* **강력한 방어(Cloudflare, DataDome, HUMAN, Akamai Bot Manager).** 필수입니다. 세션마다 고유하고 현실적인 핑거프린트가 없으면 다른 모든 부분이 자연스러워도 수천 명의 "사용자"에서 같은 ID가 반복되어 스크래퍼가 차단됩니다.

핑거프린트 스텔스를 보완하는 행동 기법은 [사람과 유사한 스크래핑](/docs/ko/academy/human-like-scraping)을 참조하세요. 핑거프린트 관리로 우회하려는 구체적인 방어 시스템은 [CAPTCHA 및 Cloudflare 우회](/docs/ko/academy/captcha-and-cloudflare)를 참조하세요.
