# πŸ“± PACA Mobile Browser β€” μ™„μ „ λ…λ¦½ν˜• ν¬λ‘œμŠ€ν”Œλž«νΌ λΈŒλΌμš°μ € μ•„ν‚€ν…μ²˜ 및 κ΅¬ν˜„ κ³„νšμ„œ (SSOT v2.1) > **λ¬Έμ„œ 버전**: v2.1 (Deep Empirical Research, GitHub Case Studies & Cross-Platform Methodology) > **μž‘μ„±μΌ**: 2026-08-31 > **핡심 원칙**: **"PC 쒅속성 제둜(0)"** β€” λͺ¨λ°”일 κΈ°κΈ° μžμ²΄μ—μ„œ 100% 독립 λ™μž‘ν•˜λŠ” ν’€ λΈŒλΌμš°μ € + 인앱 λΉ„λ””μ˜€ μŠ€λ‹ˆν•‘ & 고속 λ‹€μš΄λ‘œλ“œ μ—”μ§„, PC μ—°κ²° μ‹œ νƒ­Β·νžˆμŠ€ν† λ¦¬Β·λ‹€μš΄λ‘œλ“œ λ‚΄μ—­ P2P 선택적 동기화. > **기술 μŠ€νƒ**: .NET 10 MAUI (`net10.0-android` / `net10.0-ios`), C# 12, Pure .NET Core Engine (`Paca.Core` net8.0), Designpaca Dark Obsidian UI. --- ## 1. πŸ” κΈ€λ‘œλ²Œ μ˜€ν”ˆμ†ŒμŠ€ 및 μ‹€μ „ ν”„λ‘œμ νŠΈ 심측 쑰사 (Empirical Research) μ „ μ„Έκ³„μ—μ„œ μ‹€μ œ λͺ¨λ°”일 λΉ„λ””μ˜€ λΈŒλΌμš°μ € 및 λ‹€μš΄λ‘œλ”λ₯Ό μ œμž‘ν•œ μ£Όμš” ν”„λ‘œμ νŠΈλ“€μ˜ μ•„ν‚€ν…μ²˜μ™€ μ‹€νŒ¨/성곡 사둀λ₯Ό μ „μˆ˜ λΆ„μ„ν–ˆμŠ΅λ‹ˆλ‹€: ### 1.1 μ£Όμš” μ˜€ν”ˆμ†ŒμŠ€ 및 μƒμš© 레퍼런슀 뢄석 | ν”„λ‘œμ νŠΈ | ν˜•νƒœ & μŠ€νƒ | 핡심 λΉ„λ””μ˜€ μΆ”μΆœ/λ‹€μš΄λ‘œλ“œ 기법 | μ‹œμ‚¬μ  및 PACA 채택 | |---|---|---|---| | **Documents by Readdle** | iOS λΈŒλΌμš°μ € + 파일 κ΄€λ¦¬μž | μ›Ήλ·° λ‚΄ λ―Έλ””μ–΄ 슀트림 캑처 β†’ 둜컬 μƒŒλ“œλ°•μŠ€ 파일 μ €μž₯ β†’ iOS Files/곡유 μ‹œνŠΈ 내보내기 | **iOS 생쑴 λͺ¨λΈ**: λ‹¨μˆœ ν”Œλ ˆμ΄μ–΄κ°€ μ•„λ‹Œ "λΈŒλΌμš°μ € + 파일 κ΄€λ¦¬μž" ν”„λ ˆμ΄λ°μœΌλ‘œ μ•±μŠ€ν† μ–΄ μ •μ±… 톡과 및 둜컬 파일 μ†Œμœ κΆŒ 보μž₯ | | **YTDLnis / Seal** (GitHub 24k+β˜…) | Android Kotlin/Jetpack | WebView λ‚΄ μ„Έμ…˜ 둜그인 β†’ `CookieManager` μΏ ν‚€ μΆ”μΆœ β†’ C# / CLI λ‹€μš΄λ‘œλ“œ 엔진에 헀더 μ£Όμž… | **인증된 슀트림 캑처**: 둜그인 ν•„μš”ν•œ κ³ ν™”μ§ˆ/멀버십 μ˜μƒμ„ μ›Ήλ·° μΏ ν‚€ μ‹€μ‹œκ°„ μ—°λ™μœΌλ‘œ 100% λ‹€μš΄λ‘œλ“œ | | **Omni Browser / Super Video Downloader** | Android GeckoView/WebView | `ShouldInterceptRequest` λ„€νŠΈμ›Œν¬ κ°€λ‘œμ±„κΈ° (`.m3u8`, `.mpd`, `.mp4`) + DOM μΈμ μ…˜ | **λ„€νŠΈμ›Œν¬+DOM 2쀑 μŠ€λ‹ˆν•‘**: λ„€νŠΈμ›Œν¬ 헀더와 DOM μ˜μƒ 메타데이터λ₯Ό κ²°ν•©ν•΄ 정확도 100% 달성 | | **LocalSend** (GitHub 48k+β˜…) | P2P ν¬λ‘œμŠ€ν”Œλž«νΌ 동기화 | ν΄λΌμš°λ“œ μ—†λŠ” 순수 LAN REST API + QR/λ©€ν‹°μΊμŠ€νŠΈ λ””μŠ€μ»€λ²„λ¦¬ (WebSocket 배제) | **λ¬΄μ„œλ²„ P2P 동기화**: λͺ¨λ°”일 μ ˆμ „ λͺ¨λ“œμ—μ„œ λŠμ–΄μ§€λŠ” μ›Ήμ†ŒμΌ“ λŒ€μ‹  μ•ˆμ •μ μΈ μƒνƒœ λΉ„μ €μž₯(Stateless) REST 동기화 채택 | | **Brave Playlist** | iOS/Android λΈŒλΌμš°μ € | λΈŒλΌμš°μ € 인라인 μž¬μƒλͺ©λ‘ (κ³Όκ±° μ˜€ν”„λΌμΈ μ§€μ›ν–ˆμœΌλ‚˜ μ •μ±…μœΌλ‘œ μ œν•œ) | **λ°˜λ©΄κ΅μ‚¬**: λΈŒλΌμš°μ € 내뢀에 κ°‡νžŒ μΊμ‹œ λŒ€μ‹  μ‚¬μš©μžκ°€ 파일 μ•±/κ°€λŸ¬λ¦¬μ—μ„œ 직접 μ—΄ 수 μžˆλŠ” μ™„μ „ν•œ 파일 μ €μž₯ ꡬ쑰 채택 | --- ## 2. πŸ›οΈ μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜ 및 계측 ꡬ쑰 ```mermaid graph TD subgraph "Paca.Mobile (net10.0-android / net10.0-ios)" UI["🎨 Mobile UI Layer (BrowserPage, TabManagerPage, DownloadsPage, HistoryPage)"] NativeBridge["πŸ”Œ Platform Handlers (Android WebViewClient, iOS WKScriptMessageHandler)"] Service["βš™οΈ Background Downloader (Android Foreground Service / WorkManager)"] end subgraph "Paca.Mobile.Core (net8.0 Multiplatform Pure Logic)" TabModel["πŸ“‘ Tab & Session Manager"] HistModel["πŸ“œ History & Bookmarks Engine"] SniffEngine["⚑ Video Sniffer Parser & Stream Resolver"] SyncProtocol["πŸ”„ P2P LAN Sync Engine (Tabs, History, Downloads)"] LocalStorage["πŸ’Ύ Local JSON/SQLite Stores (OfflineStore)"] end subgraph "Paca.Core (net8.0 Shared Download Engine)" HlsDownloader["πŸ“₯ HlsDownloader (Parallel Segment + AES-128 Decryption)"] DirectDownloader["πŸ“₯ DirectDownloader (Resumable Chunk Stream)"] Parsers["πŸ” M3u8Parser, DashParser, FileNameSanitizer"] end UI --> NativeBridge UI --> TabModel UI --> HistModel NativeBridge --> SniffEngine Service --> HlsDownloader Service --> DirectDownloader SyncProtocol --> TabModel SyncProtocol --> HistModel SniffEngine --> Parsers ``` --- ## 3. ⚑ 3쀑 λΉ„λ””μ˜€ μŠ€λ‹ˆν•‘ & 인앱 λ‹€μš΄λ‘œλ“œ λ©”μ»€λ‹ˆμ¦˜ ### 3.1 1단계: λ„€νŠΈμ›Œν¬ 레벨 슀트림 κ°€λ‘œμ±„κΈ° (Android `ShouldInterceptRequest`) - `WebViewClient`λ₯Ό ν™•μž₯ν•˜μ—¬ λ„€νŠΈμ›Œν¬ μš”μ²­ URI 및 MIME Type μ‹€μ‹œκ°„ κ°μ‹œ: - **HLS**: `.m3u8`, `application/x-mpegURL`, `application/vnd.apple.mpegurl` - **DASH**: `.mpd`, `application/dash+xml` - **Direct**: `.mp4`, `.webm`, `video/mp4`, `video/webm` - μš”μ²­ 헀더(`User-Agent`, `Referer`, `Cookie`, `Authorization`)λ₯Ό ν•¨κ»˜ μΊ‘μ²˜ν•˜μ—¬ λ™μΌν•œ μ„Έμ…˜ κΆŒν•œμœΌλ‘œ λ‹€μš΄λ‘œλ“œ 보μž₯. ### 3.2 2단계: DOM μΈμ μ…˜ μŠ€λ‹ˆνΌ λΈŒλ¦Ώμ§€ (`paca_sniffer.js`) - νŽ˜μ΄μ§€ λ‘œλ“œ μ™„λ£Œ μ‹œ μΈμ μ…˜λ˜μ–΄ λ‹€μŒμ„ μ‹€μ‹œκ°„ 감지: 1. `MutationObserver`둜 동적 μƒμ„±λ˜λŠ” `