이 저장소에는 정규화되고 큐레이션된 user agent 문자열 데이터 세트가 포함되어 있으며, JSON 파일로 저장되고 단순한 user agent 데이터를 도출하기 위한 조회 테이블로 사용되도록 설계되었습니다. 예로는 user agent 클라이언트와 운영 체제와 같은 간단한 데이터가 있습니다.
PageviewsOnline의 구성 요소로 사용되지만, 일반 용도로 여기에서 게시됩니다.
데이터 세트는 데이터를 검증하고 다른 형식이나 프로그래밍 언어(예: Java)로 내보내는 간단한 보조 스크립트로 보완됩니다.
프로젝트 철학
이 프로젝트의 목표는 만능이거나 완벽하게 정확한 사용자 에이전트 감지 시스템을 제공하는 것이 아니라, 실제 사용과 커뮤니티의 기여를 통해 시간이 지남에 따라 개선되는 실용적이고 최선의 노력을 기울인 해결책을 제시하는 것입니다.
사용자 에이전트 탐지는 본질적으로 불완전합니다. 완벽한 정확성을 추구하기보다 이 프로젝트는 다음과 같은 것에 집중합니다:
- 실용적
- 유지 관리가 쉬움
- 투명한
- 현실 세계의 분석과 분류에 충분해요
정확도는 시간에 따라 선별된 업데이트, 실제 사용, 그리고 커뮤니티 기여를 통해 향상돼요.
휴리스틱 파싱과 복잡한 정규 표현식은 종종 예측 가능성을 희생하는 대신 미미한 정확도 향상을 얻는다.
다음과 같은 항목을 선호합니다:
- 마법보다 투명성
- 선별된 데이터가 불투명한 로직보다 우선합니다
- 설명 가능한 결과가 추측 기반 탐지보다 더 중요합니다
주요 기능
- 정규화되고 사람이 검토한 사용자 에이전트 데이터셋
- 간단하고 예측 가능한 조회 동작
- JSON 기반 포맷으로, 살펴보기 쉽고 버전 관리가 간편합니다
- 경량화된 유효성 검사 스크립트
- 다른 언어용 헬퍼 내보내기(예: Java)
- 생산 환경에서 SaaS가 적극적으로 사용 중
정규화된 사용자 에이전트 문자열
이 프로젝트의 주된 목표는 빠르고 예측 가능한 방식으로 사용자 에이전트 문자열에서 고수준의 안정적인 정보를 추출하는 것입니다.
이를 지원하기 위해 각 사용자 에이전트 문자열은 처리하기 전에 정규화됩니다. 정규화는 버전 번호나 대소문자 차이 같은 불안정한 변동을 제거하면서도 사용자 에이전트의 구조적 의미를 보존합니다.
User-Agent 문자열은 다음 단계에 따라 정규화됩니다:
- 모든 숫자(0-9)를 플레이스홀더 문자 x로 바꿉니다. 버전 변경으로 인한 노이즈를 제거하면서 토큰의 구조와 길이를 보존합니다.
- 전체 문자열을 소문자로 변환합니다. User 에이전트 토큰은 관례상 대소문자를 구분하지 않으며, 소문자화는 일관되고 신뢰할 수 있는 조회를 보장합니다.
예를 들어, 아래의 사용자 에이전트 문자열:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36
다음으로 정규화됩니다:
mozilla/x.x (windows nt xx.x; winxx; xxx) applewebkit/xxx.xx (khtml, like gecko) chrome/xxx.x.x.x safari/xxx.xx
이 표준화 접근 방식은 사용자 에이전트를 시간이 지나도 더 쉽게 그룹화하고 비교하며 유지할 수 있게 해주고, 고수준의 클라이언트 및 운영 체제 분류에는 충분히 정확합니다.
버전별 및 대소문자 관련 가변성을 제거함으로써 조회 과정은 더 예측 가능해지고 향후 사용자 에이전트 변경에도 더 탄력적으로 대응할 수 있습니다.
데이터 형식
각 정규화된 사용자 에이전트 항목에는 다음이 포함됩니다:
- id - 정규화된 사용자 에이전트 문자열
- client_family - 상위 수준의 클라이언트 분류 (예: 브라우저, 봇, 앱)
- os_family - 고수준의 운영체제 분류
데이터 세트가 커지면 정확한 필드가 시간이 지남에 따라 바뀔 수 있습니다.
조회 동작
정규화된 문자열을 대상으로 사용자 에이전트 매칭이 수행됩니다.
정확한 매치를 선호합니다. 부분 매칭이나 휴리스틱 매칭은 예측 가능하고 디버깅하기 쉽도록 의도적으로 피합니다.
기여하기
기여는 매우 환영되며 이 프로젝트의 전반적인 품질과 정확성을 향상시키는 데 도움이 됩니다.
가장 큰 영향력을 발휘하는 기여 방법은 user_agents.json 파일에 표준화된 사용자 에이전트 항목을 추가하거나 업데이트하고, 관련 분류 데이터도 함께 제공하는 것입니다.
변경 사항이 준비되면 필요한 데이터 및/또는 코드 업데이트를 포함한 풀 리퀘스트를 제출해 주세요.
부분적이거나 불완전한 정보도 유용하고 감사합니다 — 모든 기여가 커버리지와 장기적인 신뢰성 향상에 도움이 됩니다.
시작하기(빠른 가이드)
이 프로젝트의 핵심은 data/ 디렉터리에 위치한 JSON 데이터 파일들의 모음입니다.
이 데이터를 유지하고 재사용하는 데 도움이 되도록, 저장소에는 기본적인 검증 및 내보내기 작업을 수행하는 간단한 Node.js 스크립트 몇 가지가 포함되어 있습니다.
일반적으로 사용 가능한 명령어:
- npm run test - JSON 데이터를 검증하고 구조적 또는 일관성 오류를 확인합니다.
- npm run build - 정규화된 데이터를 다른 프로그래밍 언어 형식(예: Java)으로 빌드하고, 정렬하고, 내보내어 더 쉽게 통합할 수 있도록 합니다.
이 도구들은 의도적으로 최소화되어 데이터 정확성과 이식성에 집중하며, 복잡한 처리보다는 단순성에 중점을 둡니다.
User-Agent 문자열은 신뢰할 수 없습니다.
사용자 에이전트 문자열에서 정확한 정보를 도출하는 것은 여러 가지 이유로 본질적으로 신뢰할 수 없다:
- 사용자 에이전트 문자열의 구조나 내용을 규정하는 공식 표준이나 명세는 존재하지 않습니다.
- 많은 사용자 에이전트가 호환성 및 레거시 이유로 다른 사용자 에이전트를 의도적으로 스푸핑하거나 모방합니다
이로 인해 user-agent 데이터를 완전히 정확하고 일관된 방식으로 파악하는 것은 매우 어렵습니다.
따라서 이 라이브러리는 최선의 노력으로 제공되는 솔루션으로 간주되어야 하며, 보장되거나 권위 있는 진실의 원천으로 간주되어서는 안 됩니다.
지속적인 사용과 커뮤니티의 기여가 이어지면 정확도는 시간이 지남에 따라 향상될 수 있습니다.
버전 관리 및 안정성
사용자 에이전트가 발전함에 따라 데이터 세트는 시간이 지나면서 변경될 수 있습니다.
분류는 마이너 버전 간에도 중대한 변경으로 간주되지 않습니다.
소비자들은 결과를 최선의 노력으로 제시된 단서로 간주해야 하며, 계약상의 보장은 아니다.
라이선스
이 프로젝트와 그 데이터는 Apache License 2.0 (Apache-2.0) 하에 배포됩니다.
상업적 사용, 수정 및 재배포가 허용됩니다.
기여를 환영하고 감사드립니다.
상표
PageviewsOnline, Two-Dot-Oh 및 관련 로고들, 서비스 이름 또는 브랜딩은 Two-Dot-Oh의 상표입니다.
이 프로젝트는 오픈 소스입니다. 다만 PageviewsOnline 이름이나 관련 브랜딩을 제품, 서비스 또는 제안과 관련하여 사용하는 것은 사전 서면 동의 없이는 허용되지 않습니다.
포크나 파생 저작물은 다른 이름과 브랜드를 사용해야 하며 PageviewsOnline의 보증이나 PageviewsOnline와의 제휴, 또는 Two-Dot-Oh의 보증이나 Two-Dot-Oh와의 제휴를 암시해서는 안 됩니다.