User-Agent 확인 & 분석기
웹사이트 접속 시 서버로 전송되는 브라우저 식별자(User-Agent String)를 확인하고 세부 정보를 파싱합니다.
처리는 전부 사용자 PC 브라우저 안에서 이루어집니다. 데이터가 외부로 전송되지 않습니다.
분석 중...
엔진: -
분석 중...
플랫폼: -
분석 중...
터치: -
분석 중...
DPR: -
분석 중...
타임존: -
정상 동작
DNT: -
왜 모든 브라우저가 Mozilla로 시작하는가
위에 찍힌 문자열은 크롬을 쓰든 사파리를 쓰든 대부분 Mozilla/5.0으로 시작합니다. 1994년 넷스케이프가 프레임을 지원하자 서버들이 문자열에 Mozilla가 들어 있는지만 보고 최신 페이지를 내려주기 시작했고, 뒤늦게 프레임을 지원한 인터넷 익스플로러가 같은 페이지를 받으려고 자기 이름 앞에 Mozilla를 붙인 것이 시작입니다.
같은 일이 반복됐습니다. 서버가 Gecko를 찾자 KDE의 KHTML 엔진이 KHTML, like Gecko를 덧붙였고, KHTML에서 갈라져 나온 WebKit이 그 문구를 물려받았으며, WebKit으로 만든 크롬은 사파리용 페이지를 받으려고 끝에 Safari를 남겼습니다. 크롬 문자열에 든 네 이름 중 실제로 크롬과 관계있는 것은 하나도 없습니다.
| 토큰 | 실제 의미 |
|---|---|
| Mozilla/5.0 | 아무 뜻도 없는 접두사. 위의 흉내가 굳어져 거의 모든 브라우저가 붙입니다 |
| Windows NT 10.0; Win64; x64 | 윈도우. NT 10.0은 10과 11이 함께 쓰는 값이라 UA만으로는 둘을 구분할 수 없습니다 |
| Macintosh; Intel Mac OS X 10_15_7 | 맥. 크롬은 실제 버전과 무관하게 10_15_7로 고정하며, 애플 실리콘도 Intel로 적습니다 |
| Linux; Android 10; K | 안드로이드. 크롬이 버전을 10, 기기명을 K로 고정한 값이라 기종을 알 수 없습니다 |
| AppleWebKit/537.36 | 2013년 크롬이 WebKit에서 갈라져 나온 뒤로 그대로 멈춰 있는 숫자입니다 |
| KHTML, like Gecko | KDE 컨커러의 엔진이 파이어폭스용 페이지를 받으려고 붙였던 문구입니다 |
| Chrome/000.0.0.0 | 앞자리 메이저 버전만 실제 값이고 뒤 세 자리는 0으로 고정돼 있습니다 |
| Safari/537.36 | 크롬과 엣지가 사파리용 페이지를 받으려고 남겨 둔 꼬리표입니다 |
| Version/26.0 Safari/605.1.15 | 진짜 사파리. 앞에 Version이 붙어 있는지가 사파리를 가려내는 단서입니다 |
| Mobile | 모바일 레이아웃을 원한다는 힌트. 데스크톱과 휴대폰을 가르는 사실상 유일한 토큰입니다 |
| Edg/ · Whale/ · OPR/ | 크로미움 계열 브라우저가 문자열 맨 뒤에 덧붙인 자기 이름입니다 |
정리하면 이 문자열에서 실제 정보를 담은 부분은 브라우저 이름과 메이저 버전, 그리고 Mobile이 붙었는지 정도입니다. 나머지는 흉내이거나 고정값입니다.
동결된 UA와 Client Hints
크롬은 2023년 5월 113 버전부터 축소된 UA를 기본값으로 돌렸습니다. 플랫폼 버전과 기기명을 위 표처럼 고정값으로 바꿔, 문자열만으로 사람을 좁혀 나가기 어렵게 만든 조치입니다. 대신 세부 정보는 Client Hints라는 별도 헤더로 옮겼습니다.
브랜드와 모바일 여부, 플랫폼 이름 정도는 요청 없이도 매번 전송됩니다. 반면 OS 상세 버전, 기기 모델, CPU 아키텍처는 서버가 Accept-CH 헤더로 따로 요구해야 받아 갈 수 있습니다. 윈도우 10과 11의 구분도 이 단계에서야 가능해지는데, 플랫폼 버전 앞자리가 13 이상이면 11입니다. 달라진 핵심은 값을 감췄다는 것이 아니라 가져가려면 요구해야 한다는 점입니다. 그래야 누가 무엇을 수집하는지가 드러납니다.
브랜드 목록에는 Not_A Brand 같은 없는 이름이 섞여 들어갑니다. 서버가 특정 문자열을 하드코딩해 두고 모르는 이름을 거부하는 일을 막으려고 이름과 순서를 일부러 흐트러뜨리는 GREASE라는 장치입니다. 다만 이 구조는 크로미움 계열만의 것이라 파이어폭스와 사파리는 Client Hints를 보내지 않으며, 그래서 UA 문자열 파싱은 아직 사라지지 못했습니다.
UA로 브라우저를 판별하면 안 되는 이유
UA는 브라우저가 스스로 적어 보내는 자기소개일 뿐입니다. 개발자도구의 기기 모드나 확장 프로그램으로 누구나 바꿀 수 있고, 바꿔도 서버는 알아채지 못합니다.
더 흔한 문제는 정직한 브라우저가 보내는 값도 부정확하다는 것입니다. 아이패드 사파리는 iPadOS 13부터 맥과 구별되지 않는 UA를 보냅니다. 데스크톱 사이트를 받기 위한 선택이지만, 그 결과 위 분석 카드에서도 아이패드는 데스크톱으로 잡힙니다. 함께 표시되는 터치 지점 수를 보고서야 태블릿임을 짐작할 수 있습니다. 이 페이지가 맥을 10.15.7로, 윈도우를 10과 11로 묶어 보여주는 것도 같은 이유이며 파싱 오류가 아닙니다.
그래서 코드에서는 브라우저 이름 대신 필요한 기능이 실제로 있는지를 확인하는 편이 안전합니다. 쓰려는 API가 객체에 존재하는지 보고, 화면 폭은 미디어 쿼리로, 터치 여부는 터치 지점 수로 판단하는 식입니다. 이름으로 걸어 둔 조건은 그 브라우저가 나중에 기능을 지원해도 저절로 풀리지 않아, 몇 년 뒤 멀쩡한 브라우저를 막는 코드로 남습니다. UA 분기가 그래도 타당한 경우는 설치 파일을 골라 주거나 알려진 버그를 우회하거나 통계를 낼 때 정도이고, 그때도 판별이 틀리면 기능이 멈추도록 짜면 안 됩니다.
UA가 지문이 되는 방식
UA 하나로 개인을 특정하지는 못합니다. 문제는 조합입니다. 2010년 EFF의 Panopticlick 조사에서 브라우저 지문 전체는 18.1비트의 엔트로피를 가졌고, 그중 UA 문자열 하나가 10비트를 차지했습니다. UA만으로도 약 1000명 중 한 명 수준까지 좁혀진다는 뜻입니다. 여기에 위 카드의 화면 해상도와 DPR, 타임존, 언어를 이어 붙이면 대부분의 방문자는 거의 유일해집니다.
쿠키와 다른 점은 지울 것이 없다는 데 있습니다. 요청마다 새로 드러나는 특성이라 시크릿 창으로 열거나 쿠키를 비워도 같은 지문이 다시 만들어집니다. 위쪽 DNT 항목이 무의미해진 것도 같은 흐름입니다. 지킬 의무가 없는 요청인 데다 켜 둔 사람이 드물어 그 자체가 식별 신호가 되기 때문에, 사파리는 2019년에, 파이어폭스는 2025년 135 버전에서 이 설정을 없앴습니다.
UA만 바꿔 주는 확장 프로그램은 대개 역효과입니다. 흔치 않은 UA에 해상도와 글꼴은 원래대로 남으면 오히려 더 눈에 띕니다. 여러 사람을 같은 값으로 모으는 방식이라야 효과가 있습니다. 참고로 이 페이지는 브라우저가 이미 가지고 있는 값을 읽어 화면에 그릴 뿐 어디로도 보내지 않습니다. 다만 UA 자체는 이 도구와 무관하게, 접속하는 모든 서버에 이미 전달되고 있습니다.
다른 도구
전체 보기 →- 내 IP 주소 확인 & WebRTC 보안 점검 현재 공인 IP 주소(IPv4/IPv6), 통신사(ISP), 접속 지역 및 WebRTC 로컬 IP 누출 여부를 실시간 확인합니다.
- 내 컴퓨터 사양 확인 (CPU, RAM, GPU, Hz) 프로그램 설치 없이 CPU 코어 수, RAM 용량 추정, 그래픽카드 모델명, 모니터 주사율(Hz), 배터리를 진단합니다.
- 모니터 불량화소 테스트 & 결함 진단 전체화면 RGBW 색상 순환으로 불량화소(광점, 암점), 빛샘, 잔상, 명암비, 그라데이션 밴딩을 점검합니다.
- 마이크 테스트 & 녹음 확인 마이크가 소리를 제대로 받는지 실시간 음량 막대로 확인하고, 녹음해서 그대로 들어봅니다.
- 웹캠 테스트 & 카메라 확인 화상회의 전에 웹캠 화면, 해상도, 프레임률을 확인하고 카메라가 여러 대면 골라서 봅니다.
- 스피커 & 좌우 채널 테스트 왼쪽과 오른쪽 스피커가 각각 소리를 내는지, 이어폰 좌우가 바뀌지 않았는지 확인합니다.