AI 에이전트 탐지: Claude, ChatGPT, Perplexity 브라우저는 사람과 어떻게 다른가
AI 에이전트는 브라우저처럼 보이지만 사람과는 전혀 다르게 행동한다 — 짧고 목표 지향적인 세션, 픽셀 단위로 정확한 클릭, 오타 제로. Computer Use, Operator, Perplexity 트래픽을 실제 방문자와 구분하는 11가지 신호.
2024년, AI 에이전트는 실험용 데모에서 실제 프로덕션 트래픽으로 옮겨 갔다. Claude의 Computer Use API는 브라우저를 구동할 수 있다. ChatGPT의 브라우징 도구는 질의에 답하기 위해 웹사이트를 탐색한다. Perplexity의 답변 엔진은 실시간으로 크롤링한다. 그리고 점점 늘어나는 AI 기반 어시스턴트 범주 — Browserbase, Anthropic의 Computer Use, OpenAI Operator — 는 사용자를 대신해 엔드투엔드 웹 작업을 수행한다.
웹사이트 입장에서 이는 전통적인 bot detection의 두 범주 어느 쪽에도 들어맞지 않는 새로운 유형의 방문자를 만들어 낸다. AI 에이전트는 대규모로 데이터를 추출하는 스크래퍼가 아니다. UI를 클릭하며 돌아다니는 사람도 아니다. 이들은 그 중간에 있는 무언가다 — 세션당 한 방문자, 방문당 하나의 목표이지만, 기계적 속도와 기계적 정밀도로 실행된다.
이들을 탐지하는 일은 봇을 탐지하는 일과는 그 의미가 다르다. 때로는 이들에게 서비스를 제공하고 싶을 수도 있다(고객을 위해 쇼핑하는 유용한 에이전트). 때로는 차단하고 싶을 수도 있다(AI 래퍼를 통한 무단 스크래핑). 어느 쪽이든, 먼저 이들이 그곳에 있다는 사실을 알아야 한다.
AI 에이전트가 아키텍처 측면에서 어떻게 다른가
웹에서 AI 에이전트 트래픽을 만들어 내는 주요 아키텍처는 세 가지다.
브라우저 구동형 에이전트는 LLM이 제어하는 헤드리스 또는 헤드풀 브라우저를 실행한다. Anthropic의 Computer Use, OpenAI Operator, Browserbase, Skyvern이 모두 여기에 해당한다. 브라우저는 실제 Chrome 또는 Chromium이다. 에이전트는 DOM 조작을 통해, 또는 스크린샷 분석과 좌표 클릭을 통해 브라우저에 지시를 내린다.
API 전용 에이전트는 HTTP 라이브러리(Node.js, Python, Go)를 통해 페이지를 가져와 HTML을 LLM에 넘겨 처리한다. 대부분의 Perplexity 및 검색 기반 에이전트가 이 방식으로 동작한다. 브라우저가 없이 — 텍스트를 모델에 공급하는 페칭 계층만 있을 뿐이다.
하이브리드 에이전트는 JavaScript가 많은 사이트에는 브라우저를, 정적 콘텐츠에는 API 페칭을 사용한다. 많은 프로덕션 에이전트가 이 범주에 속하며, 대상에 따라 동적으로 방식을 선택한다.
각 아키텍처는 서로 다른 지문(fingerprint)을 남긴다.
신호 1. 브라우저 세션 수명
실제 사용자는 길고 집중력이 흐트러진 세션을 갖는다. 탭을 열고, 딴짓을 하다가, 다시 돌아온다. 의사결정 과제에서 사람의 세션 지속 시간 중앙값은 8~20분이다.
AI 에이전트는 짧고 집중된 세션을 갖는다. 전형적인 Computer Use 작업 — 항공권 예약, 식료품 주문, 제품 데이터 추출 — 은 엔드투엔드로 30초에서 3분이 걸린다. 세션은 페이지 로드로 시작해 5~30개의 동작을 순차적으로 실행한 뒤 종료된다.
10개가 넘는 개별 동작을 수행하고 브라우저 탭 전환이 없으면서 세션 지속 시간이 5분 미만인 경우는, 사람에게는 비전형적이고 에이전트에게는 전형적인 행동이다.
신호 2. 좌표 클릭 정밀도
Anthropic과 OpenAI의 브라우저 구동형 에이전트는 스크린샷 분석으로 UI 요소를 식별한 다음 좌표를 클릭한다. 좌표 계산은 픽셀 단위로 정확하다.
실제 사용자는 영역 안에서 클릭한다. 200x40 픽셀 크기의 버튼은 전체 영역에 걸쳐 클릭이 분포하며, 중심 쪽으로 치우치되 사람 특유의 편차를 보인다. AI 에이전트는 좁은 대역 안에서 — 대개 요소의 기하학적 중심에서 2~3픽셀 이내로 — 클릭한다. 평균 편차가 3픽셀 미만인 클릭 100회는 사람의 분포가 아니다.
탐지를 위해서는 클릭 좌표를 수집해 요소 경계를 기준으로 분석해야 한다. 이 방법은 세션 길이의 데이터에서 잘 작동한다.
신호 3. 탐색적 스크롤의 부재
사람은 페이지에 무엇이 있는지 보려고 스크롤한다. 아래로 내렸다가, 다시 위로 올렸다가, 중간까지 내린다. 눈길을 끄는 콘텐츠에서 멈춘다. 그들의 스크롤 궤적은 들쭉날쭉하다.
AI 에이전트는 필요할 때만 스크롤한다. 목표가 장바구니에 담기 버튼을 클릭하는 것이고 그 버튼이 화면 상단(above the fold)에 있다면, 에이전트는 아예 스크롤하지 않을 수도 있다. 대상 요소가 화면 하단(below the fold)에 있다면, 에이전트는 대상까지 한 번에 곧장 스크롤한 뒤 실행한다.
스크롤 방향 전환이 2회 미만이거나 모든 스크롤 이벤트에서 스크롤 속도가 일정한 세션은 탐색이 아니라 작업 중심의 브라우징을 나타낸다.
신호 4. 텍스트 입력 타이밍
실제 사용자는 분당 30~60단어의 속도로, 가변적인 멈춤과 이따금의 삭제, 미세한 수정을 곁들여 타이핑한다. 키 입력 타이밍은 분산이 크고 삭제율이 0이 아닌 분포를 따른다.
AI 에이전트는 값을 붙여넣거나 고정된 리듬으로 키 입력을 시뮬레이션해 폼을 채운다 — 대개 초당 50~100자를, 균일하게, 삭제 없이. 30자짜리 문자열을 백스페이스 없이 200ms 만에 채운 필드는 사람의 입력이 아니다.
신호 5. 오타의 부재
관련은 있지만 별개인 신호다. 사람은 오타를 낸다. 1000자의 텍스트 입력에서 실제 사용자는 15~40회의 수정을 만들어 낸다. AI 에이전트는 0회다. 3개 필드에 총 100자 이상을 입력했는데 수정이 0회인 폼 제출은 사람에게는 이례적이다.
신호 6. 사용자 에이전트(user agent) 불일치
일부 AI 에이전트는 자신을 명시적으로 식별하는 커스텀 user agent를 사용한다: perplexity-user, ChatGPT-User, ClaudeBot. 이들은 자기 식별의 관례를 따르고 robots.txt를 존중하는 경우가 많은 예의 바른 에이전트다.
여기서의 탐지는 사소하다 — user agent를 읽어 알려진 목록과 대조하면 된다. 그 가치는 언제 이들에게 다르게 서비스를 제공할지(또는 스크래핑을 원치 않는다면 차단할지) 아는 데 있다.
다른 에이전트들은 브라우저 구동형 프레임워크를 실행하며 브라우저가 사용하는 user agent — 보통 Chrome — 를 그대로 물려받는다. 이들은 user agent만으로는 식별하기 더 어렵고 행동 신호가 필요하다.
신호 7. 헤드리스 상태에서의 WebGL 렌더링
헤드리스 모드로 Chromium을 사용하는 브라우저 구동형 에이전트는 Puppeteer 관련 글에서 논한 SwiftShader 렌더러를 노출한다. WebGL 렌더러에 SwiftShader가 포함되고 방문자가 10회 이상의 의도적 동작을 실행하는 세션이라면, 거의 확실히 브라우저 구동형 AI 에이전트다.
더 새로운 에이전트 프레임워크(Browserbase, 일부 Skyvern 구성)는 이 신호를 피하기 위해 헤드풀 Chrome을 실행한다. 이들은 실제 GPU 문자열을 제시한다. 이는 WebGL만으로는 최신 에이전트를 탐지하기에 불충분하다는 뜻이다 — 시작 필터로서는 필요하지만, 완전한 해결책은 아니다.
신호 8. 페이지 구조에 대한 완벽한 준수
실제 사용자는 페이지 리다이렉트가 일어나는 와중에도 링크를 클릭한다. 스스로를 중단시킨다. 한 번만 클릭하면 될 것을 더블클릭한다. 링크가 아닌 것들을 클릭한다.
AI 에이전트는 DOM을 따른다. 이동하고자 할 때는 특정 요소를 대상으로 동작을 발생시킨다. 잘못된 요소를 클릭하거나 로드 중간에 새로고침하지 않는다. 그들의 세션은 딴짓하는 어떤 사람도 만들어 내지 못하는 기계적 선형성으로 펼쳐진다.
완벽하게 준수하는 세션 궤적 — 모든 클릭이 유효한 요소에, 모든 폼 필드가 DOM 순서대로 채워지고, 모든 페이지 전환이 의도적 동작에 뒤따라 일어나는 — 은 에이전트 구동으로 읽힌다.
신호 9. 상호작용까지의 시간(time-to-interactive)이 제로
실제 사용자는 페이지를 처리할 시간이 필요하다. 읽는다. 훑는다. 행동하기 전에 이해한다.
AI 에이전트는 DOM을 즉시 파싱한다. 페이지 로드 완료와 첫 사용자 동작 사이의 시간은, 실제 사용자의 경우 단순한 페이지에서도 보통 1.5~4초다. AI 에이전트의 경우 200ms 미만일 수 있다 — LLM이 DOM에서 대상 요소를 식별하는 데 걸리는 시간이다.
콘텐츠 이해가 필요한 페이지에서 첫 동작 시간이 매우 빠른 것은 강한 에이전트 신호다.
신호 10. API 전용 에이전트의 HTTP 페치 패턴
Perplexity, 일부 Claude 도구 사용 흐름, 대부분의 검색 기반 에이전트는 브라우저를 실행하지 않는다. HTTP 라이브러리를 통해 페이지를 직접 가져온다.
이 에이전트들은 앞서 논한 TLS 및 HTTP 신호를 남긴다 — Node.js undici 지문, Python requests 지문, Go net/http 지문. 이들은 대개 JavaScript를 실행하지 않으므로 클라이언트 측 탐지를 전혀 촉발하지 않는다.
API 전용 에이전트의 탐지는 네트워크 계층에서 이뤄진다: TLS JA4 해시, HTTP 헤더 순서, 누락된 브라우저 특유의 동작(favicon 페치 없음, 분석 비컨 없음, 폰트 요청 없음). 이 에이전트들을 식별하고 싶다면, 일어나는 일만큼이나 일어나지 않는 일을 봐야 한다.
신호 11. 작업 형태의 세션 목표
가장 강한 신호는 기술적인 것이 아니라 행동적인 것이다. AI 에이전트 세션은 사람 세션에서는 좀처럼 보기 힘든 방식으로 목표 지향적이다.
제품을 찾는 실제 사용자는 8개의 항목을 살펴보고, 3개의 탭에 걸쳐 사양을 비교하고, 리뷰를 읽고, 이탈했다가 한 시간 뒤에 돌아와서 구매할 수 있다. AI 에이전트는 제품으로 가서, 사양을 추출하고, 장바구니에 담고, 결제한다. 90초 미만. 이탈 없음.
세션 수준의 목표 달성률을 추적하는 탐지 시스템은 짧은 세션에서 성공적인 작업 완료의 밀도를 통해 에이전트 트래픽을 식별할 수 있다. 이는 더 느린 신호이지만 동작별 신호와 결합하면 대단히 신뢰할 수 있다.
에이전트에게 다르게 서비스하기
일단 식별되면, AI 에이전트 트래픽은 여러 방식으로 처리할 수 있다.
-
차단 — 사이트가 자동화된 접근을 원하지 않는다면 엣지에서 거부한다. 저렴하고 단순하다.
-
대체 콘텐츠 제공 — 전체 HTML 페이지보다 생성 비용이 저렴한 API 최적화 버전(JSON, 구조화된 데이터)으로 응답한다.
-
속도 제한(rate-limit) — 에이전트를 허용하되 사이트 성능을 보존하기 위해 요청 속도를 제약한다.
-
과금 — 일부 사이트는 데이터에 대한 프로그래밍적 접근에 대해 AI 기업에 요금을 부과하기 시작하고 있다. 탐지는 과금의 전제 조건이다.
-
정상 서비스 — 에이전트가 실제 고객을 대신해 행동하는 것이라면, 서비스를 제공하는 것이 곧 비즈니스다.
사이트마다 서로 다른 선택을 할 것이다. 기술적으로 중요한 것은 그 선택이 가능하도록 탐지를 갖춰 두는 것이다.
움직이는 표적
AI 에이전트 프레임워크는 매달 개선된다. Anthropic은 스크롤 편차를 추가하는 Computer Use 업데이트를 배포한다. Browserbase는 마우스 지터를 추가한다. OpenAI Operator는 오타 시뮬레이션을 도입한다. 프레임워크의 각 세대는 위에서 설명한 탐지 표면의 일부를 닫아 나간다.
2026년에 통하는 기법은 2027년이면 갱신이 필요할 것이다. 그러나 근본적인 실체는 변하지 않는다: AI 에이전트는 작업을 실행한다. 사람은 웹사이트를 경험한다. 그 비대칭성은, 에이전트가 섞여 들려고 어떤 특정 기법을 쓰든, 신호를 만들어 낸다.
AI 에이전트를 일회성으로 해결된 문제가 아니라 지속적으로 진화하는 범주로 다루는 탐지 스택은 가시성을 유지할 것이다. 단일 탐지기를 배포하고 손을 떼는 쪽은 자신의 커버리지가 소리 없이 저하되는 것을 보게 될 것이다.