용어집

사용자 에이전트란 무엇인가요?

User-Agent는 요청을 보내는 클라이언트 소프트웨어를 식별하는 HTTP 요청 헤더입니다. 일반적으로 브라우저 이름, 버전, OS, 렌더링 엔진을 포함하며, 예를 들어 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'와 같습니다.

User-Agent 문자열이 무엇인지, 왜 웹사이트가 스크래퍼를 식별하는 데 가장 쉬운 신호로 사용하는지, 그리고 지문을 노출시키지 않으면서 IP와 함께 User-Agent를 회전시키는 방법을 이해합니다.

설명

User-Agent 헤더는 웹에서 가장 오래된 식별 수단 중 하나입니다. 클라이언트가 보내는 모든 HTTP 요청에는 클라이언트 소프트웨어(브라우저 또는 라이브러리), 버전, 운영체제, 그리고 종종 렌더링 엔진까지 명시하는 `User-Agent:` 라인이 포함됩니다. 서버는 이를 콘텐츠 협상(모바일 대 데스크톱 레이아웃), 분석, 그리고 점점 더 봇 탐지에 활용합니다.

스크래핑에서 User-Agent는 가장 쉽게 실수할 수 있는 신호입니다. 일반적인 HTTP 라이브러리의 기본 User-Agent(`python-requests/2.31.0`, `axios/1.5.0`, `okhttp/4.10.0`)는 명백한 단서가 됩니다. Playwright와 Puppeteer의 기본 User-Agent조차 `HeadlessChrome`을 포함하고 있어 안티봇 시스템이 즉시 이를 탐지합니다.

가장 단순한 해결책은 모든 요청에 Chrome UA를 설정하는 것입니다. 문제는 User-Agent만으로는 충분하지 않다는 점입니다. 최신 핑거프린팅 기술은 UA를 `sec-ch-ua` 클라이언트 힌트, TLS 핑거프린트, JavaScript navigator 객체, Accept-Language 헤더와 상호 대조합니다. Chrome UA를 설정하면서도 Python의 TLS 핸드셰이크를 그대로 노출하면 기본 UA를 그대로 두는 것보다 오히려 더 큰 위험 신호가 됩니다.

작동 방식

클라이언트가 서버에 연결을 열면, 요청 라인에는 헤더가 포함됩니다. `User-Agent` 라인도 그중 하나입니다. 서버는 이를 파싱하거나(또는 단순히 기록하고) 보이는 내용에 따라 요청을 라우팅합니다. Windows에서 최신 Chrome User-Agent는 다음과 같습니다: `Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36`. 'Mozilla/5.0' 접두사는 역사적인 것으로, 모든 브라우저가 레거시 호환성을 위해 이를 전송합니다.

실제 브라우저는 최신 HTTP에서 구조화된 브라우저/버전/플랫폼 데이터를 전달하는 `sec-ch-ua`('Sec-CH-UA' 클라이언트 힌트) 헤더도 전송합니다. 안티봇 시스템은 이를 User-Agent 문자열과 비교하여 불일치를 표시합니다. 따라서 User-Agent 로테이션은 일관된 `sec-ch-ua-*` 업데이트 및 일치하는 TLS 지문과 함께 이루어져야 합니다.

타입

데스크톱 브라우저 User-Agent

Windows/macOS/Linux의 Chrome, Firefox, Edge, Safari. 일반 웹 대상을 스크레이핑하는 데 가장 흔히 사용되는 UA 계열입니다.

모바일 브라우저 User-Agent

Android의 Chrome, iOS의 Safari, Samsung Internet. 모바일 대상 사이트를 스크레이핑하거나 지문 일관성을 위해 모바일 프록시와 함께 사용할 때 필요합니다.

봇 / 크롤러 User-Agent

`Googlebot/2.1`, `bingbot/2.0`과 같은 UA 식별. 정당한 검색 엔진 크롤러가 사용하며 일부 사이트는 이를 화이트리스트에 등록합니다. 이를 스푸핑하면 법적 및 ToS 문제가 발생할 위험이 있습니다.

라이브러리 기본 User-Agent

`python-requests/X.Y`, `curl/X.Y`, `Mozilla/5.0 (compatible; Java/X.Y)`. HTTP 라이브러리의 기본 UA입니다. 프로덕션 스크래핑에는 절대 사용하지 마세요. 쉽게 식별되기 때문입니다.

일반적인 사용 사례

콘텐츠 협상을 위한 클라이언트 브라우저 및 OS 식별
서버 측 분석 및 방문자 세분화
봇 탐지 (기본 라이브러리 UA는 명백한 단서입니다)
모바일 대 데스크톱 레이아웃 선택
브라우저 종류별 캐싱
다양한 실제 사용자를 모방하기 위한 스크래퍼의 User-Agent 로테이션
자주 묻는 질문

자주 묻는 질문

다음에 대한 일반적인 질문 user agent.

최근 몇 달 내에 출시된 실제 브라우저 버전과 일치하는 최신의 대중적인 User-Agent를 사용하세요. Windows나 macOS의 Chrome이 안전한 기본값입니다. 모든 요청에 하나의 고정된 UA를 사용하기보다는 최신 UA의 소규모 풀에서 로테이션하세요.

요청마다 로테이션하되, 무작위로 하지 마세요. 세션(워크플로우를 위한 관련 요청들의 묶음)이 지속되는 동안에는 하나의 UA를 유지한 다음, 세션이 끝나면 전환하세요. 요청마다 무작위로 UA를 바꾸는 것 자체가 지문 신호가 되는데, 실제 사용자는 페이지 로드 사이에 브라우저를 바꾸지 않기 때문입니다.

대부분의 경우 핑거프린트 불일치입니다. Chrome UA를 설정했는데 TLS 핸드셰이크가 Python 기본값이라면, 안티봇 벤더는 그 불일치를 감지합니다. UA를 일치하는 `sec-ch-ua` 헤더, 일치하는 TLS 핑거프린트(`curl_cffi` 또는 실제 브라우저 사용), 그리고 그럴듯한 Accept-Language와 함께 사용하세요. 그러면 UA 로테이션이 실제로 도움이 됩니다.

최신 상태를 유지하세요. 브라우저 버전은 2~6주마다 출시됩니다. 2026년에 Chrome 95가 포함된 User-Agent는 실제 사용자 중 더 이상 Chrome 95를 쓰는 사람이 없기 때문에 의심스럽습니다. 풀을 매달 업데이트하거나 ua-parser/ua-parser-js 공개 데이터셋 같은 최신 UA 소스에서 가져오세요.

예, User-Agent가 Chromium 기반(Chrome, Edge, Opera)이라고 주장하는 경우에 가능합니다. 최신 Chromium 브라우저는 `sec-ch-ua`, `sec-ch-ua-mobile`, `sec-ch-ua-platform` 헤더를 전송합니다. UA가 Chrome인데 이 헤더들이 없다면 안티봇 시스템이 불일치를 감지합니다.

예, 대부분의 관할권에서 그렇습니다. User-Agent 헤더는 클라이언트가 제어하는 단순한 문자열입니다. 이를 무엇으로 설정하든 그 자체는 합법이며, 그로 인한 접근으로 무엇을 하는지의 합법성은 대상 사이트의 서비스 약관, 안티봇 관련 법률(미국의 CFAA), 그리고 수집하는 데이터에 달려 있습니다. 위조된 UA로 공개 데이터를 스크래핑하는 것은 대체로 합법이지만, 인증 우회는 그렇지 않습니다.