Advanced Configuration - JinsongRoh/pydoll-mcp GitHub Wiki

โš™๏ธ ๊ณ ๊ธ‰ ์„ค์ • - ์„ฑ๋Šฅ ์ตœ์ ํ™” ๋ฐ ์Šคํ…”์Šค ์„ค์ •

PyDoll MCP Server๋Š” ๋‹ค์–‘ํ•œ ๊ณ ๊ธ‰ ์„ค์ •์„ ํ†ตํ•ด ์„ฑ๋Šฅ ์ตœ์ ํ™”์™€ ์Šคํ…”์Šค ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด ํŽ˜์ด์ง€์—์„œ๋Š” ์ „๋ฌธ์ ์ธ ๋ธŒ๋ผ์šฐ์ € ์ž๋™ํ™”๋ฅผ ์œ„ํ•œ ๊ณ ๊ธ‰ ์„ค์ • ๋ฐฉ๋ฒ•์„ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“‹ ๋ชฉ์ฐจ

  1. [ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •](#ํ™˜๊ฒฝ-๋ณ€์ˆ˜-์„ค์ •)
  2. [๋ธŒ๋ผ์šฐ์ € ์„ฑ๋Šฅ ์ตœ์ ํ™”](#๋ธŒ๋ผ์šฐ์ €-์„ฑ๋Šฅ-์ตœ์ ํ™”)
  3. [์Šคํ…”์Šค ๋ชจ๋“œ ์„ค์ •](#์Šคํ…”์Šค-๋ชจ๋“œ-์„ค์ •)
  4. [๋„คํŠธ์›Œํฌ ์ตœ์ ํ™”](#๋„คํŠธ์›Œํฌ-์ตœ์ ํ™”)
  5. [์บก์ฐจ ์šฐํšŒ ์„ค์ •](#์บก์ฐจ-์šฐํšŒ-์„ค์ •)
  6. [๋ฉ”๋ชจ๋ฆฌ ๋ฐ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ](#๋ฉ”๋ชจ๋ฆฌ-๋ฐ-๋ฆฌ์†Œ์Šค-๊ด€๋ฆฌ)
  7. [๋””๋ฒ„๊น… ๋ฐ ๋กœ๊น…](#๋””๋ฒ„๊น…-๋ฐ-๋กœ๊น…)
  8. [๋ณด์•ˆ ๋ฐ ๊ฐœ์ธ์ •๋ณด ๋ณดํ˜ธ](#๋ณด์•ˆ-๋ฐ-๊ฐœ์ธ์ •๋ณด-๋ณดํ˜ธ)

๐Ÿ”ง ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •

๊ธฐ๋ณธ ํ™˜๊ฒฝ ๋ณ€์ˆ˜

Claude Desktop ์„ค์ •์—์„œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„ ๋™์ž‘์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

{
  "mcpServers": {
    "pydoll": {
      "command": "python",
      "args": ["-m", "pydoll_mcp.server"],
      "env": {
        "PYDOLL_LOG_LEVEL": "INFO",
        "PYDOLL_DEBUG": "false",
        "PYDOLL_HEADLESS": "true",
        "PYDOLL_STEALTH_MODE": "true",
        "PYDOLL_CAPTCHA_BYPASS": "true",
        "PYTHONIOENCODING": "utf-8"
      }
    }
  }
}

๊ณ ๊ธ‰ ํ™˜๊ฒฝ ๋ณ€์ˆ˜

๋” ์„ธ๋ฐ€ํ•œ ์ œ์–ด๋ฅผ ์œ„ํ•œ ๊ณ ๊ธ‰ ํ™˜๊ฒฝ ๋ณ€์ˆ˜:

{
  "env": {
    "PYDOLL_MAX_BROWSERS": "3",
    "PYDOLL_MAX_TABS_PER_BROWSER": "5",
    "PYDOLL_TIMEOUT_DEFAULT": "30",
    "PYDOLL_RETRY_ATTEMPTS": "3",
    "PYDOLL_CACHE_ENABLED": "true",
    "PYDOLL_PERFORMANCE_MODE": "optimized",
    "PYDOLL_MEMORY_LIMIT": "2048",
    "PYDOLL_THREAD_POOL_SIZE": "10"
  }
}

๐Ÿš€ ๋ธŒ๋ผ์šฐ์ € ์„ฑ๋Šฅ ์ตœ์ ํ™”

์„ฑ๋Šฅ ์ตœ์ ํ™” ์„ค์ •

๋ธŒ๋ผ์šฐ์ € ์‹œ์ž‘ ์‹œ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•œ ์„ค์ •:

# ๋ธŒ๋ผ์šฐ์ € ์‹œ์ž‘ ์‹œ ์„ฑ๋Šฅ ์ตœ์ ํ™” ์˜ต์…˜
performance_config = {
    "headless": True,                    # ํ—ค๋“œ๋ฆฌ์Šค ๋ชจ๋“œ ํ™œ์„ฑํ™”
    "disable_images": True,              # ์ด๋ฏธ์ง€ ๋กœ๋”ฉ ๋น„ํ™œ์„ฑํ™”
    "disable_css": False,                # CSS๋Š” ์œ ์ง€ (๋ ˆ์ด์•„์›ƒ ์œ ์ง€)
    "disable_javascript": False,         # JavaScript ์œ ์ง€
    "disable_plugins": True,             # ํ”Œ๋Ÿฌ๊ทธ์ธ ๋น„ํ™œ์„ฑํ™”
    "disable_extensions": True,          # ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ ๋น„ํ™œ์„ฑํ™”
    "disable_dev_shm_usage": True,       # /dev/shm ์‚ฌ์šฉ ๋น„ํ™œ์„ฑํ™”
    "disable_gpu": True,                 # GPU ๊ฐ€์† ๋น„ํ™œ์„ฑํ™”
    "no_sandbox": True,                  # ์ƒŒ๋“œ๋ฐ•์Šค ๋น„ํ™œ์„ฑํ™” (Docker์šฉ)
    "single_process": False,             # ๋‹จ์ผ ํ”„๋กœ์„ธ์Šค ๋ชจ๋“œ
    "disable_background_timer_throttling": True,
    "disable_renderer_backgrounding": True,
    "disable_backgrounding_occluded_windows": True,
    "disable_features": [
        "VizDisplayCompositor",
        "TranslateUI",
        "BlinkGenPropertyTrees"
    ]
}

๋ฉ”๋ชจ๋ฆฌ ์ตœ์ ํ™”

๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ค„์ด๊ธฐ ์œ„ํ•œ ์„ค์ •:

memory_config = {
    "max_old_space_size": "2048",        # V8 ์—”์ง„ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ
    "memory_pressure_off": True,        # ๋ฉ”๋ชจ๋ฆฌ ์••๋ฐ• ์•Œ๋ฆผ ๋น„ํ™œ์„ฑํ™”
    "max_unused_heap_memory": "64",     # ๋ฏธ์‚ฌ์šฉ ํž™ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ
    "gc_interval": "100",               # ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ๊ฐ„๊ฒฉ
    "disable_background_networking": True,
    "disable_background_timer_throttling": True,
    "disable_ipc_flooding_protection": True
}

๋ Œ๋”๋ง ์ตœ์ ํ™”

๋ Œ๋”๋ง ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•œ ์„ค์ •:

render_config = {
    "disable_2d_canvas_clip_aa": True,
    "disable_2d_canvas_image_chromium": True,
    "disable_accelerated_2d_canvas": True,
    "disable_accelerated_jpeg_decoding": True,
    "disable_accelerated_mjpeg_decode": True,
    "disable_accelerated_video_decode": True,
    "disable_gpu_video_decode": True,
    "use_gl": "swiftshader",            # ์†Œํ”„ํŠธ์›จ์–ด ๋ Œ๋”๋ง ์‚ฌ์šฉ
    "disable_software_rasterizer": False
}

๐Ÿ•ต๏ธ ์Šคํ…”์Šค ๋ชจ๋“œ ์„ค์ •

๊ธฐ๋ณธ ์Šคํ…”์Šค ์„ค์ •

๋ด‡ ํƒ์ง€๋ฅผ ์šฐํšŒํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ณธ ์Šคํ…”์Šค ์„ค์ •:

stealth_config = {
    "user_agent_randomization": True,    # ์‚ฌ์šฉ์ž ์—์ด์ „ํŠธ ๋ฌด์ž‘์œ„ํ™”
    "viewport_randomization": True,      # ๋ทฐํฌํŠธ ํฌ๊ธฐ ๋ฌด์ž‘์œ„ํ™”
    "timezone_spoofing": True,          # ์‹œ๊ฐ„๋Œ€ ์Šคํ‘ธํ•‘
    "language_spoofing": True,          # ์–ธ์–ด ์„ค์ • ์Šคํ‘ธํ•‘
    "webrtc_spoofing": True,            # WebRTC IP ์ˆจ๊ธฐ๊ธฐ
    "canvas_fingerprint_randomization": True,
    "webgl_fingerprint_randomization": True,
    "audio_fingerprint_randomization": True,
    "font_fingerprint_randomization": True,
    "screen_resolution_spoofing": True,
    "hardware_concurrency_spoofing": True,
    "device_memory_spoofing": True
}

๊ณ ๊ธ‰ ์Šคํ…”์Šค ๊ธฐ๋Šฅ

๋” ์ •๊ตํ•œ ํƒ์ง€ ์šฐํšŒ๋ฅผ ์œ„ํ•œ ๊ณ ๊ธ‰ ์„ค์ •:

advanced_stealth_config = {
    "mouse_movement_humanization": True,  # ์ธ๊ฐ„์ ์ธ ๋งˆ์šฐ์Šค ์›€์ง์ž„
    "typing_pattern_humanization": True,  # ์ธ๊ฐ„์ ์ธ ํƒ€์ดํ•‘ ํŒจํ„ด
    "scroll_behavior_humanization": True, # ์ธ๊ฐ„์ ์ธ ์Šคํฌ๋กค ๋™์ž‘
    "click_delay_randomization": True,    # ํด๋ฆญ ์ง€์—ฐ ๋ฌด์ž‘์œ„ํ™”
    "navigation_delay_randomization": True,
    "request_header_randomization": True,
    "tls_fingerprint_randomization": True,
    "browser_fingerprint_rotation": True,
    "proxy_rotation": True,              # ํ”„๋ก์‹œ ์ˆœํ™˜ ์‚ฌ์šฉ
    "dns_over_https": True,             # DNS over HTTPS ์‚ฌ์šฉ
    "webdriver_property_removal": True,  # WebDriver ์†์„ฑ ์ œ๊ฑฐ
    "chrome_runtime_removal": True,     # Chrome ๋Ÿฐํƒ€์ž„ ํ”์  ์ œ๊ฑฐ
    "notification_permission_spoofing": True,
    "geolocation_spoofing": True,
    "battery_api_spoofing": True,
    "media_device_spoofing": True
}

๋ธŒ๋ผ์šฐ์ € ํ”„๋กœํŒŒ์ผ ๋ฌด์ž‘์œ„ํ™”

๋ธŒ๋ผ์šฐ์ € ํ”„๋กœํŒŒ์ผ์„ ๋ฌด์ž‘์œ„ํ™”ํ•˜์—ฌ ํƒ์ง€๋ฅผ ์–ด๋ ต๊ฒŒ ๋งŒ๋“œ๋Š” ์„ค์ •:

profile_randomization = {
    "user_agents": [
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
        "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
        "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
    ],
    "screen_resolutions": [
        {"width": 1920, "height": 1080},
        {"width": 1366, "height": 768},
        {"width": 1440, "height": 900},
        {"width": 1536, "height": 864}
    ],
    "languages": ["en-US", "en-GB", "ko-KR", "ja-JP"],
    "timezones": [
        "America/New_York",
        "Europe/London", 
        "Asia/Tokyo",
        "Asia/Seoul"
    ]
}

๐ŸŒ ๋„คํŠธ์›Œํฌ ์ตœ์ ํ™”

๋„คํŠธ์›Œํฌ ์„ค์ •

๋„คํŠธ์›Œํฌ ์„ฑ๋Šฅ๊ณผ ์•ˆ์ •์„ฑ์„ ์œ„ํ•œ ์„ค์ •:

network_config = {
    "timeout": 30,                      # ๊ธฐ๋ณธ ํƒ€์ž„์•„์›ƒ (์ดˆ)
    "retry_attempts": 3,                # ์žฌ์‹œ๋„ ํšŸ์ˆ˜
    "retry_delay": 1,                   # ์žฌ์‹œ๋„ ๊ฐ„๊ฒฉ (์ดˆ)
    "connection_pool_size": 100,        # ์—ฐ๊ฒฐ ํ’€ ํฌ๊ธฐ
    "max_connections_per_host": 10,     # ํ˜ธ์ŠคํŠธ๋‹น ์ตœ๋Œ€ ์—ฐ๊ฒฐ
    "enable_http2": True,               # HTTP/2 ํ™œ์„ฑํ™”
    "enable_compression": True,         # ์••์ถ• ํ™œ์„ฑํ™”
    "tcp_nodelay": True,                # TCP ์ง€์—ฐ ์—†์Œ
    "tcp_keepalive": True,              # TCP ์—ฐ๊ฒฐ ์œ ์ง€
    "dns_cache_timeout": 300,           # DNS ์บ์‹œ ํƒ€์ž„์•„์›ƒ
    "request_cache_enabled": True,      # ์š”์ฒญ ์บ์‹œ ํ™œ์„ฑํ™”
    "response_cache_enabled": True,     # ์‘๋‹ต ์บ์‹œ ํ™œ์„ฑํ™”
    "cache_max_size": "100MB",          # ์บ์‹œ ์ตœ๋Œ€ ํฌ๊ธฐ
    "bandwidth_throttling": False,      # ๋Œ€์—ญํญ ์ œํ•œ
    "latency_simulation": False         # ์ง€์—ฐ ์‹œ๋ฎฌ๋ ˆ์ด์…˜
}

ํ”„๋ก์‹œ ์„ค์ •

ํ”„๋ก์‹œ ์„œ๋ฒ„๋ฅผ ํ†ตํ•œ ๋„คํŠธ์›Œํฌ ๋ผ์šฐํŒ…:

proxy_config = {
    "enabled": True,
    "type": "socks5",                   # http, socks4, socks5
    "host": "127.0.0.1",
    "port": 9050,
    "username": None,
    "password": None,
    "rotation_enabled": True,           # ํ”„๋ก์‹œ ์ˆœํ™˜ ์‚ฌ์šฉ
    "rotation_interval": 300,           # ์ˆœํ™˜ ๊ฐ„๊ฒฉ (์ดˆ)
    "proxy_list": [
        {"host": "proxy1.example.com", "port": 8080},
        {"host": "proxy2.example.com", "port": 8080}
    ],
    "bypass_list": [                    # ํ”„๋ก์‹œ ์šฐํšŒ ๋ชฉ๋ก
        "localhost",
        "127.0.0.1",
        "*.local"
    ]
}

๐Ÿ” ์บก์ฐจ ์šฐํšŒ ์„ค์ •

Cloudflare ์šฐํšŒ ์„ค์ •

Cloudflare Turnstile ์บก์ฐจ ์šฐํšŒ๋ฅผ ์œ„ํ•œ ์„ค์ •:

cloudflare_config = {
    "enabled": True,
    "auto_solve": True,                 # ์ž๋™ ํ•ด๊ฒฐ ํ™œ์„ฑํ™”
    "solve_timeout": 30,                # ํ•ด๊ฒฐ ํƒ€์ž„์•„์›ƒ (์ดˆ)
    "retry_attempts": 3,                # ์žฌ์‹œ๋„ ํšŸ์ˆ˜
    "human_behavior_simulation": True,  # ์ธ๊ฐ„ ํ–‰๋™ ์‹œ๋ฎฌ๋ ˆ์ด์…˜
    "mouse_movement_realistic": True,   # ํ˜„์‹ค์ ์ธ ๋งˆ์šฐ์Šค ์›€์ง์ž„
    "click_timing_randomization": True, # ํด๋ฆญ ํƒ€์ด๋ฐ ๋ฌด์ž‘์œ„ํ™”
    "challenge_detection_delay": 2,     # ์ฑŒ๋ฆฐ์ง€ ๊ฐ์ง€ ์ง€์—ฐ (์ดˆ)
    "success_verification_delay": 3,    # ์„ฑ๊ณต ํ™•์ธ ์ง€์—ฐ (์ดˆ)
    "failure_retry_delay": 5,           # ์‹คํŒจ ์‹œ ์žฌ์‹œ๋„ ์ง€์—ฐ (์ดˆ)
    "debug_mode": False,                # ๋””๋ฒ„๊ทธ ๋ชจ๋“œ
    "screenshot_on_failure": True       # ์‹คํŒจ ์‹œ ์Šคํฌ๋ฆฐ์ƒท ์ €์žฅ
}

reCAPTCHA ์šฐํšŒ ์„ค์ •

reCAPTCHA v3 ์šฐํšŒ๋ฅผ ์œ„ํ•œ ์„ค์ •:

recaptcha_config = {
    "enabled": True,
    "v3_enabled": True,                 # reCAPTCHA v3 ์ง€์›
    "v2_enabled": True,                 # reCAPTCHA v2 ์ง€์›
    "invisible_enabled": True,          # ๋น„๊ฐ€์‹œ์  reCAPTCHA ์ง€์›
    "solve_timeout": 45,                # ํ•ด๊ฒฐ ํƒ€์ž„์•„์›ƒ (์ดˆ)
    "score_threshold": 0.5,             # v3 ์ ์ˆ˜ ์ž„๊ณ„๊ฐ’
    "audio_challenge_enabled": True,    # ์˜ค๋””์˜ค ์ฑŒ๋ฆฐ์ง€ ์ง€์›
    "image_challenge_enabled": True,    # ์ด๋ฏธ์ง€ ์ฑŒ๋ฆฐ์ง€ ์ง€์›
    "ai_solver_enabled": True,          # AI ํ•ด๊ฒฐ์‚ฌ ์‚ฌ์šฉ
    "manual_fallback": False,           # ์ˆ˜๋™ ํ•ด๊ฒฐ ๋Œ€์ฒด
    "challenge_retry_limit": 5,         # ์ฑŒ๋ฆฐ์ง€ ์žฌ์‹œ๋„ ์ œํ•œ
    "success_rate_tracking": True,      # ์„ฑ๊ณต๋ฅ  ์ถ”์ 
    "performance_monitoring": True      # ์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง
}

๐Ÿ’พ ๋ฉ”๋ชจ๋ฆฌ ๋ฐ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ

๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ์„ค์ •

๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์„ค์ •:

memory_management = {
    "max_memory_usage": "2048MB",       # ์ตœ๋Œ€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰
    "memory_cleanup_interval": 300,     # ๋ฉ”๋ชจ๋ฆฌ ์ •๋ฆฌ ๊ฐ„๊ฒฉ (์ดˆ)
    "tab_memory_limit": "512MB",        # ํƒญ๋‹น ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ
    "cache_memory_limit": "256MB",      # ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ
    "garbage_collection_aggressive": True,
    "memory_pressure_handling": True,
    "oom_protection": True,             # Out of Memory ๋ณดํ˜ธ
    "swap_usage_limit": "1024MB",       # ์Šค์™‘ ์‚ฌ์šฉ๋Ÿ‰ ์ œํ•œ
    "memory_leak_detection": True,      # ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ๊ฐ์ง€
    "resource_monitoring": True,        # ๋ฆฌ์†Œ์Šค ๋ชจ๋‹ˆํ„ฐ๋ง
    "auto_cleanup_enabled": True,       # ์ž๋™ ์ •๋ฆฌ ํ™œ์„ฑํ™”
    "cleanup_threshold": 80             # ์ •๋ฆฌ ์ž„๊ณ„๊ฐ’ (%)
}

๋ฆฌ์†Œ์Šค ์ตœ์ ํ™”

์‹œ์Šคํ…œ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•œ ์„ค์ •:

resource_optimization = {
    "cpu_usage_limit": 80,              # CPU ์‚ฌ์šฉ๋Ÿ‰ ์ œํ•œ (%)
    "thread_pool_size": 10,             # ์Šค๋ ˆ๋“œ ํ’€ ํฌ๊ธฐ
    "process_priority": "normal",       # ํ”„๋กœ์„ธ์Šค ์šฐ์„ ์ˆœ์œ„
    "disk_cache_size": "1GB",           # ๋””์Šคํฌ ์บ์‹œ ํฌ๊ธฐ
    "temp_file_cleanup": True,          # ์ž„์‹œ ํŒŒ์ผ ์ •๋ฆฌ
    "log_rotation_enabled": True,       # ๋กœ๊ทธ ์ˆœํ™˜ ํ™œ์„ฑํ™”
    "log_max_size": "100MB",            # ๋กœ๊ทธ ์ตœ๋Œ€ ํฌ๊ธฐ
    "log_retention_days": 7,            # ๋กœ๊ทธ ๋ณด์กด ๊ธฐ๊ฐ„
    "resource_monitoring_interval": 60, # ๋ฆฌ์†Œ์Šค ๋ชจ๋‹ˆํ„ฐ๋ง ๊ฐ„๊ฒฉ (์ดˆ)
    "auto_scaling_enabled": True,       # ์ž๋™ ์Šค์ผ€์ผ๋ง ํ™œ์„ฑํ™”
    "load_balancing": True,             # ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ํ™œ์„ฑํ™”
    "connection_pooling": True          # ์—ฐ๊ฒฐ ํ’€๋ง ํ™œ์„ฑํ™”
}

๐Ÿ” ๋””๋ฒ„๊น… ๋ฐ ๋กœ๊น…

๋กœ๊น… ์„ค์ •

์ƒ์„ธํ•œ ๋กœ๊น…์„ ์œ„ํ•œ ์„ค์ •:

logging_config = {
    "level": "INFO",                    # DEBUG, INFO, WARNING, ERROR, CRITICAL
    "format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s",
    "file_logging": True,               # ํŒŒ์ผ ๋กœ๊น… ํ™œ์„ฑํ™”
    "console_logging": True,            # ์ฝ˜์†” ๋กœ๊น… ํ™œ์„ฑํ™”
    "log_file": "pydoll_mcp.log",       # ๋กœ๊ทธ ํŒŒ์ผ ์ด๋ฆ„
    "max_file_size": "10MB",            # ์ตœ๋Œ€ ํŒŒ์ผ ํฌ๊ธฐ
    "backup_count": 5,                  # ๋ฐฑ์—… ํŒŒ์ผ ์ˆ˜
    "rotation_interval": "daily",       # ์ˆœํ™˜ ๊ฐ„๊ฒฉ
    "structured_logging": True,         # ๊ตฌ์กฐํ™”๋œ ๋กœ๊น…
    "json_format": False,               # JSON ํ˜•์‹
    "include_stack_trace": True,        # ์Šคํƒ ํŠธ๋ ˆ์ด์Šค ํฌํ•จ
    "log_requests": True,               # HTTP ์š”์ฒญ ๋กœ๊น…
    "log_responses": True,              # HTTP ์‘๋‹ต ๋กœ๊น…
    "log_errors": True,                 # ์˜ค๋ฅ˜ ๋กœ๊น…
    "log_performance": True,            # ์„ฑ๋Šฅ ๋กœ๊น…
    "sensitive_data_masking": True      # ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ ๋งˆ์Šคํ‚น
}

๋””๋ฒ„๊น… ๋„๊ตฌ

๊ฐœ๋ฐœ ๋ฐ ๋””๋ฒ„๊น…์„ ์œ„ํ•œ ๋„๊ตฌ ์„ค์ •:

debugging_config = {
    "debug_mode": False,                # ๋””๋ฒ„๊ทธ ๋ชจ๋“œ
    "verbose_logging": False,           # ์ƒ์„ธ ๋กœ๊น…
    "screenshot_on_error": True,        # ์˜ค๋ฅ˜ ์‹œ ์Šคํฌ๋ฆฐ์ƒท
    "save_page_source": True,           # ํŽ˜์ด์ง€ ์†Œ์Šค ์ €์žฅ
    "network_logging": True,            # ๋„คํŠธ์›Œํฌ ๋กœ๊น…
    "console_logging": True,            # ๋ธŒ๋ผ์šฐ์ € ์ฝ˜์†” ๋กœ๊น…
    "performance_profiling": True,      # ์„ฑ๋Šฅ ํ”„๋กœํŒŒ์ผ๋ง
    "memory_profiling": True,           # ๋ฉ”๋ชจ๋ฆฌ ํ”„๋กœํŒŒ์ผ๋ง
    "execution_tracing": True,          # ์‹คํ–‰ ์ถ”์ 
    "step_by_step_debugging": False,    # ๋‹จ๊ณ„๋ณ„ ๋””๋ฒ„๊น…
    "breakpoint_enabled": False,        # ์ค‘๋‹จ์  ํ™œ์„ฑํ™”
    "interactive_debugging": False,     # ๋Œ€ํ™”ํ˜• ๋””๋ฒ„๊น…
    "debug_output_dir": "./debug",      # ๋””๋ฒ„๊ทธ ์ถœ๋ ฅ ๋””๋ ‰ํ† ๋ฆฌ
    "debug_session_recording": True     # ๋””๋ฒ„๊ทธ ์„ธ์…˜ ๋…นํ™”
}

๐Ÿ›ก๏ธ ๋ณด์•ˆ ๋ฐ ๊ฐœ์ธ์ •๋ณด ๋ณดํ˜ธ

๋ณด์•ˆ ์„ค์ •

๋ธŒ๋ผ์šฐ์ € ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•˜๊ธฐ ์œ„ํ•œ ์„ค์ •:

security_config = {
    "disable_web_security": False,      # ์›น ๋ณด์•ˆ ๋น„ํ™œ์„ฑํ™” (๊ฐœ๋ฐœ์šฉ)
    "disable_features": [
        "VizDisplayCompositor",
        "TranslateUI",
        "MediaRouter"
    ],
    "enable_features": [
        "NetworkService",
        "VizServiceDisplay"
    ],
    "certificate_transparency": True,   # ์ธ์ฆ์„œ ํˆฌ๋ช…์„ฑ
    "hsts_enabled": True,               # HSTS ํ™œ์„ฑํ™”
    "mixed_content_blocking": True,     # ํ˜ผํ•ฉ ์ฝ˜ํ…์ธ  ์ฐจ๋‹จ
    "insecure_content_blocking": True,  # ๋น„๋ณด์•ˆ ์ฝ˜ํ…์ธ  ์ฐจ๋‹จ
    "xss_protection": True,             # XSS ๋ณดํ˜ธ
    "content_security_policy": True,    # CSP ํ™œ์„ฑํ™”
    "referrer_policy": "strict-origin-when-cross-origin",
    "permissions_policy": True,         # ๊ถŒํ•œ ์ •์ฑ… ํ™œ์„ฑํ™”
    "feature_policy": True,             # ๊ธฐ๋Šฅ ์ •์ฑ… ํ™œ์„ฑํ™”
    "sandbox_enabled": True,            # ์ƒŒ๋“œ๋ฐ•์Šค ํ™œ์„ฑํ™”
    "site_isolation": True              # ์‚ฌ์ดํŠธ ๊ฒฉ๋ฆฌ
}

๊ฐœ์ธ์ •๋ณด ๋ณดํ˜ธ ์„ค์ •

๊ฐœ์ธ์ •๋ณด๋ฅผ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•œ ์„ค์ •:

privacy_config = {
    "do_not_track": True,               # Do Not Track ํ™œ์„ฑํ™”
    "disable_background_sync": True,    # ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๋™๊ธฐํ™” ๋น„ํ™œ์„ฑํ™”
    "disable_background_fetch": True,   # ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํŽ˜์น˜ ๋น„ํ™œ์„ฑํ™”
    "disable_push_messaging": True,     # ํ‘ธ์‹œ ๋ฉ”์‹œ์ง• ๋น„ํ™œ์„ฑํ™”
    "disable_notifications": True,      # ์•Œ๋ฆผ ๋น„ํ™œ์„ฑํ™”
    "disable_geolocation": True,        # ์œ„์น˜ ์ •๋ณด ๋น„ํ™œ์„ฑํ™”
    "disable_camera": True,             # ์นด๋ฉ”๋ผ ๋น„ํ™œ์„ฑํ™”
    "disable_microphone": True,         # ๋งˆ์ดํฌ ๋น„ํ™œ์„ฑํ™”
    "disable_sensors": True,            # ์„ผ์„œ ๋น„ํ™œ์„ฑํ™”
    "disable_webrtc": True,             # WebRTC ๋น„ํ™œ์„ฑํ™”
    "disable_webgl": True,              # WebGL ๋น„ํ™œ์„ฑํ™”
    "disable_canvas_reading": True,     # ์บ”๋ฒ„์Šค ์ฝ๊ธฐ ๋น„ํ™œ์„ฑํ™”
    "disable_font_access": True,        # ํฐํŠธ ์ ‘๊ทผ ๋น„ํ™œ์„ฑํ™”
    "disable_clipboard_access": True,   # ํด๋ฆฝ๋ณด๋“œ ์ ‘๊ทผ ๋น„ํ™œ์„ฑํ™”
    "clear_data_on_exit": True,         # ์ข…๋ฃŒ ์‹œ ๋ฐ์ดํ„ฐ ์ •๋ฆฌ
    "incognito_mode": True,             # ์‹œํฌ๋ฆฟ ๋ชจ๋“œ
    "private_browsing": True            # ๊ฐœ์ธ ๋ธŒ๋ผ์šฐ์ง•
}

๐ŸŽฏ ์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ์ตœ์ ํ™”

์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง

์‹ค์‹œ๊ฐ„ ์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์œ„ํ•œ ์„ค์ •:

performance_monitoring = {
    "enabled": True,
    "metrics_collection": True,         # ๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘
    "response_time_tracking": True,     # ์‘๋‹ต ์‹œ๊ฐ„ ์ถ”์ 
    "resource_usage_tracking": True,    # ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰ ์ถ”์ 
    "memory_usage_tracking": True,      # ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ์ถ”์ 
    "network_usage_tracking": True,     # ๋„คํŠธ์›Œํฌ ์‚ฌ์šฉ๋Ÿ‰ ์ถ”์ 
    "error_rate_tracking": True,        # ์˜ค๋ฅ˜์œจ ์ถ”์ 
    "success_rate_tracking": True,      # ์„ฑ๊ณต๋ฅ  ์ถ”์ 
    "throughput_tracking": True,        # ์ฒ˜๋ฆฌ๋Ÿ‰ ์ถ”์ 
    "latency_tracking": True,           # ์ง€์—ฐ ์‹œ๊ฐ„ ์ถ”์ 
    "concurrent_connections": True,     # ๋™์‹œ ์—ฐ๊ฒฐ ์ˆ˜ ์ถ”์ 
    "alert_thresholds": {
        "cpu_usage": 80,                # CPU ์‚ฌ์šฉ๋Ÿ‰ ์ž„๊ณ„๊ฐ’ (%)
        "memory_usage": 85,             # ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ์ž„๊ณ„๊ฐ’ (%)
        "error_rate": 5,                # ์˜ค๋ฅ˜์œจ ์ž„๊ณ„๊ฐ’ (%)
        "response_time": 30             # ์‘๋‹ต ์‹œ๊ฐ„ ์ž„๊ณ„๊ฐ’ (์ดˆ)
    },
    "reporting_interval": 60,           # ๋ณด๊ณ  ๊ฐ„๊ฒฉ (์ดˆ)
    "dashboard_enabled": True,          # ๋Œ€์‹œ๋ณด๋“œ ํ™œ์„ฑํ™”
    "export_metrics": True,             # ๋ฉ”ํŠธ๋ฆญ ๋‚ด๋ณด๋‚ด๊ธฐ
    "metric_retention": 30              # ๋ฉ”ํŠธ๋ฆญ ๋ณด์กด ๊ธฐ๊ฐ„ (์ผ)
}

์ž๋™ ์ตœ์ ํ™”

์ž๋™ ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•œ ์„ค์ •:

auto_optimization = {
    "enabled": True,
    "adaptive_timeout": True,           # ์ ์‘ํ˜• ํƒ€์ž„์•„์›ƒ
    "dynamic_retry": True,              # ๋™์  ์žฌ์‹œ๋„
    "load_balancing": True,             # ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ
    "auto_scaling": True,               # ์ž๋™ ์Šค์ผ€์ผ๋ง
    "resource_allocation": True,        # ๋ฆฌ์†Œ์Šค ํ• ๋‹น ์ตœ์ ํ™”
    "cache_optimization": True,         # ์บ์‹œ ์ตœ์ ํ™”
    "connection_pooling": True,         # ์—ฐ๊ฒฐ ํ’€๋ง ์ตœ์ ํ™”
    "memory_optimization": True,        # ๋ฉ”๋ชจ๋ฆฌ ์ตœ์ ํ™”
    "cpu_optimization": True,           # CPU ์ตœ์ ํ™”
    "network_optimization": True,       # ๋„คํŠธ์›Œํฌ ์ตœ์ ํ™”
    "optimization_interval": 300,       # ์ตœ์ ํ™” ๊ฐ„๊ฒฉ (์ดˆ)
    "performance_baseline": True,       # ์„ฑ๋Šฅ ๊ธฐ์ค€์„  ์„ค์ •
    "anomaly_detection": True,          # ์ด์ƒ ๊ฐ์ง€
    "predictive_optimization": True,    # ์˜ˆ์ธก ์ตœ์ ํ™”
    "ml_optimization": False            # ๋จธ์‹ ๋Ÿฌ๋‹ ์ตœ์ ํ™”
}

๐Ÿ“ ์„ค์ • ์˜ˆ์‹œ

์ตœ๊ณ  ์„ฑ๋Šฅ ๋ชจ๋“œ

์ตœ๊ณ  ์„ฑ๋Šฅ์„ ์œ„ํ•œ ์„ค์ • ์˜ˆ์‹œ:

{
  "mcpServers": {
    "pydoll": {
      "command": "python",
      "args": ["-m", "pydoll_mcp.server"],
      "env": {
        "PYDOLL_LOG_LEVEL": "WARNING",
        "PYDOLL_HEADLESS": "true",
        "PYDOLL_DISABLE_IMAGES": "true",
        "PYDOLL_DISABLE_CSS": "true",
        "PYDOLL_DISABLE_JAVASCRIPT": "false",
        "PYDOLL_MAX_BROWSERS": "5",
        "PYDOLL_MAX_TABS": "10",
        "PYDOLL_MEMORY_LIMIT": "4096",
        "PYDOLL_PERFORMANCE_MODE": "maximum",
        "PYDOLL_CACHE_ENABLED": "true",
        "PYDOLL_COMPRESSION": "true",
        "PYTHONIOENCODING": "utf-8"
      }
    }
  }
}

์ตœ๊ณ  ์Šคํ…”์Šค ๋ชจ๋“œ

์ตœ๊ณ  ์Šคํ…”์Šค๋ฅผ ์œ„ํ•œ ์„ค์ • ์˜ˆ์‹œ:

{
  "mcpServers": {
    "pydoll": {
      "command": "python",
      "args": ["-m", "pydoll_mcp.server"],
      "env": {
        "PYDOLL_LOG_LEVEL": "ERROR",
        "PYDOLL_STEALTH_MODE": "maximum",
        "PYDOLL_FINGERPRINT_RANDOMIZATION": "true",
        "PYDOLL_USER_AGENT_ROTATION": "true",
        "PYDOLL_PROXY_ROTATION": "true",
        "PYDOLL_HUMAN_BEHAVIOR": "true",
        "PYDOLL_CAPTCHA_BYPASS": "true",
        "PYDOLL_ANTI_DETECTION": "true",
        "PYDOLL_CANVAS_SPOOFING": "true",
        "PYDOLL_WEBGL_SPOOFING": "true",
        "PYDOLL_TIMEZONE_SPOOFING": "true",
        "PYTHONIOENCODING": "utf-8"
      }
    }
  }
}

๊ท ํ˜• ๋ชจ๋“œ

์„ฑ๋Šฅ๊ณผ ์Šคํ…”์Šค์˜ ๊ท ํ˜•์„ ๋งž์ถ˜ ์„ค์ • ์˜ˆ์‹œ:

{
  "mcpServers": {
    "pydoll": {
      "command": "python",
      "args": ["-m", "pydoll_mcp.server"],
      "env": {
        "PYDOLL_LOG_LEVEL": "INFO",
        "PYDOLL_HEADLESS": "true",
        "PYDOLL_STEALTH_MODE": "balanced",
        "PYDOLL_PERFORMANCE_MODE": "balanced",
        "PYDOLL_CAPTCHA_BYPASS": "true",
        "PYDOLL_DISABLE_IMAGES": "false",
        "PYDOLL_MAX_BROWSERS": "3",
        "PYDOLL_MAX_TABS": "5",
        "PYDOLL_MEMORY_LIMIT": "2048",
        "PYDOLL_HUMAN_BEHAVIOR": "true",
        "PYDOLL_USER_AGENT_ROTATION": "true",
        "PYTHONIOENCODING": "utf-8"
      }
    }
  }
}

๐Ÿ”„ ์„ค์ • ์ ์šฉ ๋ฐฉ๋ฒ•

1. Claude Desktop ์„ค์ • ํŒŒ์ผ ์ˆ˜์ •

์„ค์ • ํŒŒ์ผ ์œ„์น˜:

  • Windows: %APPDATA%\Claude\claude_desktop_config.json
  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Linux: ~/.config/Claude/claude_desktop_config.json

2. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •

์‹œ์Šคํ…œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ์„ค์ •:

# Windows
set PYDOLL_LOG_LEVEL=INFO
set PYDOLL_STEALTH_MODE=true

# Linux/macOS
export PYDOLL_LOG_LEVEL=INFO
export PYDOLL_STEALTH_MODE=true

3. ์„ค์ • ๊ฒ€์ฆ

์„ค์ •์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ ์šฉ๋˜์—ˆ๋Š”์ง€ ํ™•์ธ:

python -m pydoll_mcp.cli test-installation --verbose
python -m pydoll_mcp.cli status --config

๐Ÿšจ ์ฃผ์˜์‚ฌํ•ญ

์„ฑ๋Šฅ vs ์Šคํ…”์Šค ํŠธ๋ ˆ์ด๋“œ์˜คํ”„

  • ๊ณ ์„ฑ๋Šฅ ๋ชจ๋“œ: ๋น ๋ฅธ ์‹คํ–‰์ด์ง€๋งŒ ํƒ์ง€ ๊ฐ€๋Šฅ์„ฑ ์ฆ๊ฐ€
  • ๊ณ ์Šคํ…”์Šค ๋ชจ๋“œ: ํƒ์ง€ ํšŒํ”ผ ์šฐ์ˆ˜ํ•˜์ง€๋งŒ ์„ฑ๋Šฅ ์ €ํ•˜
  • ๊ท ํ˜• ๋ชจ๋“œ: ์„ฑ๋Šฅ๊ณผ ์Šคํ…”์Šค์˜ ์ ์ ˆํ•œ ๊ท ํ˜•

๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ

  • ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ ์„ค์ •์„ ๋„ˆ๋ฌด ๋‚ฎ๊ฒŒ ํ•˜๋ฉด ์„ฑ๋Šฅ ์ €ํ•˜ ๋ฐœ์ƒ
  • ์‹œ์Šคํ…œ ๋ฉ”๋ชจ๋ฆฌ์˜ 50-70% ์ดํ•˜๋กœ ์ œํ•œ ๊ถŒ์žฅ

๋ฒ•์  ๋ฐ ์œค๋ฆฌ์  ๊ณ ๋ ค์‚ฌํ•ญ

  • ์›น์‚ฌ์ดํŠธ์˜ ์ด์šฉ์•ฝ๊ด€ ๋ฐ robots.txt ์ค€์ˆ˜
  • ๊ณผ๋„ํ•œ ์š”์ฒญ์œผ๋กœ ์„œ๋ฒ„ ๋ถ€ํ•˜ ๋ฐฉ์ง€
  • ๊ฐœ์ธ์ •๋ณด ๋ณดํ˜ธ ๋ฐ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์ •์ฑ… ์ค€์ˆ˜

์ด ๊ณ ๊ธ‰ ์„ค์ •์„ ํ†ตํ•ด PyDoll MCP Server๋ฅผ ์ตœ์ ํ™”ํ•˜์—ฌ ๋” ํšจ์œจ์ ์ด๊ณ  ์•ˆ์ „ํ•œ ๋ธŒ๋ผ์šฐ์ € ์ž๋™ํ™”๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.