User-Agent 문자열 구조, RFC 7231 사양 및 User-Agent Client Hints(UA-CH) 전환 분석
User-Agent(UA) 문자열은 1993년 NCSA Mosaic 브라우저 시절부터 시작되어 HTTP/1.0 및 RFC 7231(현재 RFC 9110) 표준으로 정립된 클라이언트 식별용 HTTP 헤더 토큰입니다. 웹 서버는 이 헤더를 분석하여 모바일/데스크톱 화면 분기, 브라우저 호환 폴리필(Polyfill) 주입 및 악성 봇 탐지(Bot Detection)를 수행합니다.
초기 브라우저들의 호환성 전쟁으로 인해 오늘날의 User-Agent 문자열은 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36과 같이 수많은 레거시 키워드가 얽혀 있는 복잡한 형태를 띠고 있습니다. 본 도구는 복합 토큰 파싱 알고리즘을 통해 실제 브라우저와 운영체제를 정밀하게 분리해 냅니다.
다중 토큰 정규식 파싱 엔진
Mozilla, AppleWebKit, Safari, Chrome 등이 혼재된 복합 UA 토큰에서 실제 최종 렌더러와 브라우저 버전을 정확히 추출합니다.
차세대 Client Hints (UA-CH) 연계
레거시 문자열 파싱뿐만 아니라 navigator.userAgentData 및 Navigator 하드웨어 API를 통합 분석합니다.
크롤러 / 봇(Bot) 및 디바이스 모델 분류
Googlebot, Bingbot 등 주요 검색 엔진 크롤러와 스마트폰, 태블릿, 데스크톱 기기 유형을 신속하게 식별합니다.
1. User-Agent 문자열 구성 요소 및 토큰별 구조 분석
일반적인 크롬/사파리 브라우저 UA 문자열의 각 세그먼트별 기술적 의미입니다.
| 토큰 세그먼트 (Token) | 실제 예시 값 (Sample Value) | 기술적 배경 및 의미 (Technical Context) | ||
|---|---|---|---|---|
| 호환성 헤더 (Compatibility) | Mozilla/5.0 | 넷스케이프(Netscape) 호환성을 선언하는 레거시 표준 접두어 | 모든 최신 브라우저가 공통으로 포함 | 역사적 호환성 유지 목적 |
| 운영체제 정보 (Platform / OS) | (Windows NT 10.0; Win64; x64) | 호스트 OS 명칭, 세부 커널 버전(NT 10.0 = Win10/11) 및 CPU 비트수 | OS 및 아키텍처 판별 핵심 지표 | macOS의 경우 Mac OS X 10_15_7 고정 경향 |
| 렌더링 엔진 (Layout Engine) | AppleWebKit/537.36 (KHTML, like Gecko) | Safari WebKit 및 KHTML 기반 파생 엔진 선언 | CSS 및 렌더링 파이프라인 엔진 | Chrome, Edge, Safari 공통 기반 |
| 실제 브라우저 (User Agent Product) | Chrome/128.0.0.0 Safari/537.36 | 실제 사용자 브라우저 명칭 및 메이저 빌드 버전 | 최종 사용자 애플리케이션 식별자 | Edge, Whale, Brave 등도 추가 토큰 표기 |
2. User-Agent 문자열의 동결(UA Freezing)과 User-Agent Client Hints(UA-CH) 도입 배경
① 브라우저 핑거프린팅(Fingerprinting)과 개인정보 보호 이슈:
- 과거 UA 문자열에는 마이너 OS 패치 버전, 하드웨어 칩셋, 빌드 번호 등 지나치게 상세한 정보가 포함되어 사용자 동의 없는 웹 추적(Fingerprinting)에 악용되었습니다.
② 구글 크롬 및 W3C의 UA 문자열 축소(User-Agent Reduction / Freezing):
- 주요 브라우저들은 UA 문자열의 OS 버전(예: Mac OS X 10_15_7 고정)과 마이너 빌드 번호를 고정값으로 동결하고 있습니다.
③ Client Hints(Sec-CH-UA) 차세대 표준 구조:
- 대신 서버가 필요로 할 때만 명시적 HTTPS 헤더(Sec-CH-UA-Model, Sec-CH-UA-Platform-Version)나 JavaScript API(navigator.userAgentData.getHighEntropyValues())를 통해 필요한 엔트로피 정보를 세분화하여 요청하도록 보안 정책이 전환되었습니다.
3. 프로그래밍 언어별 User-Agent 파싱 실무 코드 예시 (Code Cheatsheets)
// npm install ua-parser-js
const UAParser = require('ua-parser-js');
const parser = new UAParser(navigator.userAgent);
const result = parser.getResult();
console.log("Browser:", result.browser.name, result.browser.version);
console.log("OS:", result.os.name, result.os.version);
console.log("Device:", result.device.type, result.device.model);# pip install user-agents
from user_agents import parse
ua_string = "Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X)..."
user_agent = parse(ua_string)
print("Browser:", user_agent.browser.family, user_agent.browser.version_string)
print("OS:", user_agent.os.family, user_agent.os.version_string)
print("Is Mobile:", user_agent.is_mobile)
print("Is Bot/Crawler:", user_agent.is_bot)# Mobile redirection based on User-Agent
map $http_user_agent $is_mobile {
default 0;
"~*android|iphone|ipod|mobile" 1;
}
server {
if ($is_mobile) {
rewrite ^/$ /mobile/ permanent;
}
}자주 묻는 질문 (FAQ)
Q.모든 브라우저의 User-Agent에 왜 "Mozilla/5.0"이 포함되어 있나요?
웹 초창기(1990년대) 넷스케이프(Netscape, 코드명 Mozilla) 브라우저 전용으로 작성된 웹사이트들이 다른 브라우저의 접속을 차단하자, Internet Explorer와 이후의 Safari, Chrome 등이 "우리도 넷스케이프 기능을 완벽히 지원하는 호환 브라우저다"라는 의미로 Mozilla/5.0 헤더를 붙이게 되었습니다. 현재는 모든 최신 브라우저의 관습적 표준 접두어가 되었습니다.
Q.Windows 11을 사용 중인데 OS가 Windows 10(Windows NT 10.0)으로 감지됩니다. 버그인가요?
버그가 아닙니다. 마이크로소프트와 브라우저 벤더들은 기존 수많은 레거시 웹사이트들의 호환성 깨짐을 방지하기 위해, Windows 11에서도 기본 User-Agent 문자열에는 Windows NT 10.0을 유지하도록 설계했습니다. 정밀한 Win11 판별을 위해서는 차세대 navigator.userAgentData Client Hints API를 확인해야 합니다.
Q.최신 macOS 버전인데 UA에는 왜 항상 Mac OS X 10_15_7로 표시되나요?
Apple Safari 및 Google Chrome은 브라우저 핑거프린팅 추적을 차단하기 위한 개인정보 보호 정책(UA Freezing)의 일환으로, macOS 11(Big Sur), 12(Monterey), 13(Ventura), 14(Sonoma) 등 최신 OS에서도 기본 UA 문자열의 OS 버전을 10_15_7로 동결하여 전송하고 있습니다.
Q.내 User-Agent 정보가 서버에 수집되거나 저장되나요?
본 도구는 클라이언트 사이드에서 작동합니다. 브라우저의 User-Agent 파싱 및 하드웨어 감지는 사용자의 로컬 컴퓨터 브라우저 엔진 내에서만 즉시 연산되며, 로그나 데이터가 외부 서버로 전송되지 않습니다.
Q.User-Agent 문자열을 사용자가 임의로 변조(Spoofing)할 수 있나요?
네, 가능합니다. Chrome 개발자 도구(F12 > Network Conditions)나 확장 프로그램을 통해 사용자는 얼마든지 User-Agent를 iPhone이나 Googlebot 등으로 변조할 수 있습니다. 따라서 백엔드 보안 인증 시에는 UA에만 의존하지 않고 다단계 보안 검증을 병행해야 합니다.