AI 에이전트가 코드만 수정하던 단계에서 벗어나 웹 화면을 직접 다루는 일이 늘고 있습니다. 문서 사이트를 열어 최신 API를 확인하고, 관리자 콘솔에서 설정을 검토하고, SaaS 대시보드에서 상태를 확인하고, 실패한 E2E 플로우를 브라우저로 재현합니다. 이때 브라우저는 단순한 보조 도구가 아닙니다. 로그인 세션, 쿠키, 화면에 보이는 개인정보, 버튼 클릭으로 바뀌는 외부 상태가 모두 들어 있는 실행 런타임입니다.
그래서 중요해지는 흐름이 Managed Browser Worker입니다. 이는 Playwright나 Selenium을 쓰자는 일반론이 아닙니다. AI 에이전트가 사용할 브라우저 인스턴스를 격리된 작업자처럼 관리하고, 어떤 세션으로 접속했는지, 어떤 URL을 열었는지, 어떤 action을 실행했는지, 결과 증거가 무엇인지 남기는 운영 방식입니다. 이 흐름은 Browser Computer Use Agent, MCP Apps, Tool Contract Test, Agent Sandbox Egress Policy와 같은 방향으로 이어집니다. 모델의 능력이 올라갈수록 브라우저 권한의 경계가 더 중요해집니다.
이 글에서 얻는 것
- AI 에이전트 브라우저 자동화가 기존 E2E 테스트와 어떻게 다른지 이해할 수 있습니다.
- 브라우저 세션, 프로필, 쿠키, 권한, 네트워크 출구를 운영 자원으로 나누는 기준을 세울 수 있습니다.
- 읽기 전용 관찰, 승인형 클릭, 제한된 쓰기 작업을 단계적으로 열어주는 rollout 순서를 잡을 수 있습니다.
- 브라우저 작업 결과를 스크린샷·DOM 스냅샷·URL·로그로 검증하는 의사결정 기준을 만들 수 있습니다.
핵심 개념/이슈
1) 브라우저는 에이전트에게 가장 강한 도구 중 하나다
터미널 명령은 대개 파일 시스템과 로컬 프로세스 안에서 끝납니다. 반면 브라우저는 외부 서비스와 바로 연결됩니다. 버튼 하나가 결제 설정을 바꾸고, 체크박스 하나가 사용자 권한을 열고, 폼 제출 하나가 고객에게 이메일을 보낼 수 있습니다. 그래서 브라우저 자동화 권한은 “웹을 볼 수 있음"이 아니라 외부 상태를 바꿀 수 있음으로 봐야 합니다.
특히 로그인된 세션은 민감합니다. 브라우저 프로필에는 쿠키, localStorage, 세션 토큰, SSO 상태, 저장된 입력값, 확장 프로그램 권한이 들어 있습니다. 에이전트에게 개인 브라우저를 그대로 열어주면, 에이전트가 어떤 권한으로 어떤 서비스를 볼 수 있는지 명확하지 않습니다. 실수로 잘못된 탭을 조작하거나, 테스트인 줄 알고 운영 콘솔에서 저장 버튼을 누를 수도 있습니다.
Managed Browser Worker는 이 문제를 줄이기 위해 브라우저를 아래처럼 분리합니다.
| 구분 | 용도 | 기본 권한 |
|---|---|---|
| read-only worker | 문서·대시보드 확인 | 클릭 가능, 제출 금지 |
| test worker | QA·E2E 재현 | 테스트 계정, 테스트 환경 한정 |
| ops worker | 내부 운영 확인 | 승인형 쓰기, 감사 로그 필수 |
| disposable worker | 외부 페이지 탐색 | 로그인 없음, 매 작업 후 폐기 |
처음부터 모든 권한을 가진 브라우저를 하나 두는 방식은 편하지만 위험합니다. 브라우저도 DB 계정처럼 권한 범위를 나눠야 합니다.
2) E2E 테스트와 에이전트 브라우저 작업은 실패 방식이 다르다
전통적인 E2E 테스트는 시나리오가 고정되어 있습니다. 로그인 → 상품 선택 → 장바구니 → 결제처럼 정해진 selector와 assertion을 따라갑니다. 실패하면 테스트가 빨갛게 되고 사람이 수정합니다. 에이전트 브라우저 작업은 다릅니다. 에이전트는 화면을 보고 다음 행동을 결정합니다. selector가 바뀌어도 텍스트나 레이아웃을 보고 적응할 수 있지만, 그만큼 예상하지 못한 행동도 할 수 있습니다.
그래서 안정성 기준도 달라집니다.
- E2E 테스트: 재현성, selector 안정성, CI 속도, flaky rate가 핵심
- 에이전트 브라우저 작업: 권한 경계, action 승인, 관측 증거, 실패 복구가 핵심
- 공통 영역: 고정 viewport, network idle 판단, 스크린샷, trace, 테스트 계정 관리
예를 들어 에이전트가 “관리자 콘솔에서 알림 설정을 확인해줘"라는 작업을 받았다고 합시다. 읽기만 하면 괜찮지만, 화면에 Save 버튼이 보인다고 눌러서는 안 됩니다. 확인 작업과 변경 작업은 다른 권한이어야 합니다. 작업 목적이 read-only라면 click은 허용해도 submit, save, delete, send는 차단하거나 승인으로 올려야 합니다.
3) 브라우저 작업은 증거가 없으면 재검토하기 어렵다
에이전트가 “설정이 정상입니다"라고 말해도, 어떤 화면을 보고 판단했는지 없으면 신뢰하기 어렵습니다. 브라우저 작업에는 최소한의 증거 패키지가 필요합니다.
권장 증거는 아래 네 가지입니다.
- 최종 URL과 주요 이동 URL
- 판단 시점의 스크린샷 또는 DOM 스냅샷
- 실행한 action 목록: click, fill, select, submit 여부
- 결과 판정과 미확인 항목
작은 작업은 스크린샷 1장과 URL만으로 충분할 수 있습니다. 하지만 권한 변경, 결제 설정, 배포 콘솔, 고객 메시지처럼 외부 효과가 큰 작업은 action log와 전후 스냅샷을 남겨야 합니다. 기준을 숫자로 잡으면 더 좋습니다. 예를 들어 “쓰기 action이 1회 이상 포함되면 전후 스크린샷 2장 이상”, “운영 콘솔 변경은 승인 ID와 실행 로그를 함께 보존”, “실패 후 재시도는 2회까지만 허용"처럼 정합니다.
4) 브라우저 네트워크 출구도 정책 대상이다
브라우저는 웹을 열기 때문에 자연스럽게 외부 네트워크를 사용합니다. 에이전트가 악성 페이지를 열거나, 내부 페이지의 정보를 외부 폼에 붙여 넣거나, 다운로드 파일을 실행 경로로 넘기면 공급망 문제가 됩니다. 따라서 브라우저 워커에도 egress 정책이 필요합니다.
출발 기준은 다음과 같습니다.
- 업무용 worker는 허용 도메인 allowlist로 시작한다.
- 파일 다운로드는 MIME, 확장자, 크기 제한을 둔다.
- 업로드 input은 사용자 승인 없이는 사용하지 않는다.
- localhost, link-local, private IP 접근은 별도 승인 또는 차단한다.
- 외부 페이지에서 복사한 명령을 터미널에 그대로 실행하지 않는다.
이 기준은 Agent Sandbox Egress Policy와 연결됩니다. 브라우저는 샌드박스 바깥의 세계를 보는 창이므로, 창을 열 때도 출구 정책이 필요합니다.
실무 적용
1) 권한을 read, navigate, interact, commit으로 나눈다
브라우저 권한은 단순히 허용/차단으로 나누기 어렵습니다. 화면을 읽기 위해 클릭과 스크롤이 필요할 수 있고, 로그인 과정에서는 입력도 필요합니다. 대신 action을 단계로 나누면 운영하기 쉽습니다.
| 단계 | 허용 action | 승인 필요 action |
|---|---|---|
| read | snapshot, screenshot, URL 확인 | 없음 |
| navigate | link click, scroll, tab 전환 | 외부 도메인 이동 |
| interact | fill, select, non-submit click | 민감 필드 입력 |
| commit | submit, save, delete, send | 기본 승인 필요 |
일반 정보 확인은 read/navigate만 허용합니다. QA 재현은 interact까지 열 수 있지만 테스트 계정과 테스트 환경에 묶습니다. 운영 변경은 commit 단계로 분리하고, 승인 전에는 dry-run 설명만 하게 합니다. 이 구조를 만들면 에이전트가 “버튼이 보여서 눌렀다"는 사고를 줄일 수 있습니다.
2) 프로필과 계정을 작업 유형별로 분리한다
가장 피해야 할 것은 개인 브라우저 프로필 하나로 모든 자동화를 돌리는 것입니다. 개발자의 개인 SSO 세션, 회사 관리자 권한, 개인 메일, 결제 정보가 뒤섞일 수 있습니다. 최소 분리는 아래처럼 잡습니다.
- 문서 탐색: 비로그인 disposable profile
- 사내 읽기 전용 대시보드: read-only service account
- QA/E2E: 테스트 계정, staging 환경 고정
- 운영 콘솔 확인: least-privilege ops account, 쓰기 승인 필요
- 고객 데이터 화면: PII masking 또는 스크린샷 저장 금지 정책
권한은 넓게 주지 않습니다. 운영 콘솔 계정이라도 읽기와 쓰기를 분리하고, 쓰기 계정은 만료 시간이 있는 세션으로 두는 편이 안전합니다. 브라우저 worker가 30분 이상 유휴 상태면 세션을 폐기하거나 재인증을 요구하는 기준도 좋습니다.
3) 브라우저 자동화에도 테스트 계약을 붙인다
에이전트가 브라우저를 잘 다루는지는 프롬프트로만 보장되지 않습니다. 반복 작업이라면 브라우저 tool contract test를 만들어야 합니다. 예를 들어 “로그인 페이지를 열고 사용자 메뉴 텍스트를 확인한다”, “설정 페이지에서 저장 버튼을 누르지 않고 현재 값을 읽는다”, “허용되지 않은 도메인 이동은 차단된다” 같은 작은 테스트입니다.
권장 기준은 아래와 같습니다.
- 핵심 브라우저 작업 5~10개를 smoke test로 유지한다.
- selector가 아니라 사용자에게 보이는 role/name 기반 확인을 우선한다.
- 쓰기 action은 테스트 환경에서만 자동 실행한다.
- 운영 환경 commit action은 dry-run과 승인 흐름까지 테스트한다.
- 실패한 브라우저 작업은 스크린샷과 console log를 함께 저장한다.
이 방식은 Tool Contract Test의 브라우저 버전입니다. 도구가 있다는 것과 도구가 안전하게 동작한다는 것은 다릅니다.
4) rollout은 관찰에서 변경으로 천천히 간다
Managed Browser Worker는 한 번에 완성하려고 하면 무거워집니다. 도입은 단계적으로 가는 편이 좋습니다.
- 관찰 단계: 문서, 공개 페이지, 읽기 전용 대시보드만 열기
- 재현 단계: staging/test 계정으로 QA 플로우 재현
- 보조 단계: 운영 콘솔에서 값 확인 후 사람이 직접 변경
- 승인형 변경 단계: 에이전트가 변경안을 설명하고 승인 후 클릭
- 제한 자동화 단계: 낮은 위험의 반복 작업만 자동 commit
숫자 기준도 필요합니다. 예를 들어 브라우저 작업 성공률이 95% 미만이거나, 같은 유형의 stale selector 문제가 주 2회 이상이면 자동 commit을 열지 않습니다. 운영 변경은 처음 4주 동안 승인형으로만 두고, 실패/롤백 사례가 0건일 때 낮은 위험 작업부터 자동화합니다. 성급한 자동화보다 신뢰 가능한 경계가 더 중요합니다.
5) 운영 정책은 예외 처리까지 포함해야 한다
브라우저 자동화는 정상 플로우보다 예외 플로우에서 더 자주 흔들립니다. 로그인 만료, SSO 재인증, CAPTCHA, 권한 없는 메뉴, 느린 네트워크, A/B 테스트, 팝업 배너, 파일 다운로드 경고가 끼어들면 에이전트는 “다음에 무엇을 해도 되는지"를 판단해야 합니다. 이때 정책이 없으면 에이전트가 임의로 우회하거나, 반대로 사소한 팝업 하나에도 매번 멈춥니다.
운영 정책에는 최소한 아래 예외 기준을 넣는 편이 좋습니다.
| 예외 상황 | 기본 동작 | 이유 |
|---|---|---|
| 로그인 만료 | 재로그인 시도 전 사람 확인 | 인증 과정에는 2FA, SSO, 개인 계정 경계가 섞일 수 있음 |
| CAPTCHA/봇 탐지 | 자동 우회 금지, 작업 중단 | 서비스 정책 위반이나 계정 잠금 위험이 큼 |
| 권한 없음 화면 | 권한 요청 자동 발송 금지 | 권한 상승은 별도 승인과 소유자 확인이 필요함 |
| 파일 다운로드 | 확장자·MIME·크기 확인 후 격리 저장 | 브라우저 다운로드가 곧 실행 파일 공급망이 될 수 있음 |
| 외부 도메인 리다이렉트 | allowlist 밖이면 중단 | 피싱, OAuth consent, 데이터 유출 경로를 줄임 |
| 저장/삭제 확인 모달 | 승인 없이는 취소 또는 중단 | 모달은 마지막 commit 경계인 경우가 많음 |
중요한 점은 “에이전트가 막혔을 때 더 똑똑하게 우회하게 만들기"가 아니라, 막히는 지점을 안전한 검문소로 바꾸는 것입니다. 예외 처리가 명확하면 운영자가 매번 판단하지 않아도 되고, 에이전트도 불확실한 화면에서 과감한 클릭을 하지 않습니다.
6) 성공 지표는 자동화 횟수가 아니라 안전한 완료율이다
브라우저 워커 도입 성과를 “몇 건을 자동 클릭했는가"로만 보면 위험합니다. 클릭 수는 늘었지만 승인 누락, 잘못된 계정 사용, 증거 부족, 세션 오염이 늘었다면 플랫폼 품질은 나빠진 것입니다. 초기에는 아래처럼 안전성과 재현성을 함께 보는 지표가 더 유용합니다.
- 읽기 전용 작업 완료율: 목표 98% 이상
- 승인 필요 action의 승인 누락률: 0건
- 작업별 증거 패키지 누락률: 1% 미만
- allowlist 밖 도메인 이동 차단 건수와 원인
- 동일 작업 재시도 횟수와 실패 후 중단 비율
- 세션 만료/권한 없음/CAPTCHA 등 human-needed 중단 사유 분포
- 작업 후 사람이 판정을 뒤집은 비율
이 지표를 2~4주 정도 보면 어느 작업이 자동화에 적합한지 드러납니다. 문서 확인, 상태 대시보드 조회, staging QA 재현처럼 읽기 중심인 작업은 빠르게 안정화됩니다. 반면 운영 설정 변경, 권한 관리, 고객 데이터가 보이는 화면은 자동화보다 승인형 보조가 더 오래 필요합니다.
트레이드오프/주의점
Managed Browser Worker의 장점은 현실 세계의 웹 UI를 에이전트가 다룰 수 있다는 점입니다. API가 없거나, 문서가 부족하거나, SaaS 콘솔 확인이 필요한 작업에서 효과가 큽니다. 하지만 브라우저는 가장 불안정한 인터페이스이기도 합니다. DOM이 바뀌고, A/B 테스트가 들어오고, 로그인 만료와 CAPTCHA가 끼어듭니다. 중요한 운영 자동화는 가능하면 API를 우선하고, 브라우저는 API가 없거나 사람 확인이 필요한 구간의 보조 수단으로 두는 편이 안전합니다.
비용도 있습니다. 브라우저 worker는 CPU와 메모리를 많이 쓰고, 스크린샷·trace artifact 저장소도 필요합니다. 동시 실행을 무제한으로 열면 로컬 머신이나 CI runner가 쉽게 포화됩니다. 출발 상한은 작은 팀 기준 동시 브라우저 25개, 작업 timeout 510분, artifact 보존 7~30일 정도가 현실적입니다. 더 큰 규모에서는 브라우저 풀과 큐, 우선순위, 세션 회수 정책이 필요합니다.
보안 착시도 경계해야 합니다. “에이전트에게 브라우저만 줬다"고 안전한 것이 아닙니다. 브라우저는 내부 정보와 외부 입력이 만나는 곳입니다. 복사/붙여넣기, 다운로드, 업로드, OAuth consent, 관리자 설정 저장은 모두 위험 action입니다. 정책, 권한, 로그, 승인, egress 제한이 함께 있어야 합니다.
마지막으로 사용자 경험을 고려해야 합니다. 에이전트가 브라우저를 조작하는 동안 같은 계정을 사람이 쓰면 세션이 꼬일 수 있습니다. 작업용 계정과 작업용 프로필을 분리하고, “현재 에이전트가 어떤 페이지를 조작 중인지"를 표시하는 운영 UX가 필요합니다. 자동화가 사람의 세션을 훔쳐 쓰는 느낌을 주면 도입은 오래가지 못합니다.
체크리스트 또는 연습
도입 체크리스트
- 에이전트용 브라우저 프로필이 개인 브라우저 프로필과 분리되어 있는가?
- read, navigate, interact, commit action의 권한 단계가 정의되어 있는가?
- submit/save/delete/send 같은 외부 효과 action은 승인 필요로 분류되어 있는가?
- 작업별 허용 도메인과 private IP/localhost 접근 정책이 있는가?
- 테스트 계정과 운영 계정이 분리되어 있고, 운영 계정은 최소 권한인가?
- 브라우저 작업마다 URL, 스크린샷 또는 DOM 스냅샷, action log 중 최소 2개 증거가 남는가?
- 실패한 작업의 스크린샷과 console/network 오류를 재검토할 수 있는가?
- 다운로드·업로드·OAuth consent·파일 선택 action에 별도 정책이 있는가?
- 동시 브라우저 수, 작업 timeout, artifact 보존 기간을 숫자로 정했는가?
- 자동 commit을 열기 전에 2~4주간 승인형 운영으로 실패율을 확인했는가?
연습
팀에서 사람이 반복해서 웹 콘솔을 확인하는 작업 하나를 고르세요. 예를 들어 배포 후 feature flag 확인, 결제 대시보드 상태 점검, SaaS 사용자 권한 확인, 문서 사이트 링크 검증 같은 작업입니다. 그 작업을 아래 표로 나눠봅니다.
- 읽기만 필요한 화면과 실제 변경이 일어나는 버튼
- 필요한 계정 권한과 금지해야 할 권한
- 허용 도메인과 차단해야 할 외부 이동
- 성공 판단에 필요한 스크린샷 또는 DOM 증거
- 에이전트가 멈추고 사람 승인을 받아야 하는 조건
이 표가 만들어지면 Managed Browser Worker의 첫 정책이 됩니다. 목표는 에이전트에게 브라우저를 마음껏 주는 것이 아닙니다. 브라우저라는 강한 도구를 작은 권한, 남는 증거, 명확한 승인 경계 안에서 쓰게 만드는 것입니다.
💬 댓글