Cloudflare Browser Run 실패, HAR 파일로 재실행 전에 진단하기

Cloudflare Browser Run의 새 Inspect 패널에서 HAR 파일, 콘솔 로그, 네트워크 요청, 최종 DOM을 확인해 실패 원인을 찾는 방법을 정리합니다. 기록을 언제 켜야 하는지, 재실행 전에 무엇을 점검해야 하는지, 비용과 기록의 한계까지 알아봅니다.

Saturday, September 19, 2026Omid Saffari
Cloudflare Browser Run 실패, HAR 파일로 재실행 전에 진단하기

Cloudflare는 2026년 9월 18일 실패한 실행을 살펴보는 방식을 바꿨습니다. 이제 완료된 Browser Run 기록에서 콘솔 로그, HAR 파일로 내보낼 수 있는 네트워크 요청, 최종 페이지 구조를 확인할 수 있습니다. 새 브라우저를 띄우기 전에 이미 비용을 들여 확보한 증거부터 진단할 수 있게 된 것입니다.

실행 후 남는 증거 묶음: HAR 파일·로그·DOM

이전에는 브라우저 작업이 끝나면 결과물과 오류 처리 내용, 그리고 Session Recording을 켜 둔 경우 리플레이만 남았습니다. 실패 원인이 드러나지 않으면 로그를 더 심은 뒤 작업을 다시 실행하는 것이 일반적이었습니다.

Inspect 패널은 완료된 기록 옆에 다음 세 가지 보기를 제공합니다.

  • Logs에서는 수집된 콘솔 출력을 검색하고 로그 수준별로 걸러낼 수 있습니다.
  • Network에서는 각 요청의 메서드, 상태, 헤더, 페이로드, 응답, 소요 시간을 볼 수 있습니다. 이 활동은 브라우저 요청 흐름의 표준 아카이브 형식인 HAR 파일로 내보낼 수 있습니다.
  • DOM에서는 기록이 끝난 시점의 페이지 구조를 확인하고 복원된 HTML을 복사할 수 있습니다. DOM은 브라우저가 페이지에서 구성한 요소 트리를 뜻합니다.
로그, 네트워크 요청, DOM을 표시하는 Cloudflare Browser Run Session Recording Inspect 패널
Cloudflare Browser Run

이 기능은 또 하나의 실시간 디버깅 화면이 아니라 실행이 끝난 뒤 살펴보는 증거입니다. Cloudflare의 Session Recording은 동영상이 아니라 구조화된 rrweb 이벤트 데이터입니다. DOM 변경, 마우스와 키보드 이벤트, 페이지 이동을 기록합니다. Inspect 패널은 세션이 종료된 뒤 이 리플레이 주변에서 검색 가능한 단서를 제공합니다.

이 점에서 이번 릴리스는 Cloudflare가 앞서 내놓은 Browser Run 변경과 다릅니다. 세션 보호 규칙과 읽기 전용 Live View는 실행 중인 작업이 이동할 수 있는 범위와 이를 지켜보는 클라이언트가 할 수 있는 일을 통제합니다. 반면 Inspect는 완료된 작업이 왜 실패했는지 팀이 직접 설명할 수 있게 해줍니다.

브라우저 자동화에서 기록으로 어떤 실패를 밝혀낼 수 있나

브라우저 안에 흔적을 남긴 실패라면 이 패널이 브라우저 디버깅에 유용합니다.

혼자 운영하는 SaaS 창업자는 거부된 요청을 찾을 수 있습니다

정기적으로 실행하는 데이터 추출 작업이 페이지에는 도달하지만 아무 데이터도 반환하지 않는다고 가정해 보겠습니다. Network 보기에서는 API가 401을 반환했는지, 요청 제한으로 429가 발생했는지, 리디렉션이 브라우저를 엉뚱한 곳으로 보냈는지, 특정 의존성이 실행 시간 대부분을 차지했는지 확인할 수 있습니다.

임시 로그를 추가하기 전에 요청과 응답의 세부 내용을 먼저 살펴볼 수 있습니다. 그러면 첫 진단의 범위가 작아집니다. 기존 실행이 이미 드러낸 자격 증명, 백오프, 리디렉션, 느린 의존성 문제만 바로잡으면 됩니다.

에이전시 책임자는 페이지 변경과 스크립트 버그를 구분할 수 있습니다

클라이언트 워크플로는 선택자가 바뀌었거나, 로그인 페이지가 예상 화면을 대신했거나, 에셋 요청에서 오류가 나서 실패할 수 있습니다. 최종 DOM과 복사한 HTML은 브라우저가 실제로 어느 화면에서 끝났는지 보여줍니다. 요청 흐름을 보면 그 화면까지 어떻게 도달했는지도 알 수 있습니다.

구현팀에 넘길 자료도 구체적이 됩니다. 이제 “자동화가 깨졌다”는 말 대신 최종 요소 트리와 사용 가능한 헤더, 페이로드, 상태, 소요 시간이 담긴 HAR 파일을 전달할 수 있습니다.

플랫폼 엔지니어는 문제가 생긴 탭을 따라갈 수 있습니다

기록은 target-1 같은 Chrome DevTools Protocol 대상별로 이벤트 배열을 구분하며, 각 대상은 일반적으로 브라우저 탭 하나를 나타냅니다. 여러 탭을 기록하면 이 대상들이 따로 표시되고, 대시보드의 Inspect 패널은 선택한 탭을 따라갑니다.

인증 전환과 에이전트 워크플로에서는 이 구분이 중요합니다. 로그인 탭은 성공했지만 실제 작업 탭은 실패할 수 있기 때문입니다. 대상별 증거를 보면 서로 다른 두 흐름을 뒤섞지 않을 수 있습니다.

실패한 Browser Run을 점검하고 필요한 부분만 수정한 뒤 한 번 검증 실행으로 이어지는 아키텍처 워크플로
진단을 위해 또 실행하기 전에 기존 증거부터 살펴보세요.

작업 한 번을 기록하고 네트워크 추적 가져오기

기록은 명시적으로 켜야 합니다. 브라우저 세션을 처음 확보할 때 활성화해야 하며, 기존 세션에 다시 연결하면서 나중에 켤 수는 없습니다.

가장 작게 시작하려면, 현재 실패할 때마다 수동 재현이 필요한 정기 Browser Session 하나를 고르면 됩니다.

  1. 실행할 때 기록 활성화하기

    Cloudflare의 Puppeteer 예제는 최초 실행 호출에 recording: true를 전달합니다. 브라우저를 닫기 전에 세션 ID를 보관해야 합니다.

    TypeScript
    import puppeteer from "@cloudflare/puppeteer";
    
    interface Env {
    	MYBROWSER: Fetcher;
    }
    
    export default {
    	async fetch(request: Request, env: Env): Promise<Response> {
    		const browser = await puppeteer.launch(env.MYBROWSER, { recording: true });
    		const page = await browser.newPage();
    
    		await page.goto("https://example.com");
    		// ... your automation steps ...
    
    		const sessionId = browser.sessionId();
    		await browser.close();
    
    		return new Response(`Session recorded: ${sessionId}`);
    	},
    };

    Playwright도 같은 실행 옵션을 사용합니다. CDP 연결이라면 WebSocket URL에 recording=true를 넣습니다.

  2. 완료된 기록 요청하기

    세션이 종료되면 세션 ID로 기록을 요청합니다.

    Bash
    curl https://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/browser-rendering/recording/<SESSION_ID> \
      -H "Authorization: Bearer <API_TOKEN>"

    응답의 이벤트 배열은 result.events 아래에 들어 있습니다. target-1 같은 키가 네트워크 요청에 필요한 대상 ID입니다. 새 기록은 Cloudflare가 처리를 마치는 동안 잠시 404를 반환할 수 있습니다. 첫 404를 기록 누락으로 판단하지 말고 조회를 다시 시도해야 합니다.

  3. 대상의 원시 요청 가져오기

    기록 응답에 포함된 대상 하나를 선택합니다. target 매개변수는 필수입니다.

    Bash
    curl 'https://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/browser-rendering/recording/<SESSION_ID>/network?target=<TARGET_ID>' \
      -H "Authorization: Bearer <API_TOKEN>"

    사용 가능한 요청과 응답 세부 정보가 담긴 수집 요청을 JSON으로 돌려줍니다.

  4. HAR 파일로 내보내기

    개발자가 브라우저 네트워크 뷰어나 다른 분석 도구에서 추적을 확인해야 한다면 format=har를 추가합니다.

    Bash
    curl 'https://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/browser-rendering/recording/<SESSION_ID>/network?target=<TARGET_ID>&format=har' \
      -H "Authorization: Bearer <API_TOKEN>"

    이 파일은 접근 경로가 짧은 디버그 산출물로 취급해야 합니다. 문서에 명시된 응답에는 사용 가능한 헤더와 페이로드가 포함될 수 있으므로, 작업 데이터와 같은 수준으로 다루는 편이 안전합니다.

첫 실패가 발생한 뒤에야 기록을 켜는 실수를 하기 쉽습니다. 이미 지나간 실행에서는 거슬러 올라가 확인할 증거가 없습니다. 다음 실패가 중요한 정기 작업부터 기록을 시작해야 합니다.

브라우저 요금보다 더 큰 비용이 있습니다

Cloudflare의 현재 Browser Run 요금에는 기록이나 기록 저장에 대한 별도 요금이 없습니다. 기록된 Browser Session도 일반적인 브라우저 사용 시간과 동시 실행 요금에 포함됩니다. Session Recording은 베타이므로 이를 영구적인 약속이 아니라 현재 공개된 가격으로 봐야 합니다.

Workers Free에는 하루 10분의 브라우저 사용 시간과 동시 브라우저 세 개가 포함됩니다. Workers Paid는 계정당 월 최소 $5이며, 브라우저 사용 시간 10시간과 동시 브라우저 10개를 포함합니다. 이후 추가 브라우저 사용 시간당 $0.09, 일별 최대치의 월평균을 기준으로 추가 동시 브라우저당 $2가 부과됩니다.

진단을 위한 재실행 한 번의 직접 비용은 미미하지만, 그 전후에 드는 인력 비용은 그렇지 않습니다. 아래는 Cloudflare 벤치마크가 아니라 계획을 위한 가정입니다.

  • 계정은 이미 포함된 브라우저 사용 시간 10시간을 모두 썼습니다.
  • 정기 작업 한 번은 10분이 걸리고 한 달에 12번 실패합니다.
  • 실패를 재현하고 진단할 때마다 운영자 시간 20분이 듭니다.
  • 기존 기록을 살펴보는 데는 운영자 시간 5분이 듭니다.
  • 운영자 시간의 총비용은 시간당 $75로 가정합니다.
  • 기록 점검으로 진단용 재실행 한 번을 피하더라도 수정 사항을 검증하기 위한 실행은 나중에 필요할 수 있습니다.
월간 진단 방식새 브라우저 사용 시간운영자 시간가정 비용
먼저 재실행120분240분$300.18
먼저 기록 점검0분60분$75.00
피할 수 있는 차이120분180분$225.18

이 차이에서 순수 브라우저 비용은 18센트뿐입니다. 나머지 $225는 운영자 시간입니다. 또한 Cloudflare는 청구 주기의 사용량을 모두 합산한 뒤 계정 수준에서 브라우저 사용 시간을 반올림합니다. 따라서 10분 실행에 해당하는 1.5센트가 청구서에 별도 항목으로 표시될 것이라고 보아서는 안 됩니다.

이것이 비즈니스에 미치는 실질적인 영향입니다. Inspect 패널이 브라우저 컴퓨팅 비용을 크게 줄여주는 것은 아닙니다. 대신 사고 대응 과정에서 계측하고, 재현하고, 기다리는 한 차례의 순환을 없앨 수 있습니다.

기록으로 확인할 수 없는 것

기록은 문서 상태와 이벤트를 수집할 뿐, 렌더링된 모든 픽셀을 담지는 않습니다.

이러한 한계에 걸리는 실패에는 다른 진단 방법이 필요합니다. Canvas에 그린 차트, 타사 iframe 안의 결제 양식, 동영상 상태, WebGL 장면, 마스킹된 필드에 입력한 값은 주변 기록이 정상으로 보여도 잘못되어 있을 수 있습니다.

DOM 보기 역시 기록이 끝난 시점의 구조를 보여줍니다. 작업이 마지막에 도달한 페이지는 설명할 수 있지만, 앞선 모든 상태를 픽셀 단위로 정확히 재현한 스크린샷은 아닙니다.

운영상의 제한도 있습니다. 기록은 30일 동안 제공되며, 길이는 최소 1초에서 최대 2시간입니다. launch() 또는 CDP를 이용한 Browser Session에서 작동하고 Quick Actions에서는 만들 수 없습니다. DOM이 자주 바뀌는 페이지는 변경될 때마다 데이터가 생기므로 이벤트 스트림이 매우 커질 수 있습니다.

지금 워크플로를 바꿔야 하는 팀은 어디인가

Puppeteer, Playwright, CDP 정기 작업을 운영하고 실패할 때마다 가장 먼저 누군가가 재현부터 한다면 이번 주에 적용할 만합니다. 모든 작업이 아니라 하나에만 기록을 추가한 뒤, 그 기록이 첫 진단 질문에 답하는지 측정해 보세요.

중요한 상태가 주로 Canvas, WebGL, 미디어, 교차 출처 iframe, 마스킹된 양식 필드에 있다면 기다리는 편이 낫습니다. 기록만으로는 이를 대체할 수 없으므로 스크린샷, 애플리케이션 로그, 목적에 맞춘 계측을 계속 사용해야 합니다.

Quick Actions만 사용한다면 이번 변경의 영향은 없습니다. 기록만을 위해 Browser Session으로 옮기면 구현 방식이 달라지고 요금 모델에 동시 실행 항목도 추가됩니다. 디버깅상의 이점이 이 전환을 정당화하는지 따져봐야 합니다.

월요일에 바로 할 일

반복해서 실패한 정기 Browser Session 하나를 고릅니다. 최초 실행에 recording: true를 추가하고, 자체 작업 ID 옆에 세션 ID를 저장한 뒤 다음 예약 실행이 정상적으로 종료되게 둡니다.

그런 다음 기록을 가져와 처음으로 관련 있는 대상 ID를 선택하고 원시 네트워크 추적이나 HAR 파일을 요청합니다. 실패한 요청이나 최종 페이지 상태를 특정하는 데 걸린 시간을 재보세요. 이 증거로 진단용 재실행 한 번을 줄였다면 해당 작업의 기록을 계속 켜 두고 추적을 사고 기록에 포함합니다. 도움이 되지 않았다면 기록을 다시 끄고 실제 사각지대에 부족한 신호를 추가합니다.

플랫폼 변경을 운영자 관점에서 풀어낸 글을 더 받아보려면 뉴스레터를 구독하세요.

마지막 업데이트
2026년 9월 19일
카테고리
Explained

Google에서 이 사이트를 우선하기

Google 검색에서 omidsaffari.com을 선호 소스로 추가

omidsaffari.com을 선호 소스로 지정하면 Google이 Top Stories, AI Overviews, AI Mode에서 우선적으로 보여 줍니다.

v0에서 사내 디자인 시스템을 그대로 재사용하는 법

v0에서 사내 디자인 시스템을 그대로 재사용하는 법

디자인 시스템의 비공개 npm 패키지를 Vercel v0에 안전하게 연결하는 방법을 정리합니다. NPM_TOKEN과 NPM_RC의 차이, 최소 권한 설정, 요금, 한계, 프로토타입을 실제 저장소로 넘길 때 확인할 항목까지 실무 기준으로 함께 살펴봅니다.2026년 9월 19일Explained
Claude Code 비용, 자동 모드 분류기 과금이 사라지는 조건

Claude Code 비용, 자동 모드 분류기 과금이 사라지는 조건

Claude Code 2.1.278은 서버가 자동 모드 검사를 처리할 때 별도 분류기 요청 비용을 없앱니다. API·Enterprise·게이트웨이 환경에서 /status로 실제 과금 경로를 확인하고, 비용 예측 전에 점검해야 할 호환 조건과 폴백 신호를 정리했습니다.2026년 9월 19일Explained
Vercel 배포 한 번에만 Turbo를 적용하는 방법과 비용

Vercel 배포 한 번에만 Turbo를 적용하는 방법과 비용

Vercel 배포마다 프로젝트의 빌드 머신 설정을 바꿀 필요가 없습니다. Pro와 Enterprise에서 긴급한 배포 한 번에만 Turbo를 적용하는 3가지 방법과 분당 비용을 살펴보고, Basic과 비교해 실제로 아낀 시간과 추가 비용을 검증하는 절차까지 정리했습니다.2026년 9월 18일Explained
워드 AI 실전 가이드: ChatGPT로 Word 문서 작성부터 수정까지

워드 AI 실전 가이드: ChatGPT로 Word 문서 작성부터 수정까지

Word 안에서 ChatGPT로 초안을 만들고 열린 문서를 요약·수정하는 방법을 정리했습니다. 애드인 설치 조건, 공유 사용량과 토큰 요율, 데이터 경계, 검토 절차를 확인하고 앱 사이 복사·붙여넣기를 줄이는 워드 AI 업무 흐름을 안전하게 시작해 보세요.2026년 9월 18일Explained
AI 에이전트 운영자를 위한 Google Antigravity 마이그레이션 가이드

AI 에이전트 운영자를 위한 Google Antigravity 마이그레이션 가이드

Google Antigravity의 5월 에이전트가 2026년 10월 5일 종료됩니다. AI 에이전트 작업의 출력 전용·로컬 툴 경로별 마이그레이션 범위와 새 파일 툴 계약, 안전한 어댑터 테스트, 예약 작업 점검 순서를 실무 기준으로 한눈에 정리했습니다.2026년 9월 18일Explained
Cloudflare Workers RPC 추적, 느린 고객 요청의 병목을 드러내다

Cloudflare Workers RPC 추적, 느린 고객 요청의 병목을 드러내다

Cloudflare Workers의 JavaScript RPC 추적이 Worker와 Durable Object 사이의 호출을 하나의 트레이스로 잇는 방식을 살펴봅니다. 느린 고객 요청의 병목을 찾는 법부터 샘플링, 보존 기간, 2026년 10월 1일 이후 과금까지 정리합니다.2026년 9월 17일Explained
Vercel Hobby 배포 기록, 30일 전에 사라질 수 있습니다

Vercel Hobby 배포 기록, 30일 전에 사라질 수 있습니다

Vercel Hobby 팀이 Deployment Storage 10GB를 넘으면 보호되지 않은 프리뷰와 롤백 대상이 30일 전에도 삭제될 수 있습니다. 계속 보호되는 배포 조건부터 저장 공간 점검 순서, 월 $20부터 시작하는 Pro 전환 비용까지 한 번에 정리합니다.2026년 9월 17일Explained
Cloudflare AI Gateway: 고객 AI 비용이 내 청구서에 잡히지 않게 설정하는 법

Cloudflare AI Gateway: 고객 AI 비용이 내 청구서에 잡히지 않게 설정하는 법

Cloudflare AI Gateway의 제공업체 자격 증명 필수 설정을 활용해 고객 키가 빠진 요청을 HTTP 400에서 차단하고, Unified Billing으로 AI 비용이 잘못 넘어가는 일을 막는 방법을 설명합니다. BYOK 경로와 지출 한도, 도입 테스트까지 함께 정리했습니다.2026년 9월 17일Explained
뉴스레터

매주 일요일, 한 통의 편지.뜨거운 의견이 아닌, 돌아가는 시스템.

주간 발행. 스팸 없음. 언제든 해지 가능합니다.