2026년은 AI 에이전트가 데모이기를 멈춘 해입니다. browser-use, OpenAI의 Operator 스타일 에이전트, Anthropic의 컴퓨터 사용(computer use), 그리고 Playwright 위에 구축된 수십 개의 프레임워크가 이제 실제 웹사이트를 상대로 실제 브라우저를 구동합니다 — 예약, 구매, 리서치, 모니터링. 그리고 그들은 모두 같은 벽에 부딪힙니다: 그들이 작동하는 사이트는 그들을 봇으로 취급합니다. 왜냐하면 그들은 봇이기 때문입니다.
이 가이드는 특히 브라우저를 구동하는 AI 에이전트를 위한 프록시 계층을 다룹니다. 에이전트가 브라우저 대신 HTTP 라이브러리를 사용한다면(LangChain 도구, CrewAI 내부의 스크래퍼), AI 에이전트용 프록시: LangChain, AutoGPT & CrewAI를 참고하세요 — 이 글은 전체 브라우저를 제어하는 에이전트에 관한 것입니다.
직관에 반하지만 사실입니다: 실제 Chrome 브라우저를 구동하는 LLM 에이전트는 종종 평범한 Python 스크래퍼보다 더 빨리 차단됩니다. 세 가지 이유:
navigator.webdriver, CDP 특유의 타이밍 아티팩트, 헤드리스 단서를 탐색합니다. 플래그된 IP와 결합되면 점수가 즉시 차단 임계값을 넘습니다.IP는 세 가지 중 고치기 가장 저렴하며, 그것만 고쳐도 대부분의 차단이 해결됩니다: 에이전트를 주거용 프록시를 통해 라우팅하여 IP의 이야기가 브라우저의 이야기와 일치하게 하세요.
browser-use는 Playwright 위에 있으므로 프록시 지원이 기본 내장되어 있습니다. 패턴은 다음과 같습니다: 에이전트 작업당 하나의 스티키 세션으로 에이전트가 작업하는 동안 IP가 안정적으로 유지되고, 다음 작업에는 새로운 IP를 씁니다.
from browser_use import Agent, Browser, BrowserConfig
from langchain_openai import ChatOpenAI
import uuid
task_id = uuid.uuid4().hex[:8]
browser = Browser(config=BrowserConfig(
proxy={
"server": "http://us.jibaoproxy.com:913",
"username": f"USERNAME-session-{task_id}", # sticky: same IP for this task
"password": "PASSWORD",
},
))
agent = Agent(
task="Find the current price of the Sony WH-1000XM6 on the three largest US retailers.",
llm=ChatOpenAI(model="gpt-4o"),
browser=browser,
)
result = await agent.run()
핵심 디테일: session-{task_id} 접미사입니다. 이것이 없으면 로테이팅 게이트웨이가 작업 도중에 에이전트에게 새 IP를 건넬 수 있습니다 — 장바구니 내용이 사라지고, 로그인이 끊기며, 에이전트는 단계를 다시 하느라 LLM 호출을 낭비합니다. 이것이 있으면 작업이 처음부터 끝까지 하나의 IP에서 실행되고, 다음 작업은 깨끗한 IP를 받습니다.
Playwright 위에 자체 에이전트 루프를 구축했다면(대부분의 Operator 스타일 및 컴퓨터 사용 구현 뒤에 있는 패턴), 프록시는 브라우저 컨텍스트에 들어갑니다:
from playwright.async_api import async_playwright
async with async_playwright() as p:
browser = await p.chromium.launch(headless=False)
context = await browser.new_context(
proxy={
"server": "http://us.jibaoproxy.com:913",
"username": "USERNAME-session-agent42",
"password": "PASSWORD",
},
viewport={"width": 1366, "height": 768},
locale="en-US",
timezone_id="America/Chicago", # match the proxy country
)
page = await context.new_page()
# ... agent loop: screenshot -> LLM -> action -> repeat
locale과 timezone_id를 프록시의 국가와 일치하도록 설정하세요. 미국 IP에서 UTC+8 시계로 브라우징하는 에이전트는 행동 시스템이 당신에게 불리하게 점수화하는 불일치입니다.
컨텍스트별 프록시는 또한 하나의 브라우저, 여러 에이전트를 가능하게 합니다: 각 new_context()는 자체 세션 접미사를 가질 수 있으므로, 10개의 동시 에이전트 작업이 10개의 Chrome 프로세스 없이 10개의 서로 다른 주거용 IP에서 실행됩니다.
| 에이전트 워크로드 | 세션 전략 | 이유 |
|---|---|---|
| 리서치 / 가격 확인 (로그인 없음) | 스티키, 10분, 작업당 새 세션 | 작업 내에서는 안정적, 작업 간에는 새 IP |
| 로그인된 계정 운영 | 스티키 30분, 매 실행마다 동일한 세션 ID | 사이트는 로그인 사이에 국가를 넘나드는 계정을 플래그 |
| 체크아웃 / 예약 흐름 | 스티키 30분 | 체크아웃 도중 IP 변경은 세션을 죽이고 사기 검토를 유발 |
| 대용량 모니터링 (수백 페이지) | 로테이팅, 세션 고정 없음 | IP 다양성 극대화, 보존할 상태 없음 |
주거용 트래픽은 GB당 과금되며, 브라우저 에이전트는 HTTP 스크래퍼와 달리 전체 페이지 — 이미지, 폰트, 트래커 — 를 가져옵니다. 관리하지 않으면 하나의 에이전트 작업이 20–50 MB를 먹을 수 있습니다. 영향력 순으로 세 가지 해결책:
await context.route("**/*.{png,jpg,jpeg,webp,gif,woff,woff2,mp4}",
lambda route: route.abort())
에이전트가 스크린샷을 읽는다면 대상 페이지의 이미지는 유지하되 비디오와 폰트는 여전히 차단하세요. DOM/접근성 트리를 읽는다면 이미지도 차단하세요 — 트래픽을 60–80% 줄입니다.이미지 차단과 범위 지정 라우팅으로 일반적인 브라우저 에이전트 작업은 2–8 MB 범위에 들어갑니다 — $2/GB에서 그것은 100개 작업당 몇 센트입니다.
솔직함 섹션입니다. 주거용 IP는 ASN 불일치와 IP 평판을 고치는데, 이것이 2026년 안티-봇 점수화에서 가장 무거운 단일 신호입니다. 다음은 고치지 못합니다:
requests로 "그냥 재생"할 수 없는 이유입니다. JA3/JA4 설명을 참고하세요.주거용 IP 위에 세 가지를 모두 쌓으면 브라우저 에이전트는 실제 사용자가 하는 것과 동일한 검사를 통과합니다. 가장 어려운 타깃(DataDome, PerimeterX)에 대해서는 우리의 DataDome/PerimeterX 가이드를 참고하세요.
timezone_id/locale을 프록시 국가와 일치시키세요.신규 사용자는 가입 시 500MB를 받고, 첫 충전 시 추가 보너스를 받습니다. 기간 한정 혜택입니다.