2025년 최고의 웹 스크래핑 도구 및 소프트웨어 | Thunderbit

최종 업데이트: August 19, 2026
2025년 최고의 웹 스크래핑 도구 및 소프트웨어 | Thunderbit
AI 요약
모든 Chrome 확장은 manifest.json을 함께 제공하며, 여기에는 요청한 API, 호스트 패턴, 정적 콘텐츠 스크립트, 선택적 권한, 허용된 외부 연결 등 브라우저 수준의 상당한 능력 상한선이 담겨 있습니다. 이 파일은 설치 패키지 안에 들어 있는 공개 문서입니다. 그러나 이 파일만으로 런타임 코드가 실제로 어떤 선언된 기능을 사용하는지, 어떤 데이터가 기기 밖으로 나가는지, 또는 별도의 웹 로그인으로 어떤 계정 접근이 일어나는지는 증명할 수 없습니다. 이번 감사에서는 Thunderbit을 포함한 10개의 스크래핑 및 브라우저 자동화 확장을 검토했습니다. 결과는 매우 큰 차이를 보여 줍니다.

모든 Chrome 확장 프로그램에는 manifest.json이 들어 있으며, 이 파일에는 브라우저 수준에서 허용되는 기능의 상당 부분이 적혀 있습니다. 여기에는 요청한 API, 호스트 패턴, 정적 콘텐츠 스크립트, 선택적 권한, 허용된 외부 연결이 포함됩니다. 이 파일은 설치 패키지 안에 공개적으로 들어 있는 문서입니다. 하지만 런타임 코드가 실제로 어떤 선언된 기능을 쓰는지, 어떤 데이터가 기기 밖으로 나가는지, 혹은 별도의 웹 로그인으로 어떤 계정 접근이 이뤄지는지는 증명해 주지 않습니다.

이번 감사에서는 선정한 10개의 스크래핑 및 브라우저 자동화 확장 프로그램을 살펴봤고, 그중에는 우리 제품인 Thunderbit도 포함되어 있습니다. 결과의 폭은 꽤 큽니다. 어떤 확장은 상시 사이트 접근 권한을 전혀 선언하지 않았고, 어떤 확장은 clipboardRead를 포함해 13개의 권한을 선언했습니다. Thunderbit는 이 집합에서 유일하게 debugger를 선언한 확장으로, 페이지 접근이나 OAuth, 사용자가 제공한 스크립트와는 다른 위험 양상을 가진 광범위한 CDP 연결 기능을 포함합니다.

이건 비난이 아닙니다. 광범위한 권한은 특정 기능을 만들기 위한 유일하게 정직한 선택일 수 있고, 제한적인 권한은 단순히 제품이 그만큼 덜 많은 일을 한다는 뜻일 수 있습니다. 중요한 점은 그 차이가 매우 크고, 공개되어 있으며, 비교표에는 절대 드러나지 않는다는 사실입니다.

진행 방식

각 확장 프로그램은 Google의 업데이트 엔드포인트에서 .crx로 내려받았고, Chrome이 실제로 사용하는 것과 동일한 URL을 사용했습니다. 그다음 압축을 풀고 파싱했습니다. 어떤 확장도 설치하지 않았고, 어떤 확장 코드도 실행하지 않았습니다. 즉, JSON 파일을 읽은 것입니다.

다운로드는 대략 2초에 1회 정도로 속도를 조절했습니다. 모든 .crx, 해당 SHA-256, 추출한 manifest.json은 아티팩트로 보관했습니다. Thunderbit도 다른 9개와 동일한 스크립트로 처리했으며, 별도 경로를 거치지 않았습니다. 따라서 Thunderbit의 행도 다른 항목과 정확히 같은 방식으로 도출되었습니다.

분석은 두 종류의 증거를 사용하며, 서로 분리해서 봅니다.

  • 선언된 정적 동작: 호스트 패턴과 content_scripts 항목, 즉 matches, run_at, all_frames.
  • 런타임 코드가 사용할 수 있는 기능: permissions 또는 optional_permissions에 적힌 API. 이 선언은 코드가 요청하거나 호출할 수 있는 대상을 보여줄 뿐, 실제로 그렇게 한다는 뜻은 아닙니다.

여기서는 순위형의 “가장 강력한” 점수를 매기지 않았습니다. debugger, userScripts, 광범위한 호스트 접근, OAuth 범위, 클립보드 접근, 외부 메시징은 각각 다른 데이터를 노출하고 서로 다른 사전 조건이 필요합니다. 이를 비교하려면 이 manifest만 보는 감사로는 제공할 수 없는 위협 모델이 필요합니다.

아래 크기는 압축을 푼 총합이며 MiB(2²⁰ bytes) 단위입니다. ZIP 항목을 합산했습니다.

기준일: 2026-07-29. 확장 프로그램은 업데이트됩니다. 인용 전에는 다시 확인하세요.

10개의 manifest가 선언하는 것

Measured results chart: Declared permission strings

공식 참고 문서: Chrome 권한 선언 가이드.

확장 프로그램버전압축 해제 크기파일 수권한사이트 접근file:// 접근 가능 여부
Axiom.ai5.1.037.1 MiB2328http://*/* + https://*/*
Table Capture11.0.4121.1 MiB1154 (+3 선택적)<all_urls>
Magical3.119.116.8 MiB39513 (+2 선택적)<all_urls>
Thunderbit(우리 제품)4.6.415.9 MiB788개 인식됨(+1개 미인식 배열 문자열: commands)<all_urls>
Clay for Chrome1.0.06.3 MiB516*://*/*(자사 도메인에만 삽입)
Listly0.9.63.5 MiB847http://*/*, https://*/*, file:///*.html
Hexomatic1.8.42.7 MiB372자체 도메인만
Agenty2.9.72.2 MiB494선언 없음
Clip to Clay1.8.00.7 MiB164명시된 도메인 2개
TexAu v21.6.60.3 MiB126명시된 도메인 14개

후보 목록에는 2개가 더 있었지만, 별도로 다룰 만한 이유가 있어 표에는 넣지 않았습니다.

차이는 크기 때문이 아니라 설계 때문입니다

Agenty는 호스트 권한을 선언하지 않고 콘텐츠 스크립트도 아예 포함하지 않습니다. 4개의 권한은 activeTab, scripting, identity, identity.email입니다. 여기서 핵심은 activeTab입니다. 이 권한은 확장 프로그램을 클릭한 뒤에만, 그리고 다른 페이지로 이동하기 전까지만 현재 탭에 접근할 수 있게 해줍니다. 사용자가 직접 실행하지 않으면 페이지에서 아무것도 동작하지 않습니다. 패키지 크기는 2.2 MiB입니다.

Axiom.ai는 http://*/*https://*/*를 선언하고, <all_urls>에 일치하는 콘텐츠 스크립트를 주입하며, 232개 파일에 걸쳐 37.1 MiB로 압축 해제됩니다. Agenty보다 17배 큰 규모이며, 방문하는 모든 페이지에 상시 접근할 수 있습니다.

Hexomatic은 Agenty와 비슷합니다. 권한은 2개(storage, tabs)뿐이고, 호스트 권한은 없으며, 콘텐츠 스크립트는 자체 두 도메인에만 제한됩니다.

Clay for Chrome은 또 다른 형태입니다. 호스트 권한으로 *://*/*를 선언하지만, 콘텐츠 스크립트는 자사 도메인에만 삽입합니다. 상시 기능은 넓지만 자동 동작은 좁습니다. 권한 표만 보면 이 둘은 뒤섞여 보입니다.

10개 중 5개는 디스크의 파일에도 접근할 수 있습니다

file:///은 웹사이트가 아닙니다. 브라우저 탭 안에서 렌더링되는 로컬 파일 시스템입니다. 사용자가 연 PDF, HTML 내보내기 파일, 다운로드한 청구서가 여기에 해당합니다.

공식 참고 문서: Chrome 매치 패턴 문서.

세 개의 확장은 이를 명시적으로 적습니다. 나머지 두 개는 간접적으로 도달합니다. <all_urls>에는 file: 스킴이 포함되기 때문입니다.

확장 프로그램file://에 도달하는 방식매니페스트에 file://를 명시했는가?위치
Magical6개 콘텐츠 스크립트 항목 중 4개에서 file:///*와 일치 — Chrome이 렌더링할 수 있는 모든 로컬 파일, HTML만이 아님콘텐츠 스크립트, web_accessible_resources
Listlyfile:///*.html와 일치콘텐츠 스크립트
Table Capture<all_urls> 콘텐츠 스크립트, 그리고 스킴도 명시web_accessible_resources
Axiom.ai<all_urls> 와일드카드 덕분에 도달없음
Thunderbit(우리 제품)<all_urls> 와일드카드 덕분에 도달없음

http://*/*https://*/*file://를 포함하지 않습니다. <all_urls>*://*/*도 이 점에서 다릅니다. 여기서의 5개는 선언상 어떤 경로로든 해당 스킴에 도달하는 경우입니다. 와일드카드 형식을 무엇으로 골랐느냐의 결과가 아닙니다.

Chrome은 이 기능을 각 확장 프로그램별 “파일 URL 접근 허용” 토글 뒤에 두며, 기본값은 입니다. 따라서 선언은 허용이 아니라 요청입니다. 10개 중 5개가 실제 해당되며, 그 5개 중 2개는 매니페스트 어디에도 file://를 적지 않습니다. 바로 Axiom.ai와 우리 제품입니다.

이 집계에는 콘텐츠 스크립트와 호스트 권한뿐 아니라 web_accessible_resources도 포함됩니다. Table Capture는 그 블록에서 file://*/*를 명시합니다. 이를 제외하면, 스킴을 명시하지 않은 채 파일에 도달하는 확장으로 잘못 분류하게 됩니다.

요청되기 전에는 보이지 않는 권한

System diagram: Permissions you can't see until they're requested

optional_permissions는 미리 선언되지만 런타임에 요청되므로, 설치 시 권한 요청 화면에는 나타나지 않습니다. 이를 사용하는 확장은 2개이며, 그중 하나는 의미가 큽니다.

확장 프로그램optional_permissions중요한 항목
Table CaptureuserScripts, downloads, identityChrome의 사용자 게이트가 활성화된 뒤 페이지 문맥에서 사용자가 제공한 스크립트를 실행할 수 있는 userScripts
Magicaldownloads, webRequestwebRequest는 네트워크 트래픽을 관찰합니다

userScripts는 요청되기 전까지는 드러나지 않으며, 권한 개수를 보는 사람에게는 보이지 않습니다.

또한 이 권한에는 이번 감사의 다른 권한들과는 별개의 게이트가 있으며, 이를 빼면 실제보다 과장된 설명이 됩니다. userScripts를 선언했다고 해서 바로 쓸 수 있는 것은 아닙니다. Chrome이 먼저 명시적인 사용자 동작을 요구하기 때문입니다. Chrome 138 이전에는 전역 chrome://extensions에서 켜는 Developer Mode가 필요했습니다. Chrome 138부터는 각 확장 프로그램 상세 페이지에 있는 Allow User Scripts 토글이 필요하며, 기본값은 꺼짐입니다. 따라서 일반적인 설치 상태에서는 이 기능은 선언만 되어 있고 동작하지 않습니다. 정확한 표현은 조건부입니다. 즉, 사용자가 Chrome의 게이트를 활성화한 뒤에만 Table Capture가 userScripts API를 사용할 수 있습니다. 이번 감사는 사용자가 설정 페이지를 얼마나 자주 방문하거나 토글을 켜는지는 측정하지 않았습니다.

둘 다 숨겨진 것은 아니며, 매니페스트에 들어 있습니다. 선택적 블록을 무시하면 두 제품의 실제 범위를 과소평가하게 됩니다.

범위뿐 아니라 주입 시점도 중요합니다

콘텐츠 스크립트가 어떻게 주입되는지는 종종 무시되지만, 실제 그림을 바꿉니다. document_start는 Chrome이 제공하는 가장 이른 훅이고, all_frames는 3자 임베드까지 닿습니다.

이 집합에서 모든 프레임에 정적으로 주입하는 항목을 선언된 시점 순으로 정리하면 다음과 같습니다.

확장 프로그램run_atall_frames콘텐츠 스크립트 매치 패턴
Table Capturedocument_start<all_urls>
Listlydocument_startfile:///*.html 및 모든 http/https
Axiom.aidocument_start자체 도메인만
Clay for Chromedocument_start자체 도메인만
Thunderbit(우리 제품)document_end<all_urls>
Magicaldocument_idlefile:///* 및 넓은 http/https
TexAudocument_idle(미설정)명시된 패턴 14개

Table Capture와 Listly는 넓은 매치 패턴 위에 가장 이른 훅을 사용합니다. Axiom.ai와 Clay for Chrome은 같은 타이밍을 자사 도메인에만 씁니다. 공격성은 같지만 대상이 좁습니다.

정적 선언 기준으로는 <all_urls>all_frames까지 붙은 경우가 매치 범위의 상한이며, Table Capture와 Thunderbit가 여기에 있습니다. 다만 선언된 타이밍은 다릅니다. Table Capture는 document_start를 쓰고, Thunderbit의 정적 콘텐츠 스크립트는 document_end입니다. 런타임 API는 별도 기능 범주이며, 이 표만으로 추론할 수 없습니다.

권한 개수는 좋은 요약 통계가 아닙니다. Table Capture는 여기서 가장 적은 편인 4개의 권한만 선언하지만, <all_urls>의 모든 프레임에 document_start로 주입하며, 요청 시 userScripts도 사용합니다.

누가 확장 프로그램에 메시지를 보낼 수 있는가

externally_connectable는 웹페이지나 다른 확장 프로그램이 확장 프로그램의 background script로 직접 메시지를 보낼 수 있는 대상을 제어합니다. 기본값은 직관적이지 않습니다.

키를 생략하는 것이 오히려 허용 설정입니다. Chrome의 기본 동작은 externally_connectable가 없으면 어떤 확장 프로그램이든 연결 가능하고, 웹페이지는 연결할 수 없다는 것입니다. 선언하는 쪽이 제한입니다.

이 기준으로 보면 표는 뒤집힙니다.

확장 프로그램externally_connectable 선언메시지 전송 가능 대상
Agenty생략허용 기본값 — 어떤 확장 프로그램이든 연결 가능, 웹페이지는 불가
Clay for Chrome생략허용 기본값 — 어떤 확장 프로그램이든 연결 가능, 웹페이지는 불가
Clip to Clay생략허용 기본값 — 어떤 확장 프로그램이든 연결 가능, 웹페이지는 불가
Listly생략허용 기본값 — 어떤 확장 프로그램이든 연결 가능, 웹페이지는 불가
Table Capture생략허용 기본값 — 어떤 확장 프로그램이든 연결 가능, 웹페이지는 불가
TexAu생략허용 기본값 — 어떤 확장 프로그램이든 연결 가능, 웹페이지는 불가
Thunderbit(우리 제품)생략허용 기본값 — 어떤 확장 프로그램이든 연결 가능, 웹페이지는 불가
Hexomatic8개 확장 프로그램 ID 6개 웹 오리진닫힌 기준선에서 두 채널 모두 개방
Axiom.ai7개 웹 오리진, ids 없음확장 프로그램 채널은 닫힘, 7개 웹페이지는 개방
Magical{"ids": [], "matches": []}이 집합에서 두 채널을 명시적으로 모두 닫는 유일한 확장

Chrome의 규칙에는 두 단계가 있습니다. 매니페스트 참고 문서에 따르면:

상황연결 가능한 주체
키 전체가 없음"모든 확장 프로그램은 연결할 수 있지만, 어떤 웹페이지도 연결할 수 없다"
키는 있으나 ids가 없거나 []"어떤 확장 프로그램이나 앱도 연결할 수 없다"
키는 있으나 matches가 없거나 []"어떤 웹페이지도 연결할 수 없다"

허용 기본값은 키 전체의 부재에 붙습니다. 키가 존재하는 순간 두 하위 필드는 모두 닫힌 상태에서 시작하고, 값을 적어 넣을수록 각 채널이 넓어집니다.

Axiom.ai는 키를 선언했지만 matches만 적었습니다. 따라서 ids는 비어 있는 상태이며, 이는 어떤 확장 프로그램도 메시지를 보낼 수 없다는 뜻입니다. 즉, 확장 프로그램 채널은 열린 것이 아니라 닫힌 것입니다. 열린 것은 7개 웹 오리진이며, 그중 Axiom 도메인은 하나뿐입니다. 나머지는 귀속할 수 없는 제3자(*://*.tgwc.space/*, *://*.bitmachine.co.uk/*), localhost, 0.0.0.0, Google APIs 호스트, 그리고 해당 확장과 관련 없는 대형 소셜 플랫폼 하나입니다.

Hexomatic은 8개의 명시된 ID에 확장 프로그램 채널을 엽니다. 키가 존재하므로 기준값은 0개이고, 8개를 적음으로써 8개까지 넓어집니다. 6개의 matches는 다른 채널도 넓히며, 그중 2개는 일반 HTTP의 http://localhost:8000/*http://localhost:3000/*입니다. 사용자의 기기에서 해당 포트에 응답하는 것은 모두 허용 목록 안에 들어갑니다.

10개 중 7개는 키를 아예 생략하며, 우리 제품도 그중 하나입니다. 이 7개는 확장 프로그램 간 메시징에서 허용 기본값에 놓여 있습니다. 두 개는 이 채널을 닫습니다. Magical은 ids: []로 명시적으로 닫고, Axiom.ai는 키를 선언한 뒤 ids를 전혀 언급하지 않습니다. 두 채널을 모두 닫는 것은 Magical뿐입니다.

마지막 줄이 바로, 권한 개수보다 manifest를 읽어야 하는 이유입니다. 같은 확장 프로그램도 한 축에서는 매우 넓고, 다른 축에서는 집합 내 가장 엄격할 수 있습니다.

아무도 세지 않는 축: OAuth 범위

매니페스트에는 oauth2 블록이 들어갈 수 있고, 그 안의 스코프는 다른 회사의 계정에 대한 접근을 뜻합니다. 이는 위의 어떤 권한과도 다른 종류의 접근이며, 어떤 권한 개수로도 반영되지 않습니다.

공식 참고 문서: Google OAuth 2.0 스코프 목록.

확장 프로그램요청한 oauth2 스코프
Axiom.aiopenid, email, profile, auth/drive, auth/spreadsheets
Table Captureauth/spreadsheets, auth/userinfo.email
Agentyopenid, email, profile
나머지 7개, 우리 제품 포함선언 없음

https://www.googleapis.com/auth/drive가 가장 광범위한 스코프입니다. Google은 더 좁은 drive.file 스코프도 제공하는데, 이것은 앱이 직접 만들었거나 사용자가 명시적으로 고른 파일에만 접근을 허용합니다. 반면 auth/drive는 사용자의 Drive 전체에서 보기, 편집, 생성, 삭제가 가능합니다. auth/spreadsheets도 계정이 접근 가능한 모든 스프레드시트에 대해 같은 성격을 가집니다. Axiom.ai와 Table Capture는 모두 Google 계정 스코프와 <all_urls> 페이지 접근을 함께 선언합니다.

이 표가 증명하는 것에는 두 가지 한계가 있습니다. 스코프는 요청된 것일 뿐 허용된 것이 아닙니다. Google은 동의 화면을 띄우고 사용자는 거부할 수 있으며, 확장이 API를 아예 호출하지 않을 수도 있습니다. 또한 이 manifest는 Chrome의 identity 흐름을 통한 OAuth만 보며, 대신 웹 로그인 페이지로 보내는 확장이라면 여기에는 아무것도 선언되지 않습니다. 7개의 0은 “이 파일에서 요청하지 않음”을 뜻할 뿐, “Google 계정에 대한 접근이 없음”을 뜻하지 않습니다. 우리 제품도 마찬가지이며, 그래서 이 축은 좁다의 증명이 아니라 별도 보고 대상입니다.

같은 기준 위에서 본 우리 확장 프로그램

Thunderbit 4.6.4는 다른 9개와 동일한 manifest 파서를 거쳤습니다. 패키지는 78개 파일에 걸쳐 압축 해제 크기 15.9 MiB입니다.

선언된 정적 동작: 호스트 권한과 콘텐츠 스크립트 매치 모두에 <all_urls>가 들어 있습니다. 정적 스크립트는 all_frames에서 document_end로 실행됩니다. <all_urls>에는 file:가 포함되므로, 사용자가 Chrome의 파일 접근 토글을 켠 뒤에는 로컬 파일에도 도달할 수 있습니다. Thunderbit는 또한 externally_connectable를 생략하므로, Chrome 기본값상 어떤 확장 프로그램이든 메시지를 보낼 수 있지만 웹페이지는 불가합니다.

런타임 기능 상한: permissions 배열에는 activeTab, commands, debugger, offscreen, scripting, sidePanel, storage, tabGroups, tabs의 9개 문자열이 들어 있습니다. Chrome은 이 중 8개를 권한으로 인식하며, commands는 최상위 manifest 키이지 이 배열 항목으로는 효과가 없습니다. Thunderbit는 이 집합에서 debugger를 선언한 유일한 확장으로, 탭에 CDP를 연결할 수 있습니다. 또한 scripting을 런타임 등록에 사용할 수 있게 합니다. 이 API들은 document_end 행보다 넓은 기능을 만들지만, manifest만 읽어서는 Thunderbit가 특정 CDP 메서드를 호출하는지, 혹은 더 이른 시점에 스크립트를 등록하는지는 알 수 없습니다.

이 구분은 몇 가지 그럴듯하지만 잘못된 비교를 막습니다. cookies 권한이 더 좁다고 해서 debugger를 가진 코드가 접근할 수 있는 범위를 제한하는 것은 아닙니다. clipboardRead가 없다고 해서 클립보드 접근이 불가능하다고 볼 수도 없습니다. 반대로 debugger가 있다고 해서 그런 경로를 실제로 사용한다는 뜻도 아닙니다. 이를 확인하려면 소스 검토나 런타임 추적이 필요하며, 둘 다 이번 감사에서는 수행하지 않았습니다.

이 도구 기준에서 Thunderbit는 정적 사이트 접근 범위가 넓고, 이 집합에서 debugger 선언이 유일하며, 확장 프로그램 간 메시징에서는 Chrome 기본값에 있습니다. CDP, OAuth, userScripts, 클립보드, 호스트 접근을 아우르는 공통 위협 모델이 없으므로 단일 “최강” 순위는 존재하지 않습니다.

아무도 마케팅하지 않는 절제된 설계

TexAu는 0.3 MiB로 여기서 가장 작고, 와일드카드 대신 14개의 구체적 사이트를 명시합니다. 소셜 네트워크, 개발자 플랫폼, 퍼블리싱 플랫폼, 채팅 제품, 비즈니스 데이터 제공업체, 그리고 자사 도메인까지 포함됩니다. 콘텐츠 스크립트도 정확히 같은 14개에만 일치합니다.

이 manifest를 읽으면 확장 프로그램이 정확히 어디에서 활성화되는지 알 수 있습니다. 동시에 제품의 공개 문서이기도 해서, 도구가 무엇을 위한 것인지 마케팅보다 더 분명하게 보여줍니다.

트레이드오프는 분명합니다. 이름이 붙은 목록은 목록에 없는 사이트를 스크랩할 수 없고, 새 타깃이 생길 때마다 릴리스가 필요합니다. 하지만 “14개 명시 도메인”과 “존재하는 모든 URL”은 전혀 다른 제안이며, 읽을 수 있는 것은 전자뿐입니다.

목록과 달랐던 두 제품

Captain Data의 확장 프로그램은 공개 배포되지 않습니다. Google 업데이트 엔드포인트는 해당 확장 ID에 대해 HTTP 204, 빈 본문을 반환합니다. 즉, 스토어가 익명에게는 제공하지 않는 응답입니다. 반면 목록 페이지는 익명으로 제공되어 HTTP 200, 509,829 bytes였습니다. 그런데 캡처 결과 그 안에서는 버전 문자열, 최종 업데이트 날짜, 설치 수를 찾을 수 없었습니다. 스크립트 메모에도 null은 약한 증거라고 적혀 있었고, 로그인 벽도 관찰되지 않았습니다. ID는 실제이고 1차 출처이므로 링크 전용 또는 비공개 목록 배포일 가능성이 가장 높아 보이지만, 비공개 전환과는 구분할 수 없었고 추측은 하지 않겠습니다.

Dataflow Kit에는 Chrome 확장 프로그램이 아예 없습니다. 해당 사이트는 포인트 앤 클릭 선택 기능과 REST API를 갖춘 호스티드 웹 앱을 설명합니다. 그럼에도 Chrome 확장 후보 목록에 포함되어 있었고, 이런 식으로 목록이 만들어지는 경우가 흔합니다.

신선도와 도달 범위: 둘 다 쉽게 확인할 수 있으므로

스토어 메타데이터는 권한 외에도 제품 선택에 도움이 되는 맥락을 제공합니다. 같은 필드가 2026-07-30에 모든 확장에 대해 수집되었습니다.

확장 프로그램스토어 버전최종 업데이트설치 구간
Thunderbit(우리 제품)4.6.42026년 7월 28일200,000
Listly0.9.62026년 7월 25일100,000
Axiom.ai5.1.02026년 7월 20일100,000
Table Capture11.0.412026년 6월 26일200,000
Magical3.119.12026년 4월 4일200,000
Agenty2.9.72026년 2월 8일10,000
TexAu1.6.62025년 8월 20일7,000
Clay for Chrome1.0.02025년 4월 9일10,000
Clip to Clay1.8.02025년 4월 8일1,000
Hexomatic1.8.42024년 9월 6일3,000
Captain Data공개 제공되지 않음

3개 제품은 1년 넘게 새 버전을 내지 않았고, Hexomatic은 거의 2년이 되었습니다. 확장 프로그램에서는 이것이 라이브러리보다 더 중요합니다. Chrome은 약 4주마다 안정 버전을 내고, 확장 플랫폼 자체도 계속 변하기 때문입니다. userScripts의 사용자 게이트는 Chrome 138에서 바뀌었습니다. 2024년에 마지막으로 출시된 확장은 지금 브라우저가 강제하는 규칙과는 다른 규칙을 기준으로 만들어졌습니다.

이 표가 말해주지 않는 것 두 가지도 있습니다. 설치 수는 Google이 구간화합니다 — 1,000 / 3,000 / 7,000 / 10,000 / 100,000 / 200,000 — 따라서 대략적인 규모만 비교할 수 있고, 더 세밀한 비교는 불가능합니다. 또한 몇몇 제품은 자사 마케팅에서 더 큰 수치를 내세웁니다. 최근 날짜는 출시의 사실이지, 유지보수 품질이나 권한 위험에 대한 판정이 아닙니다.

유용한 부수 효과 하나: 분석한 10개 패키지 모두에서 스토어 버전과 manifest 버전이 일치했습니다. 이번 감사가 파싱한 CRX는 오늘 스토어가 제공하는 최신 파일이며, 오래된 복사본이 아닙니다.

신선도는 후보군에 얼마나 후속 점검이 필요한지 바꿀 뿐, manifest 의미 자체를 바꾸지는 않습니다. 어제 배포된 와일드카드 확장은 1년 전에 업데이트된 명시 도메인 확장보다 훨씬 넓은 페이지 표면을 노출할 수 있습니다. 반대로 더 최근 패키지가 Chrome 변화에 빠르게 대응하는 운영 측면에서 더 나은 선택일 수도 있습니다. 후보 목록을 만들 때는 스토어 날짜로 어떤 항목을 다시 테스트할지 정하고, manifest로 어떤 항목을 더 면밀히 볼지 판단하세요. 두 열을 하나의 점수로 합치지 마세요.

manifest만으로는 알 수 없는 것

선언된 권한은 상한이지 동작 자체가 아닙니다. <all_urls>는 확장 프로그램이 모든 페이지를 읽을 수 있을 수도 있다는 뜻이지, 실제로 읽는다는 뜻은 아닙니다. 또한 아무것도 기기 밖으로 나가지 않는다는 뜻도 아닙니다. 실제로 무슨 일이 일어나는지 확인하려면 런타임 네트워크 트래픽을 관찰해야 합니다. 이는 별개의 작업이며 이번 감사에서는 하지 않았습니다. 따라서 위 내용은 오용의 증거로 읽으면 안 됩니다.

관련 리뷰: Chrome 확장 프로그램 테스트 가능성 실험.

세 가지 추가 경계도 있습니다.

  • Chrome이 이 기능의 상당 부분을 통제합니다. 파일 접근은 기본적으로 꺼져 있고, activeTab은 의도적으로 좁습니다. 선택적 권한은 런타임 프롬프트를 요구하며, 사용자는 설치 시 권한 목록을 보게 됩니다.
  • 광범위한 권한은 자주 필요합니다. “현재 보고 있는 어떤 페이지에서든 표를 추출하는” 도구는 명시 도메인 허용 목록만으로는 작동할 수 없습니다. 좁은 범위는 때로는 절제이고, 때로는 더 작은 제품일 뿐입니다.
  • 버전은 하나, 날짜도 하나입니다. 모든 수치는 2026-07-29에 제공된 패키지에서 가져왔습니다.

분석 과정에서 바로잡은 핵심 사항

공개된 수치는 빠르게 manifest 파서를 작성할 때 잘못 해석하기 쉬운 세 가지 규칙을 따릅니다. 첫째, <all_urls>에는 file: 스킴이 포함되지만 Chrome은 실제 파일 접근을 사용자 제어 토글 뒤에 둡니다. 둘째, web_accessible_resources.matches는 콘텐츠 스크립트와 호스트 권한과 함께 봐야 하며, Table Capture가 file://*/*를 명시하는 곳이 바로 여기입니다. 셋째, externally_connectable는 전체 키가 없을 때와 키는 있지만 하위 필드가 비어 있을 때 기본값이 다릅니다. 위 표들은 이 규칙들을 일관되게 적용했습니다.

Thunderbit의 권한 총합도 원시 문자열과 Chrome이 인식하는 권한을 구분합니다. 배열에는 9개 항목이 있지만, commands는 최상위 키이므로 여기서는 8개의 인식 권한과 1개의 미인식 문자열로 계산했습니다. 마지막으로, 정적 content_scripts 선언은 코드가 scripting.registerContentScripts나 CDP 메서드를 호출했다는 증거가 아닙니다. 그런 가능성은 런타임 기능 범주에서만 나타나며, 관찰된 동작으로는 제시하지 않았습니다. 원본 manifest, CRX 해시, 파서 출력이 이런 정규화의 감사 추적이므로, 독자는 문장을 그냥 믿을 필요가 없습니다.

실제 설치를 결정할 때는 최소 4개 축을 따로 비교하세요. 기본적으로 어떤 페이지가 범위 안에 있는지, 어떤 명시적 사용자 동작이 더 넓은 접근을 여는지, 어떤 브라우저 또는 계정 API가 가능해지는지, 그리고 어떤 외부 호출자가 확장 프로그램에 메시지를 보낼 수 있는지입니다. Agenty의 activeTab 모델, Table Capture의 게이트된 userScripts, Axiom.ai의 Drive 스코프, Thunderbit의 debugger 선언은 하나의 선형 척도 위에 있는 점들이 아닙니다. 서로 다른 위협 질문에 대한 서로 다른 답입니다.

의도적으로 다른 4가지 설계에 적용한 비교는 다음과 같습니다.

확장 프로그램manifest에 보이는 페이지 범위추가 게이트이번 감사에서의 페이지 외 기능외부 호출자 상태
Agenty호스트 권한도 정적 콘텐츠 스크립트도 없음사용자가 현재 탭에서 activeTab을 직접 실행Chrome identity 권한키 생략: 어떤 확장 프로그램이든 연결 가능, 웹페이지는 불가
Table Capturedocument_start에서 <all_urls>의 모든 프레임에 정적 스크립트파일 접근은 기본적으로 꺼져 있음; userScripts는 Chrome의 별도 사용자 게이트 필요선택적 userScripts, downloads, identity키 생략: 어떤 확장 프로그램이든 연결 가능, 웹페이지는 불가
Axiom.aiHTTP/HTTPS 와일드카드 접근; 자체 도메인에서 document_start 정적 스크립트요청한 Google 스코프에 대한 OAuth 동의선언된 Drive 및 Sheets OAuth 스코프확장 프로그램 호출은 닫힘; 7개 웹 오리진 개방
Thunderbit<all_urls> 호스트 접근과 document_end의 모든 프레임 정적 스크립트파일 접근은 기본적으로 꺼져 있음; debugger 연결은 Chrome이 제어하는 사용자-visible 동작을 가짐debugger, scripting, tabs 및 관련 브라우저 API 선언키 생략: 어떤 확장 프로그램이든 연결 가능, 웹페이지는 불가

이 표도 여전히 승자를 가려주지는 않습니다. Agenty의 좁은 상시 페이지 접근은 제출된 데이터를 백엔드가 어떻게 쓰는지 말해주지 않습니다. Axiom.ai의 계정 스코프는 현재 페이지를 읽는 확장 프로그램과 비교 대상이 아닙니다. Table Capture의 userScripts 선언은 사용자가 별도 게이트를 켜기 전까지는 비활성입니다. Thunderbit의 debugger 권한은 광범위한 브라우저 제어 표면을 드러내지만, manifest는 코드가 어떤 CDP 도메인이나 메서드를 호출하는지는 알려주지 않습니다. 각 행은 다음에 무엇을 점검해야 하는지 알려줍니다. 런타임 네트워크 트래픽, 소스 코드, 동의 흐름, 또는 브라우저 API 추적입니다.

System diagram: How to read your own

같은 구분은 Chrome 설치 프롬프트를 읽을 때도 중요합니다. 원시 권한 개수만으로는 시점, 프레임 범위, OAuth 스코프, web_accessible_resources, 생략된 externally_connectable 키를 알 수 없습니다. 반대로 광범위한 선언이 수집이나 유출의 증거인 것도 아닙니다. manifest 감사의 유용한 결과는 우선순위가 매겨진 런타임 테스트 계획입니다. 데이터 표면을 식별하고, 사용자 게이트를 확인한 뒤, 선언된 경로가 실제로 쓰이는지 관찰하세요.

자신의 manifest를 읽는 법

관련 리뷰: 브라우저 자동화 가이드.

  1. chrome://extensionsDetails에서 허용된 사이트 접근을 확인할 수 있고, 상시 접근이 필요하지 않은 항목은 클릭할 때만으로 바꿀 수 있습니다. 그러면 위에서 말한 사이트 접근의 절반은 좁아집니다. 하지만 인바운드 메시징은 건드리지 않습니다 (externally_connectable는 service worker로 그대로 도달합니다). 브라우저 수준 권한도 마찬가지입니다. Thunderbit의 debugger 선언은 여기서 중요합니다. Chromium의 보안 문서에는 debugger API가 "경우에 따라 호스트 권한이나 파일 접근 같은 일반적인 제한도 우회할 수 있다"고 되어 있으므로, 사이트 접근을 "클릭할 때만"으로 설정해도 무엇까지 닿는지 완전히 제한되는 것은 아닙니다. 또한 이 제어는 tabs, webNavigation, clipboardRead, downloads, optional_permissions 안의 어떤 항목도 막지 못합니다.
  2. 원본 파일은 Chrome의 Extensions/<id>/<version>/ 디렉터리 아래에 있습니다. 6개 필드를 확인하세요: permissions, optional_permissions, host_permissions, content_scripts(그 안의 matches, run_at, all_frames), externally_connectable — 여기서는 키가 없으면 확장 프로그램 호출자에게 허용된다는 점을 기억해야 합니다 — 그리고 web_accessible_resources입니다. 이 항목의 matches는 콘텐츠 스크립트가 전혀 쓰지 않는 스킴도 명시할 수 있습니다. Thunderbit의 마지막 필드에는 index.html과 번들 스크립트 2개를 모든 오리진에 노출하는 <all_urls> 항목 2개가 있으며, use_dynamic_url: false이므로 페이지가 해당 안정적 확장 URL이 해석되는지 확인할 수 있습니다.
  3. 목록의 최종 업데이트 날짜를 현재 Chrome 버전과 대조하세요.

공개 및 자료: 이 글은 Thunderbit가 발행했으며, 해당 확장 프로그램도 같은 표와 파서에 포함되어 있습니다. 확장 프로그램이 아닌 도구는 오픈소스 스크래퍼 기둥 글에서 다룹니다.

웹 데이터 추출을 위해 Thunderbit 사용해 보기

요약

스크래핑 및 자동화 확장 프로그램 10개를, 우리 제품을 포함해, 각자 자신의 manifest에서 읽었습니다.

Agenty는 사이트 접근도 콘텐츠 스크립트도 선언하지 않으며, 클릭했을 때 보고 있는 탭에서만 동작합니다. 크기는 2.2 MiB입니다. Axiom.ai는 모든 HTTP/HTTPS URL을 선언하며, 크기는 37.1 MiB입니다. Magical은 clipboardRead를 포함한 13개 권한을 선언하고, 동시에 이 집합에서 인바운드 메시징을 완전히 닫는 유일한 확장입니다. Table Capture는 권한이 4개뿐이며, <all_urls>의 모든 프레임에 document_start로 주입합니다. 이는 우리 제품이 도달하는 매치 상한과 같지만 더 이른 시점입니다. 또한 요청 시 userScripts를 사용할 수 있습니다. TexAu는 가장 작고, 가장 많은 타깃을 명시합니다. 13개 서로 다른 속성에 걸친 14개 패턴입니다. 이것이 타깃을 명시하는 유일한 확장은 아닙니다. Clip to Clay는 2개(clay.com과 제3자 사이트 1개)를 선언하고, Hexomatic과 Clay for Chrome도 자체 도메인을 명시합니다. 다만 TexAu는 명시 목록이 주로 다른 사람의 사이트로 이루어진 유일한 확장입니다. 10개 중 5개는 디스크의 파일에도 접근할 수 있으며, 그중 Axiom.ai와 우리 제품은 file://를 한 번도 적지 않고도 접근합니다.

우리 제품 Thunderbit는 넓은 쪽에 있습니다. 호스트 접근과 정적 주입 모두에 <all_urls>를 쓰고, 이 집합의 다른 어떤 확장도 선언하지 않은 debugger를 포함합니다. 또한 어떤 확장 프로그램에서든 메시지를 허용하는 Chrome 기본값에 놓여 있으며, Chrome의 사용자 게이트가 활성화되면 file://에도 도달합니다.

선언은 상한이지 동작이 아니며, 이 내용만으로 오용 여부를 보이진 못합니다. 그러나 공개되어 있고, 누구나 확인할 수 있으며, 양 끝의 차이는 제품 페이지에서 보는 것보다 훨씬 큽니다.

웹 데이터 추출을 위해 Thunderbit 사용해 보기 Get Started Free

자주 묻는 질문

광범위한 권한은 확장 프로그램이 잘못된 일을 하고 있다는 뜻인가요? 그리고 권한 개수만 세면 왜 충분하지 않나요? 아닙니다. 그리고 개수만 세면 두 가지를 놓치기 때문입니다. <all_urls>는 확장 프로그램이 방문하는 모든 페이지를 읽을 수 있을 수도 있다는 뜻일 뿐, 실제로 무엇을 하는지나 데이터가 기기 밖으로 나가는지는 말해주지 않습니다. 또한 어떤 페이지에서든 데이터를 추출해야 하는 도구는 명시 도메인 목록만으로는 실제로 작동할 수 없습니다. 이번 발견은 오용이 아니라 범위의 차이입니다. 실제 동작을 확인하려면 런타임 트래픽 분석이 필요하지만, 이번 감사에서는 하지 않았습니다. 개수에 관해서는, 주입 설정은 권한이 아니므로 Table Capture는 document_start, all_frames, <all_urls>에 주입하면서도 권한은 4개만 선언합니다. 또한 optional_permissions는 설치 프롬프트에 아예 나오지 않습니다. Table Capture는 런타임에 userScripts를 요청할 수 있고, 이는 페이지 문맥에서 임의의 사용자 스크립트를 실행하게 해주며, Magical은 webRequest를 요청할 수 있습니다.

이들 중 가장 적게 요구하는 것은 무엇인가요? Agenty입니다. 권한 4개, 호스트 권한 없음, 콘텐츠 스크립트 없음. activeTab에 의존하며, 이 권한은 확장 프로그램을 클릭한 뒤 현재 탭에서만, 그리고 다른 페이지로 이동하기 전까지만 접근을 허용합니다. 그다음은 Hexomatic으로, 권한 2개에 자체 도메인으로만 제한된 콘텐츠 스크립트를 갖습니다.

file://를 명시하지 않고도 확장 프로그램이 로컬 파일에 접근할 수 있는 이유는 무엇인가요? <all_urls>file: 스킴이 포함되기 때문입니다. Listly, Magical, Table Capture는 file:// 패턴을 명시합니다. Magical은 콘텐츠 스크립트에서, Table Capture는 web_accessible_resources에서 명시합니다. Axiom.ai와 Thunderbit는 어디에도 적지 않고 와일드카드로 이를 처리합니다. http://*/*https://*/*file://를 포함하지 않습니다. Chrome은 각 확장 프로그램별 토글 뒤에 파일 접근을 상태로 두므로, 이 선언은 허용이 아니라 요청입니다.

externally_connectable는 무엇이고, 왜 생략이 허용 옵션인가요? 확장 프로그램의 background script에 메시지를 보낼 수 있는 웹 오리진 또는 확장 프로그램 ID를 지정합니다. 키가 없을 때 Chrome의 기본값은 어떤 확장 프로그램이든 연결할 수 있고, 어떤 웹페이지도 연결할 수 없다는 것입니다. 이 10개 중 7개가 이를 생략하며, Thunderbit도 그중 하나입니다. 키가 있으면 Hexomatic은 8개 명시 ID에 확장 프로그램 채널을 열고, Axiom.ai는 확장 프로그램 채널은 닫은 채 7개 웹 오리진을 열며, Magical은 양쪽을 모두 닫기 위해 둘 다 빈 목록으로 선언합니다.

Thunderbit의 자체 manifest는 무엇을 선언하나요? 호스트 접근과 정적 콘텐츠 스크립트 주입에 <all_urls>를 사용하며, document_endall_frames에서 동작합니다. 크기는 78개 파일에 걸쳐 15.9 MiB이고, 권한 배열에는 9개 문자열이 있습니다. 그중 8개는 인식되는 권한입니다: activeTab, debugger, offscreen, scripting, sidePanel, storage, tabGroups, tabs. commands는 최상위 manifest 키이며 이 배열 안에서는 효과가 없습니다. 이 집합에서 debugger를 선언한 다른 확장 프로그램은 없습니다. Thunderbit는 Chrome의 파일 접근 게이트가 활성화되면 <all_urls>를 통해 file://에도 도달하며, externally_connectable는 생략합니다. 런타임 동작은 실행하지 않았으므로, 감사에서는 확장이 실제로 어떤 CDP 또는 스크립팅 메서드를 호출하는지 주장하지 않습니다.

Ke
Ke
Thunderbit CTO | 시니어 데이터 사이언티스트 & ML 전문가 머신러닝과 데이터 과학 분야에서 약 10년에 가까운 경험을 쌓아온 Ke Shen은 컬럼비아 대학교 출신이며, 전 Walmart Labs의 시니어 데이터 사이언티스트였습니다. Python, R, Java, 통계 분야에서 동료들에게도 인정받는 깊은 전문성을 바탕으로, 복잡한 AI 알고리즘을 이론에서 실제 운영 수준의 아키텍처로 전환하는 데 필요한 실전 인사이트를 공유합니다.
Topics
Web Scraping ToolsAI Web Scraper
목차
Thunderbit · AI 웹 데이터 에이전트

1클릭 안에서 어떤 페이지든 데이터 추출

25만 명 이상의 사용자가 신뢰
무료 플랜 제공
웹페이지에서 스프레드시트까지
필요한 내용만 설명하세요 — Thunderbit의 AI 에이전트가 수집하고 Excel, Google Sheets, Airtable, Notion으로 내보냅니다. 시작은 무료입니다.
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week