Obscura: AI 에이전트를 위한 Rust 헤드리스 브라우저 — 14,000 스타 — 메모리 30MB, 로드 85ms — 2026 설치 가이드
Obscura(GitHub 스타 14,788개)는 AI 에이전트와 웹 스크래핑을 위해 설계된 Rust 헤드리스 브라우저 엔진입니다. 메모리 30MB, 페이지 로드 85ms, 안티 디텍션 내장. Puppeteer와 Playwright를 위한 즉시 교체 대안이며 Docker와 바이너리 설치를 지원합니다.
- ⭐ 14788
- 업데이트 2026-06-09
Obscura: AI 에이전트를 위한 Rust 헤드리스 브라우저 — 14,000 스타 — 메모리 30MB, 로드 85ms — 2026 설치 가이드 #
┌───────────────────────────────────────────────────┐
│ Obscura Architecture │
│ │
│ ┌─────────────────────────────────────────────┐ │
│ │ CLI / Server Interface │ │
│ │ fetch │ serve │ scrape │ eval │ dump │ │
│ └──────────────────────┬──────────────────────┘ │
│ │ │
│ ┌──────────────┼──────────────┐ │
│ ▼ ▼ ▼ │
│ ┌────────────┐ ┌────────────┐ ┌──────────┐ │
│ │ fetch() │ │ serve() │ │ scrape() │ │
│ │ Single page │ │ CDP server │ │ Parallel │ │
│ └─────┬──────┘ └─────┬──────┘ └────┬─────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌─────────────────────────────────────────────┐ │
│ │ Rust Core Engine │ │
│ │ • V8 JavaScript engine │ │
│ │ • Chrome DevTools Protocol (CDP) │ │
│ │ • Stealth mode (anti-detection) │ │
│ │ • Tracker blocking │ │
│ └─────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────┐ │
│ │ Drop-in replacement for Chrome │ │
│ │ ✅ Puppeteer ✅ Playwright │ │
│ └─────────────────────────────────────────────┘ │
└───────────────────────────────────────────────────┘
Obscura는 웹 스크래핑과 AI 에이전트 자동화를 위해 특별히 설계된, Rust로 작성된 헤드리스 브라우저 엔진입니다. 메모리 사용량 30MB, 페이지 로드 시간 85ms만으로 헤드리스 Chrome을 성능 면에서 크게 앞서면서도 안티 디텍션 기능을 기본 내장하고 있습니다.
h4ckf0r0day가 만든 Obscura는 GitHub 스타 14,788개를 얻었으며, Puppeteer와 Playwright를 사용할 때 헤드리스 Chrome의 즉시 교체 대안으로 설계되었습니다. 핵심 차별점은 이것입니다. V8을 통해 진짜 JavaScript를 실행하지만, 자원 부담은 Chrome의 일부에 불과합니다.
이 가이드는 설치, CLI 사용법, CDP 서버 설정, Puppeteer/Playwright 통합, 그리고 프로덕션 환경 배포를 다룹니다.
Obscura란? #
Obscura는 Chrome DevTools 프로토콜(CDP)을 Rust로 구현한 헤드리스 브라우저 엔진입니다. 본질적으로 경량화된 Chrome 브라우저인 헤드리스 Chrome과 달리, Obscura는 데스크톱 브라우징이 아니라 자동화를 위해 처음부터 새로 구축되었습니다.
Obscura를 돋보이게 하는 핵심 성능 지표:
| Metric | Obscura | Headless Chrome |
|---|---|---|
| 메모리 | 30 MB | 200+ MB |
| 바이너리 크기 | 70 MB | 300+ MB |
| 안티 디텍션 | 내장 | 없음 |
| 페이지 로드 | 85 ms | ~500 ms |
| 시작 | 즉시 | ~2초 |
| Puppeteer | 지원 | 지원 |
| Playwright | 지원 | 지원 |
이것은 장난감이 아닙니다 — Chrome보다 메모리 효율이 7배 높은 프로덕션급 브라우저 엔진입니다.
왜 “Obscura"인가? #
이 이름은 라틴어로 “어둠” 또는 “숨겨진"을 뜻하는 데서 따왔습니다 — 스텔스를 위해 설계된 브라우저에 더없이 잘 어울립니다. 봇 탐지, AI 에이전트 핑거프린팅, 안티 스크래핑 조치가 만연한 시대에, Obscura는 헤드리스 Chrome에는 아예 없는 안티 디텍션 기능을 기본 내장합니다.
Obscura의 작동 원리 #
Obscura는 V8 JavaScript 엔진(Chrome과 Node.js를 구동하는 바로 그 엔진)으로 JavaScript를 실행하지만, 브라우저 렌더링 파이프라인은 전부 Rust로 직접 구축되어 있습니다. 즉 Chrome 수준의 JavaScript 호환성을 얻으면서 동시에 Rust 수준의 성능을 갖춥니다.
Request (fetch / scrape / serve)
│
▼
┌─────────────────────────────┐
│ Command Parser │
│ (CLI args, CDP commands) │
└─────────────┬───────────────┘
│
▼
┌─────────────────────────────┐
│ Navigation Manager │
│ (URL resolution, redirects, │
│ proxy handling) │
└─────────────┬───────────────┘
│
▼
┌─────────────────────────────┐
│ V8 JavaScript Engine │
│ (JS execution, DOM building, │
│ CSS rendering, APIs) │
└─────────────┬───────────────┘
│
▼
┌─────────────────────────────┐
│ Output Processor │
│ (HTML dump, JSON, text, │
│ eval result, assets) │
└─────────────────────────────┘
serve 명령은 CDP 호환 서버를 시작하여 Puppeteer와 Playwright의 연결을 받습니다. fetch 명령은 일회성 페이지 작업을 수행합니다. scrape 명령은 설정 가능한 동시성으로 병렬 페이지 작업을 실행합니다.
설치 및 설정 #
바이너리 설치(권장) #
릴리스 페이지에서 최신 바이너리를 다운로드하세요.
# Linux x86_64
curl -LO https://github.com/h4ckf0r0day/obscura/releases/latest/download/obscura-x86_64-linux.tar.gz
tar xzf obscura-x86_64-linux.tar.gz
./obscura fetch https://example.com --eval "document.title"
# Linux ARM64 (aarch64)
curl -LO https://github.com/h4ckf0r0day/obscura/releases/latest/download/obscura-aarch64-linux.tar.gz
tar xzf obscura-aarch64-linux.tar.gz
# macOS Apple Silicon
curl -LO https://github.com/h4ckf0r0day/obscura/releases/latest/download/obscura-aarch64-macos.tar.gz
tar xzf obscura-aarch64-macos.tar.gz
# macOS Intel
curl -LO https://github.com/h4ckf0r0day/obscura/releases/latest/download/obscura-x86_64-macos.tar.gz
tar xzf obscura-x86_64-macos.tar.gz
# Windows
# 릴리스 페이지에서 .zip을 다운로드한 뒤 직접 압축 해제
Chrome, Node.js, 그 어떤 의존성도 필요 없습니다. 릴리스 패키지에는 obscura와 obscura-worker 두 바이너리가 포함됩니다 — 병렬 scrape 명령을 지원하려면 둘을 같은 디렉터리에 두세요.
Linux 배포판은 일반적인 LTS 서버와 호환되도록 Ubuntu 22.04(glibc 2.35+)를 타깃으로 합니다.
Arch Linux(AUR) #
yay -S obscura-browser
Docker #
docker run -d --name obscura -p 127.0.0.1:9222:9222 h4ckf0r0day/obscura
Docker 이미지는 distroless/cc로 멀티 스테이지 빌드되어 — 셸도, 패키지 관리자도 없으며 압축 후 약 57MB입니다.
소스에서 빌드 #
git clone https://github.com/h4ckf0r0day/obscura.git
cd obscura
# 표준 빌드(V8 컴파일이 필요해 첫 빌드는 약 5분 소요)
cargo build --release
# 스텔스 모드 활성화(안티 디텍션 + 트래커 차단)
cargo build --release --features stealth
Rust 1.75+가 필요합니다(rustup.rs). Cargo의 캐시 메커니즘 덕분에 이후 빌드는 빠릅니다.
빠른 시작 #
페이지 가져오기 #
# 페이지 제목 가져오기
obscura fetch https://example.com --eval "document.title"
# 모든 링크 추출
obscura fetch https://example.com --dump links
# JavaScript 렌더링 후 HTML 출력
obscura fetch https://news.ycombinator.com --dump html
# 출력을 파일에 기록
obscura fetch https://example.com --dump text --output page.txt
# 원시 응답 본문 스트리밍(바이너리 안전; 이미지, JSON, CSS에 적합)
obscura fetch https://picsum.photos/200/300 --dump original > photo.jpg
# 모든 하위 리소스 URL 나열(NDJSON 형식)
obscura fetch https://example.com --dump assets
# 프록시 서버를 통해 가져오기
obscura --proxy socks5://127.0.0.1:1080 fetch https://example.com --dump text
# 동적 콘텐츠 로드 대기
obscura fetch https://example.com --wait-until networkidle0
# 느린 페이지를 위한 내비게이션 타임아웃 설정
obscura fetch https://example.com --timeout 10
CDP 서버 시작 #
Puppeteer/Playwright 호환성을 위해:
# 표준 CDP 서버
obscura serve --port 9222
# 스텔스 모드 활성화(안티 디텍션 + 트래커 차단)
obscura serve --port 9222 --stealth
시작 후 Puppeteer나 Playwright로 연결할 수 있습니다.
// Puppeteer 연결
const puppeteer = require('puppeteer-core');
const browser = await puppeteer.connect({
browserURL: 'http://127.0.0.1:9222',
});
const page = await browser.newPage();
await page.goto('https://example.com');
console.log(await page.title());
// Playwright 연결
const { chromium } = require('@playwright/test');
const browser = await chromium.connectOverCDP('http://127.0.0.1:9222');
const context = await browser.newContext();
const page = await context.newPage();
await page.goto('https://example.com');
console.log(await page.title());
병렬 스크래핑 #
# 여러 페이지를 병렬로 스크래핑
obscura scrape url1 url2 url3 ... \
--concurrency 25 \
--eval "document.querySelector('h1').textContent"
# 스크래핑 후 결과 저장
obscura scrape site.com/page1 site.com/page2 \
--concurrency 50 \
--dump html \
--output-dir ./scraped/
scrape 명령은 obscura와 obscura-worker 두 바이너리가 같은 디렉터리에 있어야 합니다.
인기 프레임워크와의 통합 #
Puppeteer 통합 #
// Obscura를 Puppeteer 브라우저로 사용
const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
puppeteer.use(StealthPlugin());
// Obscura CDP 서버에 연결
const browser = await puppeteer.connect({
browserURL: 'http://localhost:9222',
defaultViewport: null,
});
// 기존 Puppeteer 코드는 수정 없이 그대로 작동합니다
const page = await browser.newPage();
await page.goto('https://target-site.com');
const data = await page.$$eval('.item', items =>
items.map(i => i.textContent)
);
Playwright 통합 #
# Python Playwright 연결
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.connect_over_cdp(
"http://localhost:9222"
)
page = browser.new_page()
page.goto("https://example.com")
print(page.title())
browser.close()
AI 에이전트 통합 #
# AI 에이전트 워크플로에서 Obscura 사용
import subprocess
def fetch_page_text(url):
"""Obscura로 페이지를 가져와 텍스트를 추출"""
result = subprocess.run(
["./obscura", "fetch", url, "--dump", "text"],
capture_output=True, text=True, timeout=30
)
return result.stdout
# AI 에이전트는 이 함수로 웹 콘텐츠를 가져와 분석할 수 있습니다
def analyze_page(agent, url):
content = fetch_page_text(url)
agent.prompt(f"Analyze this page content:\n{content}")
웹 스크래핑 파이프라인 #
#!/bin/bash
# Obscura를 사용한 자동화 스크래핑 파이프라인
# 대상 URL 정의
urls=(
"https://example.com/page1"
"https://example.com/page2"
"https://example.com/page3"
)
# 모든 페이지를 병렬로 스크래핑
obscura scrape "${urls[@]}" \
--concurrency 20 \
--dump html \
--output-dir ./output/ \
--timeout 15
# 결과 후처리
for f in ./output/*.html; do
echo "Processing: $(basename $f)"
./obscura fetch "$f" --dump text --output "${f%.html}.txt"
done
성능 벤치마크 #
자원 사용량 #
| Scenario | Obscura | Headless Chrome |
|---|---|---|
| 유휴 브라우저 | 30 MB RAM | 200+ MB RAM |
| 단일 페이지 로드 | 약 5 MB 추가 | 약 50 MB 추가 |
| 병렬 페이지 100개 | 총 약 300 MB | 총 약 20+ GB |
| 바이너리 크기 | 70 MB | 300+ MB |
| Docker 이미지 | 57 MB(distroless) | 500+ MB |
페이지 로드 성능 #
| Page Type | Obscura | Headless Chrome |
|---|---|---|
| 정적 HTML | 약 15 ms | 약 80 ms |
| JavaScript 렌더링 SPA | 약 85 ms | 약 500 ms |
| 대용량 대시보드 | 약 200 ms | 약 1500 ms |
| 페이지 시작 | 즉시 | 약 2초 |
메모리 확장 테스트(병렬 페이지 100개) #
# Obscura로 테스트
obscura scrape $(seq -w 1 100 | sed 's/^/https://example.com\/page_/') \
--concurrency 100 \
--dump text \
--output /dev/null
# 총 RAM: 약 280-320 MB
# 헤드리스 Chrome(Puppeteer)을 사용한 동등 테스트
# 총 RAM: 약 15-25 GB
고급 사용법 #
스텔스 모드 #
스텔스 기능은 안티 디텍션 능력을 기본 제공합니다.
# 스텔스 지원으로 빌드
cargo build --release --features stealth
# 또는 스텔스 플래그가 있는 바이너리 사용
./obscura serve --port 9222 --stealth
# 스텔스 모드에 포함되는 것:
# - Navigator 플러그인 위장
# - WebGL 렌더러 난독화
# - Permissions API 처리
# - Chrome 런타임 속성 마스킹
# - 트래커 스크립트 차단
프록시 서버 지원 #
# HTTP 프록시
obscura --proxy http://user:pass@proxy.example.com:8080 \
fetch https://example.com
# SOCKS5 프록시
obscura --proxy socks5://127.0.0.1:1080 \
fetch https://example.com
# Puppeteer와 함께 프록시 사용
const browser = await puppeteer.connect({
browserURL: 'http://localhost:9222',
defaultBrowserOptions: {
args: ['--proxy-server=http://proxy:8080']
}
});
커스텀 내비게이션 옵션 #
# 특정 요소가 나타날 때까지 대기
obscura fetch https://example.com \
--wait-selector ".content-loaded"
# 특정 네트워크 상태까지 대기
obscura fetch https://example.com \
--wait-until networkidle0
# 커스텀 뷰포트 크기
obscura fetch https://example.com \
--viewport 1920x1080
# User-Agent 재정의
obscura fetch https://example.com \
--user-agent "Mozilla/5.0 (compatible; MyBot/1.0)"
쿠키 및 세션 관리 #
# 페이지 로드 전에 쿠키 설정
obscura --cookie "session=abc123; token=xyz789" \
fetch https://private.example.com
# 세션에서 쿠키 추출
obscura fetch https://example.com \
--dump cookies --output cookies.json
대안과의 비교 #
| Feature | Obscura | Headless Chrome | Playwright Browser | Selenium |
|---|---|---|---|---|
| 메모리 사용량 | 30 MB | 200+ MB | 150+ MB | 300+ MB |
| 프로그래밍 언어 | Rust | C++ | TypeScript/JS | 다중 언어 |
| CDP 지원 | 네이티브 | 네이티브 | Chrome 경유 | Chrome 경유 |
| Puppeteer | ✅ 지원 | ✅ 지원 | ✅ 지원 | ❌ 미지원 |
| Playwright | ✅ 지원 | ✅ 지원 | ✅ 지원 | ❌ 미지원 |
| 안티 디텍션 | ✅ 내장 | ❌ 플러그인 필요 | 플러그인 필요 | ❌ 미지원 |
| 병렬 스크래핑 | ✅ 네이티브 | ❌ 부담 큼 | ❌ 부담 큼 | ❌ 미지원 |
| 설치 복잡도 | 바이너리/Docker | 대형 바이너리 | Node.js + Chrome | WebDriver |
| 시작 시간 | 즉시 | 약 2초 | 약 3초 | 약 5초 |
| 라이선스 | Apache-2.0 | BSD | Apache-2.0 | Apache-2.0 |
한계 / 솔직한 평가 #
Obscura는 강력하지만 모든 사용 사례에 완벽한 대안은 아닙니다.
프로젝트가 아직 젊음 — 스타 14,788개에도 불구하고 Obscura는 여전히 활발히 개발 중입니다. 복잡한 JavaScript 프레임워크의 엣지 케이스는 아직 완전히 다뤄지지 않았을 수 있습니다.
데스크톱 브라우징 미최적화 — 자동화를 위해 만들어졌으며 데스크톱 사용에는 적합하지 않습니다. UI 렌더링, 접근성 기능, 인쇄 출력은 Chrome과 다를 수 있습니다.
내장 프록시 로테이션 없음 — 프록시 서버 연결은 지원하지만 내장 프록시 풀이나 로테이션 기능은 없습니다. 대규모 스크래핑에는 외부 프록시 서비스가 필요합니다.
브라우저 확장 제한 — Chrome과 달리 Obscura는 브라우저 확장(AdBlock, uBlock 등)을 지원하지 않습니다. 광고 차단 로직은 스크립트에서 직접 구현해야 합니다.
Docker 이미지가 매우 단순화됨 — 57MB Docker 이미지에는 셸이나 패키지 관리자가 없습니다. 컨테이너 내부 디버깅은
obscura바이너리 내장 로그 플래그에 의존해야 합니다.Obscura Cloud는 베타 단계 — 호스팅 버전(관리형 인프라 + 주거용 프록시)은 현재 대기자/베타 단계입니다. 오픈소스 엔진은 기능 제한 없이 완전히 동작합니다.
자주 묻는 질문 #
Q: Obscura로 기존 Puppeteer 스크립트의 헤드리스 Chrome을 교체할 수 있나요?
A: 네, CDP를 통해 연결하기만 하면 됩니다(browserURL 또는 connectOverCDP). 동일한 V8 엔진을 사용하고 CDP 프로토콜을 구현하므로 브라우저 수준 동작이 Chrome과 매우 유사합니다.
Q: 스텔스 모드는 puppeteer-extra-stealth와 비교하면 어떤가요?
A: Obscura의 스텔스 모드는 사후 처리 계층으로 추가된 것이 아니라 엔진에 내장되어 있습니다. 즉 핑거프린팅 문제(navigator 속성, WebGL, 음성 콘텐츠)를 사후 패치가 아니라 브라우저 수준에서 처리하므로 — 결과가 더 일관됩니다.
Q: Obscura를 브라우저 테스트에 사용할 수 있나요?
A: 네, 대부분의 사용 사례에 적합합니다. CDP 호환성 덕분에 기존 Playwright/Puppeteer 테스트 스위트를 Obscura에서 실행할 수 있습니다. 다만 Chrome 특정 렌더링이나 확장 동작에 의존하는 일부 테스트는 조정이 필요할 수 있습니다.
Q: 공식 Docker 이미지가 있나요?
A: 네, h4ckf0r0day/obscura를 Docker Hub에서 이용할 수 있습니다. distroless/cc로 멀티 스테이지 빌드되어 매우 작습니다(압축 후 57MB).
Q: JavaScript 호환성은 어떤가요?
A: Obscura는 Chrome과 동일한 V8 엔진을 사용합니다. JavaScript 호환성은 Chrome과 거의 완전히 동일합니다 — 누락된 API도 없고 polyfill도 필요 없습니다.
Q: Obscura를 서버리스 플랫폼에서 실행할 수 있나요?
A: 의존성이 없는 단일 바이너리이므로 정적 컴파일된 Rust 바이너리를 지원하는 모든 플랫폼 — Lambda, Cloud Functions, Fly.io 등 — 에서 실행할 수 있습니다.
결론 #
Obscura는 헤드리스 브라우저 기술의 중대한 진전을 보여줍니다. 메모리 30MB, 페이지 로드 85ms, 안티 디텍션 내장에 힘입어, 웹 스크래핑과 AI 에이전트 자동화를 수년간 괴롭혀 온 근본적 문제를 해결합니다. Chrome은 대규모 동시 브라우저 작업에는 너무 무겁다는 문제 말입니다.
웹을 탐색하고, 콘텐츠를 스크래핑하고, JavaScript 중심 사이트와 상호작용해야 하는 AI 에이전트에게 — Obscura는 헤드리스 Chrome으로는 도저히 따라갈 수 없는 성능 여유를 제공합니다. Puppeteer와 Playwright 호환성 덕분에 기존 스크립트는 수정 없이 그대로 작동합니다.
곧 출시될 Obscura Cloud 호스팅 서비스(관리형 인프라 + 주거용 프록시)는 대규모 배포를 한층 쉽게 만들어 줄 것이며, 오픈소스 엔진은 기능 제한 없이 Apache-2.0 라이선스를 유지합니다.



Obscura 써보기: github.com/h4ckf0r0day/obscura
관련 글:
- Codegraph — AI 에이전트를 위한 사전 인덱싱된 코드 지식 그래프
- MarkItDown — 모든 파일을 Markdown으로 변환
출처 및 더 읽을거리:
- GitHub 저장소: https://github.com/h4ckf0r0day/obscura
- Docker Hub: https://hub.docker.com/r/h4ckf0r0day/obscura
- 릴리스 페이지: https://github.com/h4ckf0r0day/obscura/releases
- CDP 문서: https://chromedevtools.github.io/devtools-protocol/
- V8 엔진: https://v8.dev
더 많은 AI 도구 심층 분석을 원하시면 커뮤니티에 참여하세요: t.me/DIBI8_Group
면책 조항: 본문은 정보 제공 목적으로만 작성되었습니다. 프로덕션 환경에서 서드파티 소프트웨어를 실행하기 전에 반드시 소스 코드를 검토하세요. 제휴 고지: 위 링크 중 일부는 제휴 코드를 포함할 수 있습니다. 이를 통해 수수료를 받을 수 있으며, 귀하에게 추가 비용은 발생하지 않습니다.
💬 댓글 토론