왜 모든 진지한 브라우저 에이전트(Browser Agent) 데모가 약간 기괴해 보이는지 드디어 이해했습니다
요약
브라우저 에이전트의 진정한 가치는 API가 없는 환경, 즉 대시보드나 내부 도구 등 UI만 존재하는 곳에서의 자동화에 있음을 설명합니다. API가 제공하는 안정성과 비교하여 브라우저 에이전트가 언제 사용되어야 하는지에 대한 관점의 전환을 제안합니다.
핵심 포인트
- 브라우저 에이전트는 API가 없는 레거시 도구나 대시보드 자동화에 유용함
- 구조화된 데이터와 안정성 측면에서는 여전히 API 통합이 최우선임
- 브라우저 에이전트는 API의 대체재가 아닌 보완재로서의 가치를 가짐
- 최근 Computer-Using Agent의 벤치마크 성능 향상이 실용성을 높임
브라우저 에이전트(Browser Agent)가 갑자기 매우 구체적인 이유로 유용해지는 지점이 있습니다. 바로 사용 가능한 API가 존재하지 않는 곳에서도 작동할 수 있다는 점입니다. 당연한 소리처럼 들리겠지만, 브라우저 에이전트를 성능 낮은 API 클라이언트(API client)처럼 평가하는 습관을 버리는 데 시간이 좀 걸렸습니다. 이들은 Stripe, HubSpot 또는 Salesforce API와 경쟁하는 것이 아닙니다. 이들이 경쟁하는 대상은 다음과 같습니다:
- 내보내기(export) 엔드포인트가 없는 벤더 대시보드(vendor dashboards)
- 2017년에 만들어진 내부 도구(internal tools)
- 자동화를 거부하는 파트너 포털(partner portals)
- 운영 팀이 사용하는 Android 앱
- UI가 유일한 인터페이스인 관리자 패널(admin panels)
이러한 관점의 전환은 매우 중요합니다. 몇 주 전, 저는 브라우저 에이전트 워크플로(workflow)를 조사하다가 r/openclaw에서 누군가가 Instagram, TikTok, YouTube, LinkedIn에 걸친 15개 이상의 클라이언트 계정의 소셜 미디어 분석 데이터를 스프레드시트로 가져오려고 시도하는 스레드를 발견했습니다. 그 게시물은 대부분의 랜딩 페이지보다 시장 상황을 더 잘 설명해 주었습니다. 왜냐하면 실제 비즈니스를 위한 자동화를 구축하다 보면 결국 똑같은 벽에 부딪히기 때문입니다. 즉, 중요한 작업은 종종 깔끔한 REST API를 통해 노출되는 것이 아니라 화면 안에 갇혀 있습니다. 일단 이를 받아들이고 나면, 흥미로운 질문은 '브라우저 에이전트가 API보다 나은가?'가 아닙니다. 그들은 더 낫지 않습니다. 진짜 질문은 이것입니다: '언제 브라우저 자동화가 그 고통을 감수할 가치가 있는가?'
API가 여전히 승리합니다
먼저 유행에 뒤처지는 말을 먼저 해두겠습니다. 만약 당신의 워크플로를 직접적인 API 통합(API integration)으로 수행할 수 있다면, API를 사용하십시오. 언제나 말입니다. Zendesk와 HubSpot 간에 데이터를 이동하거나, Stripe 송장을 NetSuite로 동기화하거나, Salesforce 리드를 데이터 웨어하우스(warehouse)로 가져오는 경우라면, API 우선(API-first) 자동화가 여전히 성숙한 선택입니다. 왜일까요?
- 구조화된 데이터 (structured data)
- 명시적인 인증 (explicit auth)
- 더 나은 로그 (better logs)
- 더 쉬운 테스트 (easier testing)
- 더 적은 기이한 오류 (fewer weird failures)
- 더 낮은 지연 시간 (less latency)
- 더 적은 모호함 (less ambiguity)
브라우저 에이전트는 이 중 어느 것도 개선하지 못합니다. 오히려 움직이는 부품을 더 많이 추가할 뿐입니다. 버튼이 이동하거나, 모달(modal)이 나타나거나, 세션이 만료되거나, 사이트가 당신의 클라우드 IP를 의심스럽게 여기기로 결정하면, 당신의 플로우(flow)는 순식간에 이상해집니다. 그러므로 아니요, 이것은 "API는 죽었다"라는 게시물이 아닙니다. 오히려 그 반대입니다.
그럼에도 불구하고 브라우저 에이전트가 갑자기 중요해진 이유
수년 동안 GUI 자동화(GUI automation)에는 데모의 문제가 있었습니다.
식료품을 주문하거나 양식을 작성하는 에이전트의 매끄러운 영상을 보게 되면, 유일하게 중요한 질문은 "멋지긴 한데, 화요일에도 여전히 작동할까?"였습니다. 이제 우리는 막연한 느낌 (vibes) 대신 최소한의 벤치마크 (benchmark) 수치를 갖게 되었습니다. OpenAI의 Computer-Using Agent는 다음과 같은 결과를 발표했습니다:
- OSWorld에서 38.1%
- WebArena에서 58.1%
- WebVoyager에서 87%
만약 결정론적 소프트웨어 (deterministic software)를 기대한다면 이 수치들은 인상적이지 않습니다. 하지만 이 수치가 무엇을 의미하는지 이해한다면 인상적입니다. 즉, 브라우저 에이전트 (browser agents)가 단순한 눈속임 (party trick)의 단계를 넘어, 감독 하에 실행 가능한 (plausible under supervision) 단계로 넘어섰다는 것입니다. 이것이 이야기의 전부입니다. 자율적인 백오피스 (autonomous back office)도 아니고, "운영 팀을 대체하라"는 것도 아닙니다. 하지만 분명히 "재시도 (retries), 체크포인트 (checkpoints), 승인 게이트 (approval gates)를 갖춘다면 반복적인 대시보드 작업을 아마도 처리할 수 있을 것이다"라는 의미입니다. 이는 사람들이 예상했던 것보다 훨씬 더 큰 시장입니다.
어려운 점은 결코 단순히 클릭하는 것이 아니었습니다. 브라우저 자동화 (browser automation)에서 어려운 점은 모델이 버튼을 클릭하게 만드는 것이 아니었습니다. 진짜 어려운 점은 그 주변의 모든 것이었습니다. 반복적으로 실행할 수 있는가? 발생한 일을 검사할 수 있는가? 실패한 단계를 재시도할 수 있는가? 세션 상태 (session state)를 유지할 수 있는가? 노트북 한 대와 탭 하나를 넘어 확장 (scale)할 수 있는가? 이것이 바로 Browser Use가 처음 보이는 것보다 더 흥미로운 이유입니다. 이것은 단순히 "LLM이 브라우저를 클릭한다"는 것이 아닙니다. 이것은 실제 개발자 인터페이스 (developer surface)를 제공합니다:
- 오픈 소스 라이브러리 (open-source library)
- 호스팅된 클라우드 브라우저 (hosted cloud browsers)
- Python API
- 실제 브라우저 작업에 대한 CLI 벤치마킹 (benchmarking)
그리고 진입 장벽은 꽤 낮습니다.
from browser_use import Agent, Browser, ChatBrowserUse
import asyncio
async def main():
browser = Browser()
agent = Agent(
task="Find the number of stars of the browser-use repo",
llm=ChatBrowserUse(),
browser=browser,
)
await agent.run()
asyncio.run(main())
설정 또한 간단합니다:
uv init
uv add browser-use
uv sync
uvx browser-use install
이는 Selenium + Playwright + OCR + 스크린샷 + 기도 (prayer)로 구성되었던 기존 스택과는 매우 다른 세상입니다. 그럼에도 불구하고, 진짜 질문은 데모를 작동시킬 수 있느냐가 아닙니다. 워크플로 (workflow)가 이 정도 수준의 복잡성을 감수할 가치가 있느냐 하는 것입니다.
나의 규칙: 인터페이스가 곧 통합(integration)인 경우에만 브라우저 에이전트(browser agent)를 사용하라. 내가 계속해서 되새기는 규칙은 이것입니다: 인터페이스가 곧 통합인 경우에만 브라우저 에이전트를 사용하십시오. 팀들은 항상 이 점을 간과합니다. 그들은 단순히 현대적으로 느껴진다는 이유로 에이전트를 찾지만, 실제로 그들에게 필요한 것은 다음과 같습니다: 하나의 웹훅 (webhook), 하나의 크론 잡 (cron job), 그리고 괜찮은 API 클라이언트 (API client) 하나입니다. 브라우저 자동화 (browser automation)가 가치를 갖게 되는 시점은 다음 세 가지 조건이 모두 충족될 때입니다: 1. 작업이 UI에 갇혀 있다. 2. 작업이 재시도(retries)와 감독(supervision)을 정당화할 만큼 충분히 반복적이다. 3. 비즈니스 가치가 충분히 높아서, 취약한 자동화(brittle automation)가 수작업보다 낫다. 소셜 분석 사례는 완벽한 예시입니다. 15개 이상의 고객 계정에 대해 Instagram, TikTok, YouTube, LinkedIn의 지표를 가져오는 것은 이를 운영화(operationalize)하려고 시도하기 전까지는 간단해 보입니다. 하지만 막상 시도하면 다음과 같은 상황에 직면합니다: 서로 다른 권한, 서로 다른 내보내기 형식 (export formats), 변경되는 레이아웃, 일관성 없는 대시보드, 무작위 로그인 프롬프트, 간헐적인 속도 제한 (rate limits). 이것은 깔끔한 API 통합 (API integration) 문제의 영역이 아닙니다. 이것이 바로 브라우저 에이전트 (browser-agent)의 영역입니다.
실질적인 구분: API vs 브라우저 에이전트 vs 앱 표면 에이전트 (app-surface agent)
다음은 실제로 프로덕션 (production) 환경에서 유효한 버전입니다.
| 접근 방식 | 승리하는 지점 |
|---|---|
| 직접 API 통합 (Direct API integration) | CRM, ERP, 결제(billing), 헬프데스크 API와 같이 안정적이고 구조화된 시스템에 최적입니다. 가장 높은 신뢰성, 가장 낮은 모호성, 가장 쉬운 테스트를 제공합니다. |
| 브라우저 에이전트 (Browser agent) | 웹 대시보드, 파트너 포털, 그리고 유용한 API가 없는 취약한 내부 도구에 최적입니다. 유연하지만 재시도, 감독, 상태 관리 (state management)가 필요합니다. |
| 앱 표면 에이전트 (App-surface agent) | 작업이 네이티브 데스크톱 또는 모바일 앱에서 이루어질 때 최적입니다. 가장 높은 유연성과 가장 높은 취약성을 가집니다. |
마지막 카테고리는 사람들이 인정하는 것보다 더 중요합니다. 많은 실제 운영 작업은 브라우저에서 일어나지 않습니다. 다음과 같은 곳에서 일어납니다:
- 창고의 Android 앱
- 계약업체가 사용하는 현장 서비스 (field-service) 앱
- VDI 세션 내의 레거시 Windows 앱
- 아무도 다시 만들고 싶어 하지 않는 내부 도구
이것이 바로 컴퓨터 사용 모델 (computer-use models)이 주목받는 정확한 이유입니다. 이 모델들은 깔끔한 통합을 대체하는 것이 아닙니다. 개발자들이 이전에 접근할 수 없었던 작업 영역에 손을 뻗고 있는 것입니다.
사람들이 건너뛰는 부분: 이것은 운영 비용이 빠르게 증가합니다. 바로 이 지점에서 보통 과장된 홍보(hype)가 불성실해집니다. 브라우저 에이전트(Browser agents)는 갇혀 있던 작업들을 해방합니다. 하지만 동시에 API 전용 흐름(API-only flows)보다 훨씬 더 많은 운영상의 저항(operational drag)을 만들어냅니다. 다음과 같은 것들이 더 많이 발생합니다:
- 재시도 (retries)
- 상태 관리 (state handling)
- 세션 문제 (session issues)
- 스크린샷 (screenshots)
- 로그 (logs)
- 실패 모드 (failure modes)
- 안티 봇(anti-bot)의 기이함
만약 여러분이 OpenClaw와 같은 도구를 사용하거나 직접 오케스트레이션(orchestration)을 구축하고 있다면, 아키텍처는 마법처럼 보이기보다는 일반적인 분산 시스템(distributed systems)이 작동하는 방식과 훨씬 더 유사해 보이기 시작할 것입니다. 여러분에게는 다음이 필요합니다:
- 스케줄링 (scheduling)
- 내구성이 있는 작업 기록 (durable task records)
- 재개 가능한 워크플로 (resumable workflows)
- 체크포인트 (checkpoints)
- 위험한 작업에 대한 인간의 승인 (human approval)
아주 작은 스케줄링된 작업은 다음과 같이 보일 수 있습니다:
openclaw cron add \
--name "Reminder" \
--at "2026-02-01T16:00:00Z" \
--session main \
--system-event "Reminder: check the cron docs draft" \
--wake now \
--delete-after-run
이 명령어는 지루합니다. 바로 그게 핵심입니다. 진지한 에이전트 워크플로(agent workflows)는 그 기이한 부분 주변에 지루한 인프라를 필요로 합니다. 제가 신뢰하는 패턴은 다음과 더 비슷합니다:
- 결정론적 스케줄러 (deterministic scheduler)
- 내구성이 있는 작업 기록 (durable task record)
- 기이한 부분을 처리하기 위한 브라우저 또는 앱 표면 단계 (browser or app-surface step)
- 스크린샷 또는 구조화된 체크포인트 (screenshot or structured checkpoint)
- 돈, 규정 준수(compliance), 또는 고객 결과물이 연관된 경우 인간의 승인 (human approval)
이것은 데모들보다 훨씬 덜 영화적입니다. 또한 이것이 바로 이러한 시스템들이 실제 운영 환경(production)과 접촉하며 살아남는 방식입니다.
감독된 브라우저 작업을 위한 최소한의 Python 패턴
만약 제가 이것을 실제 자동화 스택에 연결한다면, 완전한 자율성(full autonomy) 대신 체크포인트(checkpoints) 관점에서 생각할 것입니다. 다음과 같은 방식입니다:
import asyncio
from browser_use import Agent, Browser, ChatBrowserUse
async def run_task(task: str):
browser = Browser()
agent = Agent(
task=task,
llm=ChatBrowserUse(),
browser=browser,
)
result = await agent.
run() # 의사코드(Pseudocode): 결과, 스크린샷 및 다음 동작 저장 # save_task_run(result) # 필요한 경우 인간의 승인 요청(request_human_approval_if_needed(result)) return result
async def main():
task = "LinkedIn 캠페인 관리자에 로그인하여 지난 7일간의 지출액과 노출수를 수집하세요"
result = await run_task(task)
print(result)
asyncio.run(main())
중요한 것은 agent.run()을 호출하는 것이 아닙니다. 중요한 것은 그 주변의 모든 것입니다: 상태(state)가 어디에 저장되는지, 재시도(retries)가 어떻게 작동하는지, 승인(approvals)이 어떻게 이루어지는지, 드리프트(drift)를 어떻게 감지하는지, 만료된 세션으로부터 어떻게 복구하는지 등입니다. 그것이 바로 프로덕션(production) 환경의 브라우저 자동화(browser automation)가 존재하는 지점입니다.
이제 비용은 아키텍처의 일부입니다.
사람들이 말하기를 꺼리는 것이 하나 더 있습니다. 이러한 워크플로(workflows)는 엄청난 양의 모델 호출(model calls)을 발생시킬 수 있습니다. 만약 하루 종일 대시보드 전반에 걸쳐 브라우저 에이전트(browser agents)를 실행하거나, n8n, Make, Zapier, OpenClaw 또는 커스텀 워커(custom workers) 내부에서 이들을 체이닝(chaining)한다면, 토큰당 과금 방식(per-token pricing)은 금방 짜증스러운 일이 됩니다. 단 한 번의 실행이 비싸기 때문이 아닙니다. 아키텍처 자체가 다음과 같이 작고, 반복적이며, 예측하기 어려운 수많은 호출을 만들어내기 때문입니다:
- 재시도 (retries)
- 페이지 재읽기 (page re-reads)
- 중간 추론 단계 (intermediate reasoning steps)
- 체크포인트 요약 (checkpoint summaries)
- 추출 단계 (extraction passes)
- 폴백 실행 (fallback runs)
이것이 바로 팀들이 모델의 순수성(model purity)보다는 예측 가능한 지출(predictable spend)에 더 신경을 쓰기 시작하는 바로 그런 종류의 워크로드(workload)입니다. 만약 지속적으로 실행되는 에이전트를 구축하고 있다면, 대시보드 하나가 변경되어 워크플로가 다섯 번이나 재시도를 시작하는 바람에 토큰 사용량이 급증하는 것을 지켜보는 것보다, 정액제 컴퓨팅(flat-rate compute)을 운영하는 것이 훨씬 쉽습니다.
이것이 Standard Compute와 같은 서비스의 매력입니다. 이는 OpenAI와 호환되는 API를 제공하면서도, 토큰당 과금 대신 월간 정액제로 무제한 컴퓨팅을 제공합니다. 에이전트 기반 워크플로(agentic workflows), 특히 지저분한(messy) 워크플로의 경우, 이는 계산 방식을 완전히 바꿔 놓습니다. 기존의 오케스트레이션(orchestration)을 그대로 유지하면서, 모든 재시도를 마치 작은 금융 이벤트처럼 취급하는 일을 멈출 수 있습니다.
나의 실제 견해
놀라운 점은 브라우저 에이전트가 좋아졌다는 것이 아닙니다. 놀라운 점은 기업들이 제대로 된 통합(integrations)을 기다리다 인내심이 바닥날 때쯤, 에이전트들이 충분히 좋아졌다는 사실입니다.
그리고 "감독 하에 충분히 괜찮은(good enough under supervision)" 수준은 실질적인 시장입니다. 만약 안정적인 백오피스(back-office) 워크플로우가 있다면 API를 사용하십시오. 하지만 업무가 TikTok 분석, LinkedIn 캠페인 화면, YouTube Studio, 벤더 포털(vendor portals), 내부 관리 도구(internal admin tools) 또는 Android 앱 안에 갇혀 있다면, 브라우저 에이전트(browser agent)나 앱 표면 에이전트(app-surface agent)가 유일하게 현실적인 옵션일 수 있습니다. 가장 예쁜 옵션은 아닙니다. 가장 단순한 옵션도 아닙니다. 분명히 가장 우아한(elegant) 옵션도 아닙니다. 하지만 업무를 반드시 완수해야 할 때는 현실적인 것이 우아한 것보다 낫습니다. 이것이 바로 모든 진지한 브라우저 에이전트(browser agent) 데모가 약간 기괴해(cursed) 보이는 이유입니다. 그것들은 기괴한(cursed) 문제들을 해결하고 있기 때문입니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기