최신 Chrome의 User-Agent를 보면 "Mozilla/5.0 ... AppleWebKit/537.36 ... Chrome/120.0 Safari/537.36"처럼 실제로는 Chrome이 아닌 브라우저 이름으로 가득한 문자열을 볼 수 있다. 이는 우연이 아니라 수십 년에 걸친 역사적 호환성 땜질의 결과다.
"Mozilla"라는 단어의 기원
1990년대 웹사이트들은 User-Agent에 "Mozilla"(당시 시장을 주도하던 Netscape Navigator의 코드명)가 포함되어 있는지로 브라우저 기능을 판별했다. Internet Explorer도 같은 "고급" 콘텐츠를 받고 싶었기에 자신의 User-Agent에도 "Mozilla"를 추가하기 시작했고, 이 관행은 업계에 영원히 굳어졌다.
삼성 인터넷과 카카오톡 인앱 브라우저
한국은 삼성 스마트폰이 자국 시장에서 특히 강세를 보이는 곳으로, 기기에 기본 탑재된 삼성 인터넷(Samsung Internet) 브라우저의 점유율이 다른 나라보다 뚜렷하게 높다. 게다가 카카오톡처럼 국민 메신저 앱 안에서 링크를 열면 자체 인앱 브라우저가 실행되는 경우가 매우 흔한데, 이런 인앱 브라우저는 보통 Chromium 기반이지만 User-Agent에 자체 토큰을 덧붙인다. 그래서 국내 트래픽 로그를 분석할 때는 Chrome·Safari뿐 아니라 삼성 인터넷과 각종 인앱 브라우저의 User-Agent 패턴까지 함께 고려해야 정확한 그림을 얻을 수 있다.
User-Agent 기반 감지가 신뢰할 수 없는 이유
새로운 브라우저가 나올 때마다 호환성을 위해 이전 브라우저들의 토큰을 User-Agent에 계속 덧붙여 왔기 때문에, 이 문자열은 브라우저를 정확히 설명하는 값이 아니라 역사적 잔재의 더미가 되어버렸다. 오늘날의 모범 사례는 User-Agent를 파싱하는 대신 특정 JavaScript/CSS 기능의 지원 여부를 직접 감지하는 것이다.
어디에 쓰는가
- 클라이언트가 정확히 어떤 브라우저와 버전을 보고하는지 확인해 호환성 문제를 진단한다.
- 방문자의 User-Agent가 기록된 서버 로그를 해석한다.
- User-Agent 기반의 오래된 감지 코드가 자주 틀리는 이유를 이해한다.
대안으로서의 User-Agent Client Hints
하나의 비대해진 문자열을 파싱하는 대신, Chromium 기반 최신 브라우저들은 User-Agent Client Hints를 지원한다 — Sec-CH-UA, Sec-CH-UA-Platform, Sec-CH-UA-Mobile처럼 서버가 명시적으로 요청해야 하고 구조화된 형태로 받는 개별 헤더들이다. 이는 개인정보 보호를 위한 더 넓은 "User-Agent Reduction" 흐름의 일부이며, 시간이 지날수록 전통적인 User-Agent 문자열에 담기는 정보는 점점 줄어들 것이다.