realfp.com

유저 에이전트란 무엇인가요?

브라우저 지문에 대해 이야기할 때 가장 먼저 언급되는 것은 바로 User-Agent입니다. 이는 브라우저가 웹사이트 서버로 보내는 HTTP 헤더로, 브라우저 유형, 버전, 운영 체제 등의 정보가 포함되어 있습니다.

HTTP 헤더란 무엇인가요?
브라우저에 URL을 입력하고 엔터 키를 누르면, 브라우저는 웹페이지 콘텐츠를 가져오기 위해 서버에 요청을 보냅니다. 이 요청에는 몇 가지 추가 정보가 포함되는데, 이 정보가 바로 HTTP 헤더입니다.

HTTP 헤더는 레스토랑에서 웨이터에게 건네는 주문서와 같다고 생각할 수 있습니다. 자리에 앉아 원하는 것을 적어 건네면 주방에서는 당신이 무엇을 원하는지 알게 됩니다. 마찬가지로, HTTP 헤더는 서버에게 당신의 브라우저가 무엇을 요청하는지, 그리고 어떤 특별한 요구 사항이 있는지를 알려줍니다.

HTTP 헤더에는 다음과 같은 다양한 정보가 포함됩니다:
User-Agent —— 웨이터에게 당신의 이름을 알려 누가 주문하는지 알게 하는 것과 같습니다. 이는 서버에 당신이 사용하는 브라우저와 운영 체제를 알려줍니다.
Accept —— 주문서에 선호하는 음식 종류(예: 중식, 양식 또는 채식)를 명시하는 것과 같습니다. 이는 서버에 당신의 브라우저가 HTML 웹페이지, 이미지 또는 비디오와 같은 어떤 응답 형식을 수락할 수 있는지 알려줍니다.
Referer —— 웨이터에게 친구 추천으로 이 레스토랑에 왔다고 말하는 것과 같습니다. 이는 서버에 당신이 어떤 웹페이지에서 이동해 왔는지 알려줍니다.
Cookie —— 주문서에 '맵지 않게'나 '소금 적게'와 같은 특별 요청을 적는 것과 같습니다. 쿠키는 브라우저에 저장되는 작은 텍스트 파일로, 당신의 웹사이트 방문과 관련된 정보가 포함되어 있습니다.

HTTP 헤더의 목적은 간단합니다. 서버가 당신의 요청을 이해하고 가장 적절한 콘텐츠를 반환하도록 돕는 것입니다. 마치 주문서가 웨이터에게 당신이 무엇을 먹고 싶은지 알려주는 것처럼 말이죠.

User-Agent는 무엇으로 구성되나요?
User-Agent 문자열은 여러 부분으로 구성되며, 각 부분은 브라우저 유형부터 운영 체제 버전에 이르기까지 특정 정보를 담고 있습니다. 몇 가지 예시를 통해 분석해 보겠습니다.

예시 1 (Windows의 Chrome):
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36

예시 2 (Windows의 Firefox):
Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:93.0) Gecko/20100101 Firefox/93.0

예시 3 (macOS의 Safari):
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Safari/605.1.15

각 부분의 의미는 다음과 같습니다:
Mozilla/5.0 —— 해당 User-Agent가 Mozilla 사양을 따르며 버전이 5.0임을 나타내는 일반적인 식별자입니다.
운영 체제 정보 —— 사용자의 운영 체제에 대한 상세 정보 및 버전입니다. 이는 개발자에게 중요합니다. 왜냐하면 운영 체제마다 다른 특성이나 제한이 있을 수 있기 때문입니다. 예를 들어, (Windows NT 10.0; Win64; x64)는 Windows 10 64비트 시스템을 의미합니다.
렌더링 엔진 정보 —— 브라우저가 웹페이지를 렌더링하는 데 사용하는 핵심 구성 요소입니다. 렌더링 엔진을 이해하면 개발자가 특정 브라우저에 맞게 웹사이트를 최적화하는 데 도움이 됩니다. 예를 들어, AppleWebKit/537.36은 Apple의 WebKit 엔진을 사용하고 있음을 나타냅니다.
호환성 모드 정보 —— 브라우저가 특정 호환성 모드에서 실행되고 있는지 여부를 나타내며, 개발자가 웹사이트가 다양한 브라우저 모드에 적응할 수 있도록 보장하는 데 도움이 됩니다. (KHTML, like Gecko)는 브라우저가 페이지를 처리할 때 KHTML 및 Gecko와 유사한 렌더링 엔진을 사용했음을 나타냅니다.
애플리케이션 정보 —— 브라우저의 구체적인 이름과 버전 번호입니다. 예를 들어, Chrome/94.0.4606.81은 사용자가 Chrome 94.0.4606.81 버전을 사용하고 있음을 나타냅니다.

모든 브라우저의 User-Agent는 동일한가요?
완전히 같지는 않습니다. Chrome, Firefox, Safari, Edge와 같은 주요 브라우저의 User-Agent는 모두 운영 체제, 브라우저 유형, 버전, 렌더링 엔진 등의 정보를 포함하지만, 그들 사이에는 미세한 차이가 있습니다.

비교해 보겠습니다:

일반적인 식별자를 제외하고 각 브라우저의 User-Agent에는 명백한 차이가 있음을 알 수 있습니다.

왜 두 개의 User-Agent가 있을까요?
realfp와 같은 도구를 사용하여 브라우저의 User-Agent 지문을 감지할 때, 두 개의 다른 User-Agent가 표시되는 것을 발견할 수 있습니다. 왜 그럴까요?

실제로 사용자의 User-Agent를 얻는 방법에는두 가지가 있습니다:
HTTP 요청을 통해 얻기 —— 서버 측에서 수행되며, 서버가 HTTP 헤더의 User-Agent 필드를 분석합니다.
JavaScript를 통해 얻기 —— 클라이언트 측(사용자 브라우저)에서 수행되며, window.navigator.userAgent와 같은 JavaScript 함수를 사용하고 서버 측 HTTP 요청에 의존하지 않습니다.

예를 들어, 인터넷에 연결되지 않은 컴퓨터가 있다고 가정해 봅시다. 브라우저는 어떤 웹사이트에도 요청을 보낼 수 없습니다. 하지만 이 브라우저의 User-Agent를 알고 싶다면, Chrome을 열고 F12를 눌러 개발자 도구를 연 다음, Console 탭을 클릭하고 콘솔에 window.navigator.userAgent를 입력하면 해당 브라우저의 User-Agent를 바로 볼 수 있습니다.

웹사이트 콘텐츠를 크롤링하는 스크립트를 자주 작성한다면, 이 두 User-Agent가 일관되게 수정되었는지 확인하는 것이 매우 중요합니다. 항상 realfp와 같은 도구를 사용하여 수정된 User-Agent가 실제 시나리오와 일치하는지 확인해야 합니다.

User-Agent는 어떤 용도로 사용되나요?
오늘날의 디지털 환경에서 User-Agent는 다음과 같은 광범위한 실제 응용 분야를 가지고 있습니다:
웹사이트 트래픽 분석 —— 분석 도구는 User-Agent 데이터를 활용하여 방문자의 브라우저, 운영 체제 및 장치 유형을 추적하고, 웹사이트 운영자가 잠재 고객을 이해하고 사용자 경험을 최적화하는 데 도움을 줍니다.
웹사이트 호환성 —— 개발자는 User-Agent 정보를 분석하여 웹사이트가 다양한 브라우저와 장치에서 정상적으로 작동하는지 확인합니다.
악의적인 활동 감지 —— 보안팀과 관리자는 User-Agent 데이터를 활용하여 의심스럽거나 비정상적인 활동을 감지합니다. 특정 User-Agent 문자열이 공격이나 남용 행위를 암시할 수 있기 때문입니다.
정밀 타겟 광고 —— 마케팅팀은 User-Agent 데이터를 활용하여 광고를 더 잘 타겟팅합니다. 장치와 브라우저가 다른 사용자는 광고 형식에 다르게 반응할 수 있기 때문입니다.
데이터 분석 및 시장 조사 —— 연구원과 분석가는 User-Agent 데이터를 활용하여 다양한 브라우저와 장치에서 사용자의 행동을 이해하고, 이를 통해 사용자 선호도와 트렌드에 대한 통찰력을 얻습니다.

다중 계정 관리
앞선 논의에서 알 수 있듯이, 웹사이트는 User-Agent를 통해 사용자 장치 및 브라우징 습관에 대한 많은 정보를 얻을 수 있습니다. 여기에는 다음이 포함됩니다:
· 브라우저 유형 및 버전
· 운영 체제(Windows, macOS, Android 등)
· 장치 유형(컴퓨터 또는 모바일)

여러 계정을 관리하는 경우, 각 계정 간의 정보 특성에 차이가 있는지 반드시 확인해야 합니다. 그렇지 않으면 웹사이트가 이 정보를 기반으로 여러 계정을 연관시킬 수 있습니다.

브라우저 확장 프로그램을 사용하여 User-Agent를 수정하는 것은 브라우저를 효과적으로 위장할 수 없으며, 이러한 예방 조치는 안전하지 않습니다. 특히 User-Agent 지문이 다른 지문 정보와 결합될 때, 실제 장치의 특성과 일치해야 합니다.

이에 비해, 지문 브라우저는 실제 장치 특성과 일치하는 지문을 생성하고 각 계정을 독립적이고 격리된 환경에서 실행할 수 있게 해줍니다. 이는 개인 정보를 보호할 뿐만 아니라 계정의 안전성도 보장합니다.