# task: 브라우저 전략 이분화 — 문서화 및 코드화 (Lightpanda vs Chrome)

## 배경
현재 시스템에 두 가지 브라우저 백엔드가 존재:
1. **Lightpanda**: 127.0.0.1:9333, systemd 서비스, 텍스트 크롤링 전용
2. **Chrome**: 원격 100.116.204.95:9222 (제이회장님 윈도우) 또는 로컬 headless

공통 레이어는 **Playwright**. 현재는 lightpanda_crawler.py에서 fallback으로만 Chrome을 사용 중.

## 요구사항

### 브라우저 선택 전략 (이분화)
| 조건 | 브라우저 | 이유 |
|------|---------|------|
| 대량 자동화 (뉴스 크롤링, 텍스트 추출) | Lightpanda | 11x 빠름, RAM 1/9 |
| 병렬 작업 (여러 URL 동시) | Lightpanda (순차) 또는 Chrome (병렬) | Lightpanda는 concurrency=1 제한 |
| 리소스 절감 (서버 부하 최소화) | Lightpanda | 111MB vs 1GB+ |
| 로그인 필요 (Firebase Console, Meta, Google Ads 등) | Chrome | 쿠키/세션 유지 |
| 호환성 중요 (SPA, React, 복잡한 JS) | Chrome | 완전한 렌더링 엔진 |
| 사람처럼 보여야 함 (봇 감지 우회) | Chrome | User-Agent, 지문 등 |
| 스크린샷/PDF 캡처 | Chrome | Lightpanda 렌더링 불가 |

### 1. 문서화
- 위 전략을 `/home/jay/workspace/memory/specs/browser-strategy.md`에 정리
- 각 팀이 브라우저 작업 시 참조할 수 있는 의사결정 트리 포함
- 기존 `tools/lightpanda_crawler.py`의 사용법 + Chrome Playwright 사용법 함께 정리

### 2. 코드화 — 브라우저 선택 라우터
- `tools/browser_router.py` 생성 (또는 기존 파일 확장)
- 함수: `get_browser(purpose: str) -> BrowserContext` 또는 유사 인터페이스
- purpose 예시: "crawl", "login", "screenshot", "spa", "bulk"
- purpose에 따라 Lightpanda 또는 Chrome Playwright 자동 선택
- 기존 `lightpanda_crawler.py`의 Chrome fallback 로직과 통합/호환

### 3. 기존 코드 연동 확인
- `scripts/browser.py` (원격 Chrome CDP) 와의 관계 정리
- `lightpanda_crawler.py`의 fallback 로직과 중복 제거
- ThreadAuto 등 기존 크롤링 코드에서 활용 가능한 형태

### 4. 테스트
- browser_router.py에 대한 단위 테스트 (mock 기반)
- Lightpanda 서비스 상태 확인 → 가용 시 Lightpanda, 불가 시 Chrome 선택 확인

## 건드리지 말 것
- lightpanda systemd 서비스 설정 (이미 정상 작동 중)
- scripts/browser.py (원격 Chrome 전용, 독립 유지)

## 참고 파일
- /home/jay/workspace/tools/lightpanda_crawler.py (기존 래퍼)
- /home/jay/workspace/skills/lightpanda-crawl/SKILL.md (스킬 문서)
- /home/jay/workspace/scripts/browser.py (원격 Chrome CDP)
- /home/jay/workspace/memory/tasks/task-1019.1.md (Lightpanda 세팅 기록)
