블로그로 돌아가기

텔레그램, 디스코드 봇 자동화 필수 프록시 가이드 (1부)

<p>이 부분에서: 봇에게 프록시 서버가 왜 필요한지, 2025년의 최신 안티봇 시스템 작동 방식, 존재하는 봇의 유형 및 필요한 프록시 유형에 대해 알아봅니다. 이 자료는 최신 정보를 기반으로 합니다...</p>

📅2025년 11월 14일

이번 파트에서 다룰 내용: 봇에게 프록시가 필요한 이유, 2025년 최신 안티봇 시스템 작동 방식, 봇의 종류와 그에 필요한 프록시 유형을 알아봅니다. 이 자료는 자동화, 텔레그램/디스코드 봇, 웹 스크레이핑에 대한 최신 정보를 기반으로 합니다.

2025년 봇에게 프록시가 필요한 이유

2025년 현재, 봇은 전체 인터넷 트래픽의 50% 이상을 차지합니다. 비즈니스 프로세스 자동화부터 데이터 파싱, 다중 계정 관리에 이르기까지 봇은 현대 인터넷의 필수적인 부분이 되었습니다. 하지만 봇의 증가와 함께 플랫폼 측의 봇 탐지 기술도 함께 발전했습니다.

봇이 프록시를 사용하는 주요 이유:

  • IP 차단 우회 — 플랫폼은 의심스러운 IP 주소를 차단합니다
  • 요청 분산 — 여러 사용자로부터의 트래픽을 가장합니다
  • Rate Limit 준수 — 요청 빈도 제한 회피
  • 지리적 다양성 — 여러 국가의 콘텐츠에 액세스
  • 운영 확장 — 수많은 봇 동시 실행
  • 실제 IP 보호 — 봇 소유자의 익명성 유지

프록시 없이는 봇이 빠르게 탐지됩니다. 단일 IP에서 발생하는 과도한 요청 빈도, 비인간적인 행동 패턴, 레지덴셜 네트워크가 아닌 데이터 센터 IP에서 발생하는 요청 등 여러 징후로 인해 탐지됩니다. Cloudflare Bot Management와 같은 최신 안티봇 시스템은 매일 수천억 건의 요청을 기반으로 머신러닝을 사용하여 모든 요청에 대해 정확한 "봇 점수(bot-score)"를 생성합니다.

2025년 봇 통계

50%+

웹 트래픽에서 봇의 점유율

80%

모델 학습을 위한 AI 봇

50%

통신 로그인 시도 중 고급 봇

이해해야 할 중요한 점: 플랫폼은 봇 자체와 싸우는 것이 아니라 악의적인 자동화와 싸우고 있습니다. 합법적인 봇(검색 로봇, 모니터링, API 클라이언트)은 환영받지만 규칙을 준수하고 올바른 인프라를 사용해야 합니다.

최신 안티봇 시스템 및 탐지 방법

2025년의 봇 방어 시스템은 전례 없는 복잡성에 도달했습니다. 이들은 머신러닝, 행동 분석, 브라우저 생체 인식 및 하이브리드 접근 방식을 조합하여 자동화된 트래픽을 식별합니다.

Cloudflare Bot Management — 시장 선두주자

Cloudflare는 수백만 개의 웹사이트를 보호하며 매일 수천억 건의 요청을 분석합니다. 이 시스템은 다음을 사용합니다.

1. 글로벌 트래픽 기반 머신러닝

Cloudflare는 선별된 요청 하위 집합에서 ML 모델을 훈련하여 모든 요청에 대해 신뢰할 수 있는 "봇 점수"(0-100)를 생성합니다. 점수가 높을수록 봇일 가능성이 높습니다.

2. 새로운 HTTP/2 및 Client Hello 휴리스틱

2025년 6월부터 Cloudflare는 HTTP/2 핑거프린트 및 TLS Client Hello 확장을 통해 봇을 감지하기 위해 50개 이상의 새로운 휴리스틱을 작성했습니다. 이를 통해 헤드리스 브라우저를 사용할 때도 자동화된 도구를 탐지할 수 있습니다.

3. 개인 맞춤형 행동 탐지

Cloudflare는 Bot Management의 각 클라이언트에게 고유한 행동 이상 탐지를 보장하기 위해 모델을 사용합니다. 시스템은 특정 사이트의 정상적인 트래픽 패턴을 학습하고 편차를 식별합니다.

4. AI 기반 봇 및 컴퓨터 비전

최신 스크레이퍼는 LLM을 사용하여 의미론적 이해를 하고 컴퓨터 비전을 사용하여 시각적 캡차를 해결합니다. Cloudflare는 더 복잡한 챌린지와 패턴 탐지를 통해 이에 적극적으로 대응하고 있습니다.

봇 탐지 방법

탐지 방법 작동 방식 프록시로 우회 가능?
IP 평판 IP를 데이터 센터, 알려진 프록시 데이터베이스와 비교 ✅ 레지덴셜
Rate Limiting 단일 IP의 요청 빈도 제한 ✅ IP 로테이션
브라우저 핑거프린팅 Canvas, WebGL, 글꼴 등 브라우저 특성 분석 ❌ 안티 디텍트 필요
JavaScript 챌린지 JS 코드 실행 확인 ⚠️ 헤드리스 브라우저 필요
CAPTCHA reCAPTCHA v2/v3, hCaptcha ⚠️ 해결 서비스 필요
TLS 핑거프린팅 Client Hello 매개변수 분석 ⚠️ 올바른 라이브러리 필요
행동 분석 마우스 움직임, 스크롤 속도, 클릭 ❌ 행동 에뮬레이션

매우 중요: 최신 안티봇 시스템을 우회하려면 프록시만으로는 부족합니다. 고품질 레지덴셜 프록시 + 스텔스 플러그인이 있는 헤드리스 브라우저 + 현실적인 행동 패턴 + 올바른 User-Agent 및 헤더를 포함하는 종합적인 접근 방식이 필요합니다.

Rate Limiting: 플랫폼이 봇을 제한하는 방법

Rate limiting은 모든 최신 API 및 웹 플랫폼에서 사용하는 요청 빈도 제한 메커니즘입니다. 이는 봇에 대한 1차 방어선이며, 작동 방식을 이해하는 것은 성공적인 자동화에 매우 중요합니다.

Telegram API Rate Limits 2025

Telegram Bot API는 준수해야 하는 엄격한 제한이 있습니다.

공식 제한

  • 개인 채팅당 1초에 1개 메시지 (짧은 급증 허용 가능)
  • 그룹당 분당 20개 메시지
  • 봇당 전역적으로 초당 약 30개 메시지
  • 대량 발송 시 초당 약 30명 사용자
  • 최대 100개 동시 연결

제한을 초과하면 봇은 429 (Too Many Requests) 오류를 받습니다. 중요: 제한은 IP 주소나 호스트가 아닌 봇 계정에 연결됩니다.

2025년 신규 사항: Telegram Bot API 7.1은 유료 방송을 허용하는 allow_paid_broadcast 매개변수를 도입하여 Telegram Stars를 통해 유료로 초당 1000개 메시지까지 보낼 수 있게 되었습니다. 이는 대규모 발송을 위한 해결책입니다.

Discord Bot Rate Limits

Discord는 덜 유연하지만 덜 엄격하지 않은 자체적인 rate limiting 시스템을 사용합니다.

주요 제한 사항

  • IP 주소 기준: Discord는 다중 봇 탐지를 위해 IP를 추적합니다
  • 경로(Route) 기준: 각 API 엔드포인트에는 자체 버킷 제한이 있습니다
  • 글로벌 rate limit: 모든 엔드포인트에 대해 초당 50회 요청
  • WebSocket: 샤드당 60초에 120개 이벤트

봇 플릿(예: 여러 서버에서 모더레이션)을 관리할 때 IP 차단에 빠르게 직면하므로 프록시 사용이 Discord에서는 매우 중요합니다.

기술적 어려움: discord.py의 WebSockets는 HTTP 프록시를 직접 지원하지 않습니다. SOCKS5 또는 HTTPS 프록시와 같은 대안 솔루션을 사용해야 합니다.

Rate Limit 처리 전략

1. 지수 백오프(Exponential backoff)

429 오류 수신 시 지연 시간을 지수적으로 증가시킵니다: 1초 → 2초 → 4초 → 8초. 대부분의 라이브러리(python-telegram-bot, discord.py)는 이를 자동으로 구현합니다.

2. 프록시를 통한 분산

부하 분산을 위해 프록시 서버 풀을 사용합니다. 시간당 100개 요청당 5-10개의 프록시 사용을 권장합니다.

3. 요청 큐

전송 속도를 제어하는 큐 기반 아키텍처를 구현합니다. 이를 통해 트래픽 급증을 방지할 수 있습니다.

4. 모니터링 및 적응

Rate limit 헤더(X-RateLimit-Limit, X-RateLimit-Remaining)를 추적하고 요청 속도를 동적으로 조정합니다.

봇의 유형과 프록시 요구 사항

다양한 유형의 봇은 프록시에 대해 서로 다른 요구 사항을 가집니다. 이러한 차이점을 이해하면 작업에 가장 적합한 솔루션을 선택하는 데 도움이 됩니다.

1. Telegram 봇

특징

용도: 자동 응답기, 알림, 그룹 관리, 발송
프로토콜: HTTPS API 또는 MTProto
Rate limits: 엄격함 (개인 채팅당 1초에 1개 메시지, 그룹당 20개/분)

프록시 요구 사항:

  • 데이터 센터 프록시는 합법적인 봇에 잘 작동합니다
  • ⚠️ 레지덴셜 프록시는 대량 작업에 필요합니다
  • ❌ Telegram은 Discord만큼 공격적으로 IP를 차단하지 않습니다
  • 💡 안정적인 연결을 위한 최대 30분 스티키 세션

2. Discord 봇

특징

용도: 모더레이션, 음악, 게임, 서버 분석
프로토콜: REST API + WebSocket Gateway
Rate limits: IP 및 경로별 제한, 엄격한 추적

프록시 요구 사항:

  • 플릿의 각 봇에 대해 전용 IP 필수
  • ✅ 대규모 작업을 위해 레지덴셜 IPv6 선호
  • ⚠️ HTTPS 또는 SOCKS5 (HTTP는 WebSocket과 작동하지 않음)
  • 💡 실시간 이벤트에 대한 낮은 지연 시간 중요

3. 웹 스크레이퍼 (Selenium, Puppeteer)

특징

용도: 웹 데이터 수집, 폼 자동화, 테스트
프로토콜: 헤드리스 브라우저를 통한 HTTP/HTTPS
탐지: 매우 높음 — 핑거프린팅, CAPTCHA, 행동 분석

프록시 요구 사항:

  • 레지덴셜 프록시 필수 — 데이터 센터 IP는 탐지됨
  • 5-20개 요청당 IP 로테이션 (파싱용)
  • 계정 작업용 최대 120분 스티키 세션
  • 💡 대상 콘텐츠에 대한 지리적 바인딩
  • ⚠️ 높은 IP 품질 (블랙리스트에 없을 것)

4. API 클라이언트 및 다중 계정 관리

특징

용도: 다중 소셜 미디어 계정 관리
프로토콜: HTTPS API
탐지: IP를 통한 계정 연결, 장치 핑거프린팅

프록시 요구 사항:

  • 정적 레지덴셜 IP — 계정당 하나의 IP
  • ✅ Instagram, Facebook, TikTok에 가장 적합한 모바일 프록시
  • ⚠️ 장기적인 IP 안정성 (수개월)
  • 💡 계정 등록 지역과의 지리적 일치

다양한 작업에 필요한 프록시 유형

봇을 위한 프록시 유형 비교표

작업 유형 데이터 센터 레지덴셜 모바일
Telegram 봇 (API) ⭐⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐
Discord 봇 (플릿) ⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐
웹 스크레이핑 ⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐
API 파싱 ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐
소셜 미디어 다중 계정 ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐
SEO 모니터링 ⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐
E-commerce 보팅 ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐

ProxyCove를 봇에 사용해 보세요

최소한의 지연 시간, 99%+의 가동 시간 및 24/7 기술 지원을 통해 고품질 프록시를 확보하세요. 2분 만에 시작하세요!

$1.5/GB

데이터 센터 프록시

$2.7/GB

레지덴셜 프록시

$3.8/GB

모바일 프록시

🎁 프로모션 코드 ARTHELLO — 첫 충전 시 +$1.3 추가 혜택!

ProxyCove에 가입하기 →

📖 다음 파트 계속

파트 2에서는 텔레그램 봇, 디스코드 봇, Selenium/Puppeteer를 사용한 웹 자동화를 위한 프록시 설정에 대한 실용적인 가이드를 자세히 다룹니다. 2025년의 코드 예제와 모범 사례를 통해 효율성과 차단 방지 방법을 알아보세요.

이번 파트에서 다룰 내용: 텔레그램 봇, 디스코드 봇, Selenium/Puppeteer를 사용한 웹 자동화를 위한 프록시 설정에 대한 실용적인 가이드. 효율성과 차단 방지를 위한 2025년 코드 예제 및 모범 사례.

텔레그램 봇 프록시 설정

Telegram Bot API는 프록시를 기본적으로 지원하지만 올바른 구성이 필요합니다. 2025년에는 Python의 python-telegram-bot과 Node.js의 node-telegram-bot-api가 가장 널리 사용됩니다.

Python: python-telegram-bot v20+

버전 20부터 라이브러리는 HTTP 요청에 httpx를 사용하여 프록시 구성을 단순화했습니다.

from telegram.ext import ApplicationBuilder
import httpx

# ProxyCove 프록시 구성
PROXY_URL = "http://username:password@proxy.proxycove.com:12345"

# 프록시를 포함한 HTTP 클라이언트 생성
http_client = httpx.AsyncClient(
    proxy=PROXY_URL,
    timeout=30.0
)

# 프록시를 사용하여 봇 초기화
application = ApplicationBuilder() \
    .token("YOUR_BOT_TOKEN") \
    .get_updates_http_version("1.1") \
    .http_version("1.1") \
    .get_updates_request(httpx.Request(
        method="POST",
        url="https://api.telegram.org/bot{token}/getUpdates",
    )) \
    .build()

# request_kwargs를 통한 대안 방식
application = ApplicationBuilder() \
    .token("YOUR_BOT_TOKEN") \
    .request(httpx.AsyncClient(proxy=PROXY_URL)) \
    .build()

ProxyCove 권장 사항: 텔레그램 봇에는 데이터 센터 프록시($1.5/GB)를 사용하세요. API 요청에 대해 뛰어난 속도와 안정성을 제공합니다.

Node.js: node-telegram-bot-api

const TelegramBot = require('node-telegram-bot-api');
const HttpsProxyAgent = require('https-proxy-agent');

// ProxyCove 프록시 구성
const proxyUrl = 'http://username:password@proxy.proxycove.com:12345';
const agent = new HttpsProxyAgent(proxyUrl);

// 프록시를 사용하여 봇 초기화
const bot = new TelegramBot('YOUR_BOT_TOKEN', {
  polling: true,
  request: {
    agent: agent,
    timeout: 30000
  }
});

// 메시지 처리
bot.on('message', (msg) => {
  const chatId = msg.chat.id;
  bot.sendMessage(chatId, '봇이 프록시를 통해 작동 중입니다!');
});

// Rate limiting 핸들러
bot.on('polling_error', (error) => {
  if (error.response && error.response.statusCode === 429) {
    console.log('Rate limit 초과, 대기 중...');
    // 지수 백오프 구현
  }
});

MTProto: Telethon 및 Pyrogram

공식 봇이 아닌 사용자(userbot)로 Telegram과 통신하려면 Telethon 또는 Pyrogram을 사용해야 합니다. 이들은 MTProto 프로토콜을 사용하며 다른 프록시 구성이 필요합니다.

# Telethon
from telethon import TelegramClient
import socks

# SOCKS5 프록시 구성
proxy = (socks.SOCKS5, 'proxy.proxycove.com', 1080,
         True, 'username', 'password')

client = TelegramClient('session_name', api_id, api_hash,
                       proxy=proxy)

# Pyrogram
from pyrogram import Client

proxies = {
    "scheme": "socks5",  # "socks5", "http", "https"
    "hostname": "proxy.proxycove.com",
    "port": 1080,
    "username": "your_username",
    "password": "your_password"
}

app = Client("my_account",
             api_id=api_id,
             api_hash=api_hash,
             proxy=proxies)

경고: 사용자 계정을 통한 Userbot 작동은 Telegram 서비스 약관을 위반할 수 있으며 계정 차단으로 이어질 수 있습니다. 위험을 감수하고 합법적인 목적으로만 사용하십시오.

Telegram Rate Limit 처리

안정적인 봇 작동을 위해서는 Rate Limit 처리가 중요합니다.

import asyncio
from telegram.error import RetryAfter, TimedOut

async def send_with_retry(bot, chat_id, text, max_retries=3):
    """메시지 재시도 처리"""
    for attempt in range(max_retries):
        try:
            return await bot.send_message(chat_id, text)
        except RetryAfter as e:
            # Telegram이 정확한 대기 시간을 알려줌
            wait_time = e.retry_after
            print(f"Rate limit: {wait_time}초 대기 중")
            await asyncio.sleep(wait_time)
        except TimedOut:
            # 연결 시간 초과
            if attempt < max_retries - 1:
                wait_time = 2 ** attempt  # 지수 백오프
                await asyncio.sleep(wait_time)
            else:
                raise

    raise Exception("최대 시도 횟수 초과")

# 사용 예시
await send_with_retry(bot, chat_id, "안녕하세요!")

디스코드 봇 프록시 설정

디스코드 봇은 특히 봇 플릿을 관리할 때 프록시 설정에 더 세심한 주의가 필요합니다. 주요 어려움은 WebSocket이 HTTP 프록시를 직접 지원하지 않는다는 점입니다.

Python: discord.py 프록시 설정

Discord.py는 HTTP 요청에 aiohttp를 사용하며, WebSocket 연결을 위해서는 사용자 지정 커넥터를 생성해야 합니다.

import discord
from discord.ext import commands
import aiohttp

# ProxyCove HTTPS 프록시 구성 (HTTP는 WebSocket과 작동하지 않음!)
PROXY_URL = "https://username:password@proxy.proxycove.com:443"

# 프록시를 사용한 커넥터 생성
connector = aiohttp.TCPConnector()

# 봇 초기화
intents = discord.Intents.default()
intents.message_content = True

bot = commands.Bot(
    command_prefix='!',
    intents=intents,
    proxy=PROXY_URL,
    connector=connector
)

@bot.event
async def on_ready():
    print(f'{bot.user} 프록시를 통해 연결되었습니다!')

# 다중 봇의 경우 — 각 봇에 전용 IP 사용
bot.run('YOUR_BOT_TOKEN')

중요: Discord는 WebSocket 작동을 위해 HTTPS 또는 SOCKS5 프록시를 요구합니다. 일반 HTTP 프록시는 작동하지 않습니다! ProxyCove는 필요한 모든 유형의 프록시를 제공합니다.

Node.js: discord.js 프록시 설정

const { Client, GatewayIntentBits } = require('discord.js');
const { HttpsProxyAgent } = require('https-proxy-agent');

// 프록시 구성
const proxyUrl = 'http://username:password@proxy.proxycove.com:12345';
const agent = new HttpsProxyAgent(proxyUrl);

// 클라이언트 생성
const client = new Client({
  intents: [
    GatewayIntentBits.Guilds,
    GatewayIntentBits.GuildMessages,
    GatewayIntentBits.MessageContent,
  ],
  rest: {
    agent: agent
  },
  ws: {
    agent: agent
  }
});

client.on('ready', () => {
  console.log(`${client.user.tag} 프록시를 통해 연결되었습니다!`);
});

client.on('messageCreate', message => {
  if (message.content === '!ping') {
    message.reply('Pong 프록시를 통해!');
  }
});

client.login('YOUR_BOT_TOKEN');

Discord 봇 플릿: 아키텍처

다중 Discord 봇을 관리할 때는 각 봇에 대해 별도의 IP를 사용하는 것이 매우 중요합니다. 권장 아키텍처는 다음과 같습니다.

프록시 분배 전략

  • 봇 1개 = 전용 IP 1개 — 탐지 위험 최소화
  • 레지덴셜 IPv6 — 깨끗한 풀, 낮은 지연 시간 선호
  • 스티키 세션 — 안정적인 WebSocket 연결을 위해 최소 30분 유지
  • 지리적 분산 — 봇을 다른 지역에 분산
  • 로테이션 일정 — 24-48시간마다 IP 변경
# 예시: 봇 플릿용 프록시 관리자
import asyncio
import random

class ProxyManager:
    def __init__(self, proxy_list):
        """
        proxy_list: ProxyCove 프록시 목록
        [
            "http://user:pass@proxy1.proxycove.com:12345",
            "http://user:pass@proxy2.proxycove.com:12346",
            ...
        ]
        """
        self.proxies = proxy_list
        self.assigned = {}  # bot_id -> proxy

    def assign_proxy(self, bot_id):
        """봇에게 고유 프록시 할당"""
        if bot_id not in self.assigned:
            # 사용되지 않은 프록시 선택
            used = set(self.assigned.values())
            available = [p for p in self.proxies if p not in used]

            if not available:
                raise Exception("모든 봇에 대해 프록시가 부족합니다")

            self.assigned[bot_id] = random.choice(available)

        return self.assigned[bot_id]

    async def rotate_proxy(self, bot_id):
        """봇의 프록시 로테이션 (24-48시간마다)"""
        if bot_id in self.assigned:
            old_proxy = self.assigned[bot_id]
            # 새 프록시 선택
            new_proxy = random.choice(
                [p for p in self.proxies if p != old_proxy]
            )
            self.assigned[bot_id] = new_proxy
            return new_proxy

# 사용 예시
proxies = [
    "http://user:pass@proxy1.proxycove.com:12345",
    "http://user:pass@proxy2.proxycove.com:12346",
    "http://user:pass@proxy3.proxycove.com:12347",
]

manager = ProxyManager(proxies)

# 각 봇에 대해
bot1_proxy = manager.assign_proxy("bot_1")
bot2_proxy = manager.assign_proxy("bot_2")

ProxyCove 권장 사항: Discord 봇 플릿에는 스티키 세션이 있는 레지덴셜 프록시($2.7/GB)를 사용하여 안정적인 WebSocket 연결을 보장하고 차단 위험을 최소화하십시오.

프록시를 이용한 Selenium 웹 자동화

Selenium은 2025년에도 웹 자동화에 인기 있는 선택입니다. 성공적인 파싱 및 자동화를 위해서는 프록시를 올바르게 설정하고 스텔스 기술을 사용해야 합니다.

프록시를 사용한 Chrome/Chromium

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service

# ProxyCove 프록시 구성
PROXY = "proxy.proxycove.com:12345"
PROXY_USER = "your_username"
PROXY_PASS = "your_password"

# Chrome 옵션 생성
chrome_options = Options()

# 스텔스 기본 설정
chrome_options.add_argument('--disable-blink-features=AutomationControlled')
chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
chrome_options.add_experimental_option('useAutomationExtension', False)

# 인증을 포함한 프록시 설정은 확장 프로그램 사용 필요
import zipfile
import os

def create_proxy_extension(proxy_host, proxy_port,
                          proxy_user, proxy_pass):
    """인증이 포함된 Chrome 확장 프로그램 생성"""
    manifest_json = """
    {
        "version": "1.0.0",
        "manifest_version": 2,
        "name": "Chrome Proxy",
        "permissions": [
            "proxy",
            "tabs",
            "unlimitedStorage",
            "storage",
            "",
            "webRequest",
            "webRequestBlocking"
        ],
        "background": {
            "scripts": ["background.js"]
        },
        "minimum_chrome_version":"22.0.0"
    }
    """

    background_js = f"""
    var config = {{
            mode: "fixed_servers",
            rules: {{
              singleProxy: {{
                scheme: "http",
                host: "{proxy_host}",
                port: parseInt({proxy_port})
              }},
              bypassList: ["localhost"]
            }}
          }};

    chrome.proxy.settings.set({{value: config, scope: "regular"}},
                              function() {{}});

    function callbackFn(details) {{
        return {{
            authCredentials: {{
                username: "{proxy_user}",
                password: "{proxy_pass}"
            }}
        }};
    }}

    chrome.webRequest.onAuthRequired.addListener(
                callbackFn,
                {{urls: [""]}},
                ['blocking']
    );
    """

    plugin_file = 'proxy_auth_plugin.zip'
    with zipfile.ZipFile(plugin_file, 'w') as zp:
        zp.writestr("manifest.json", manifest_json)
        zp.writestr("background.js", background_js)

    return plugin_file

# 확장 프로그램 생성
proxy_host, proxy_port = PROXY.split(':')
extension = create_proxy_extension(
    proxy_host, proxy_port, PROXY_USER, PROXY_PASS
)

chrome_options.add_extension(extension)

# 드라이버 실행
driver = webdriver.Chrome(options=chrome_options)

# WebDriver 속성 위장
driver.execute_script(
    "Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"
)

# 사용
driver.get('https://httpbin.org/ip')
print(driver.page_source)

driver.quit()
os.remove(extension)  # 임시 확장 프로그램 삭제

프록시를 사용한 Firefox

from selenium import webdriver
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.common.proxy import Proxy, ProxyType

# 프록시 구성
PROXY_HOST = "proxy.proxycove.com"
PROXY_PORT = 12345

# 프록시를 사용한 Firefox 프로필 생성
firefox_options = Options()

# 프록시 설정
firefox_options.set_preference("network.proxy.type", 1)
firefox_options.set_preference("network.proxy.http", PROXY_HOST)
firefox_options.set_preference("network.proxy.http_port", PROXY_PORT)
firefox_options.set_preference("network.proxy.ssl", PROXY_HOST)
firefox_options.set_preference("network.proxy.ssl_port", PROXY_PORT)

# 인증 (추가 확장 프로그램 필요)
# 대안: 인증 없는 SOCKS5 사용

# 스텔스 설정
firefox_options.set_preference("dom.webdriver.enabled", False)
firefox_options.set_preference('useAutomationExtension', False)

driver = webdriver.Firefox(options=firefox_options)
driver.get('https://httpbin.org/ip')
print(driver.page_source)
driver.quit()

Selenium 스텔스: 탐지 회피

2025년에는 프록시만으로는 부족합니다. 자동화 은폐를 위해 selenium-stealth를 사용해야 합니다.

# pip install selenium-stealth
from selenium import webdriver
from selenium_stealth import stealth

# 드라이버 설정 (이전 예제의 프록시 사용)
driver = webdriver.Chrome(options=chrome_options)

# 스텔스 기술 적용
stealth(driver,
    languages=["ru-RU", "ru", "en-US", "en"],
    vendor="Google Inc.",
    platform="Win32",
    webgl_vendor="Intel Inc.",
    renderer="Intel Iris OpenGL Engine",
    fix_hairline=True,
)

# 이제 봇은 탐지 위험이 적습니다
driver.get('https://bot.sannysoft.com/')  # 탐지 테스트
# 결과 확인 — 대부분의 테스트가 녹색이어야 함

driver.quit()

모범 사례: ProxyCove의 레지덴셜 프록시와 selenium-stealth 및 User-Agent 로테이션을 결합하여 최대의 은밀성을 확보하십시오. 5-20개 요청마다 IP를 로테이션하십시오.

Puppeteer: 프록시를 이용한 헤드리스 Chrome

Puppeteer는 높은 속도와 사용 편의성 덕분에 2025년 웹 스크레이핑의 황금 표준으로 남아 있습니다.

Puppeteer 기본 프록시 설정

const puppeteer = require('puppeteer');

(async () => {
  // ProxyCove 프록시 구성
  const PROXY = 'proxy.proxycove.com:12345';
  const PROXY_USER = 'your_username';
  const PROXY_PASS = 'your_password';

  // 프록시를 사용하여 브라우저 실행
  const browser = await puppeteer.launch({
    headless: true,  // 프로덕션에서는 true, 디버깅 시 false
    args: [
      `--proxy-server=${PROXY}`,
      '--no-sandbox',
      '--disable-setuid-sandbox',
      '--disable-dev-shm-usage',
      '--disable-accelerated-2d-canvas',
      '--disable-gpu',
      '--disable-blink-features=AutomationControlled'
    ]
  });

  const page = await browser.newPage();

  // 프록시 인증
  await page.authenticate({
    username: PROXY_USER,
    password: PROXY_PASS
  });

  // 뷰포트 및 user agent 설정
  await page.setViewport({ width: 1920, height: 1080 });
  await page.setUserAgent(
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) ' +
    'AppleWebKit/537.36 (KHTML, like Gecko) ' +
    'Chrome/120.0.0.0 Safari/537.36'
  );

  // IP 확인
  await page.goto('https://httpbin.org/ip');
  const content = await page.content();
  console.log('현재 IP:', content);

  await browser.close();
})();

Puppeteer Extra: 고급 은폐

플러그인을 사용하는 puppeteer-extra는 2025년 심각한 웹 스크레이핑을 위한 필수 요소입니다.

// npm install puppeteer-extra puppeteer-extra-plugin-stealth
const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');

// 스텔스 플러그인 추가
puppeteer.use(StealthPlugin());

(async () => {
  const PROXY = 'proxy.proxycove.com:12345';

  const browser = await puppeteer.launch({
    headless: true,
    args: [
      `--proxy-server=${PROXY}`,
      '--no-sandbox',
      '--disable-setuid-sandbox'
    ]
  });

  const page = await browser.newPage();

  // 인증
  await page.authenticate({
    username: 'your_username',
    password: 'your_password'
  });

  // 현실적인 행동 에뮬레이션
  await page.setViewport({
    width: 1920 + Math.floor(Math.random() * 100),
    height: 1080 + Math.floor(Math.random() * 100)
  });

  // 사이트 이동
  await page.goto('https://www.google.com', {
    waitUntil: 'networkidle2'
  });

  // 마우스 움직임 에뮬레이션 (봇 탐지 우회에 중요)
  await page.mouse.move(100, 100);
  await page.mouse.move(200, 200);

  // 스크레이핑
  const title = await page.title();
  console.log('페이지 제목:', title);

  await browser.close();
})();

성능: Puppeteer는 인스턴스당 약 100-200MB의 RAM을 소비합니다. 10개 이상의 브라우저로 확장할 때는 브라우저 풀을 사용하고 동시 인스턴스 수를 제한하는 것을 고려하십시오.

Playwright: 최신 대안

Microsoft의 Playwright는 더 나은 지원과 성능을 제공하는 더 현대적인 대안입니다.

const { chromium } = require('playwright');

(async () => {
  // 프록시 설정
  const browser = await chromium.launch({
    proxy: {
      server: 'http://proxy.proxycove.com:12345',
      username: 'your_username',
      password: 'your_password'
    },
    headless: true
  });

  const context = await browser.newContext({
    viewport: { width: 1920, height: 1080 },
    userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)...'
  });

  const page = await context.newPage();

  // Playwright는 자동으로 덜 탐지됩니다
  await page.goto('https://bot.sannysoft.com/');

  // 확인용 스크린샷
  await page.screenshot({ path: 'test.png' });

  await browser.close();
})();

2025년 권장 사항: Playwright는 기능과 성능 면에서 Puppeteer를 능가합니다. Firefox 및 WebKit을 기본적으로 지원하며, 네트워크 오류에 대한 자동 재시도 및 향상된 요소 대기 API를 제공합니다.

2025년 봇 모범 사례

1. 프록시 로테이션

로테이션 전략

  • 데이터 파싱: 요청 5-20회마다 IP 변경
  • 계정 작업: 최대 120분 스티키 세션 유지
  • API 클라이언트: 세션당 하나의 IP 사용
  • Discord 봇: 24-48시간마다 하나의 IP 사용

2. 인간 행동 에뮬레이션

현실적인 봇 체크리스트

  • 타이밍 무작위화: 작업 간 0.5-3초의 무작위 지연 시간
  • 자연스러운 패턴: 주간 활동 시간, "수면" 시간 포함
  • 변동성: 때때로 오타를 내거나 행동을 취소
  • 다양성: 모든 작업을 동일하게 수행하지 않고 순서 변경
  • 마우스 움직임: 현실적인 궤적 에뮬레이션
  • 타이핑 속도: 40-80 WPM, 변동성 포함
  • 휴식 시간: 5-15분 간의 무작위 일시 중지
  • 지리적 일관성: IP가 계정의 시간대와 일치해야 함

3. 모니터링 및 로깅

모니터링 항목

  • 성공률: 성공적인 요청 비율 (>95% 유지)
  • 응답 시간: 프록시 지연 시간 (<2초)
  • 오류율: 429, 403, 503 오류 빈도
  • 프록시 상태: 풀 내 작동 중인 프록시 비율 (>90%)
  • 리소스 사용량: 서버의 CPU, RAM, 네트워크
  • 비용 추적: 프록시 지출 대 예산

권장 사항: 중요 지표에 대해 Telegram/Slack 알림을 설정하십시오. 문제 발생 시 신속하게 대응하는 것이 대규모 차단 및 다운타임을 방지하는 열쇠입니다.

4. 오류 처리

  • 지수 백오프 (Rate Limit 시)
  • 자동 재시도 (네트워크 오류 시, 최대 3회)
  • 서킷 브레이커 패턴 (손상된 프록시 처리)
  • 점진적 저하 — 백업 프록시로 전환
  • Dead Letter Queue (실패한 요청 처리)

ProxyCove로 봇 확장을 시작할 준비가 되셨나요?

ProxyCove는 모든 자동화 작업에 필요한 안정적인 프록시를 제공합니다. 195개 이상의 국가, 99%+ 가동 시간, 러시아어 24/7 지원.

$1.5/GB

데이터 센터 프록시

텔레그램, API 클라이언트

$2.7/GB

레지덴셜 프록시

디스코드, 웹 스크레이핑

$3.8/GB

모바일 프록시

소셜 미디어, 다중 계정

🎁 프로모션 코드 ARTHELLO — 첫 충전 시 +$1.3 추가 혜택!

ProxyCove에 가입하기 →

🎯 총 3부, 5,800+ 단어

파트 1: 프록시 필요성, 안티봇 시스템, 레이트 리밋, 봇 유형 (1,900+ 단어)
파트 2: 텔레그램, 디스코드, Selenium, Puppeteer용 프록시 설정 (1,950+ 단어)
피날레: 차단 방지 전략, 봇 확장, 실제 사례, 인프라 (1,950+ 단어)

최신 코드 예제, 모범 사례 및 실제 사례를 포함한 2025년 봇용 프록시 사용에 대한 종합 가이드.

마지막 파트에서 다룰 내용: 차단 방지 고급 전략, 수백 개 인스턴스로 봇 확장, 실제 사용 사례 및 2025년 트렌드 분석. 장기적인 봇 운영을 위한 안정적인 인프라 구축 방법을 알아봅니다.

2025년 차단 방지 전략

차단 및 탐지 회피는 자동화의 공격성과 신중함 사이의 균형을 맞추는 예술입니다. 2025년에는 AI와 행동 분석이 사용되므로 구식 방법은 더 이상 통하지 않습니다.

1. 다단계 프록시 전략

프록시 품질 피라미드

Tier 1 — 중요 작업:
모바일 프록시($3.8/GB) — 계정 등록, 초기 활동, 인증에 사용. 탐지 위험 최소화.

Tier 2 — 주요 작업:
레지덴셜 프록시($2.7/GB) — 일일 작업, 파싱, 콘텐츠 게시 등에 사용. 가격 대비 품질 균형이 좋음.

Tier 3 — 대량 작업:
데이터 센터 프록시($1.5/GB) — API 요청, 가용성 확인, 비공격적 스크레이핑에 사용. 대량 작업에 경제적.

분배 예시: 100개의 Instagram 계정을 관리하는 경우:

  • 모바일 프록시 (10개) — 신규 계정 및 복구용
  • 레지덴셜 프록시 (70개) — 주요 활동, 콘텐츠 게시용
  • 데이터 센터 프록시 (20개) — 분석 및 모니터링용

2. 계정 및 IP 워밍업

절대 공격적으로 시작하지 마십시오. 신규 계정과 IP는 본격적인 자동화를 시작하기 전에 "워밍업" 기간이 필요합니다.

워밍업 계획 (14일)

기간 활동 볼륨
1-3일차 프로필 채우기, 콘텐츠 보기 일일 10-20회 작업
4-7일차 팔로우, 좋아요, 댓글 일일 30-50회 작업
8-11일차 콘텐츠 게시, DM 전송 일일 50-100회 작업
12-14일차 전체 자동화 일일 100-200회 작업

황금률: 2-3일마다 활동량을 20-30%씩 늘리십시오. 활동량의 급격한 증가는 안티봇 시스템의 주요 트리거입니다.

3. 행동 마스킹

현실적인 봇 체크리스트

  • 타이밍 무작위화: 작업 간 0.5-5초의 무작위 지연 시간
  • 자연스러운 패턴: 주간 활동 시간, 휴식 시간 포함
  • 오류 및 오타: 가끔 오타를 내거나 행동을 취소
  • 다양성: 모든 작업을 동일하게 수행하지 않고 순서 변경
  • 마우스 움직임: 현실적인 궤적 에뮬레이션
  • 타이핑 속도: 40-80 WPM, 변동성 포함
  • 휴식 시간: 5-15분 간의 무작위 일시 중지
  • 지리적 일관성: IP가 계정의 시간대와 일치해야 함

4. 핑거프린팅 방어

최신 플랫폼은 브라우저 핑거프린팅을 사용하여 봇을 식별합니다. 특수 도구가 필요합니다.

🦊 안티 디텍트 브라우저

GoLogin, Multilogin, AdsPower — 각 계정에 고유한 핑거프린트 생성.

가격: 월 $49-99

🛡️ Playwright/Puppeteer 스텔스

헤드리스 브라우저 마스킹을 위한 무료 라이브러리.

가격: 무료

🔧 Undetected ChromeDriver

Selenium용 패치된 ChromeDriver로 자동 방어 기능 포함.

가격: 무료

경고: 최고의 프록시도 탐지 방어 기능이 없는 기본 Selenium을 사용하면 소용이 없습니다. 안티 디텍션 솔루션이나 스텔스 라이브러리에 투자해야 합니다.

봇 확장: 1개에서 100개 이상으로

확장 가능한 시스템 아키텍처

확장 가능한 시스템 구성 요소

1. 작업 큐 (Celery, RabbitMQ, Redis Queue)
워커 간 작업을 분배합니다. 수천 개의 작업을 병렬로 처리하는 데 필수적입니다.

2. 프록시 풀 관리자
프록시 풀 자동 관리: 헬스 체크, 로테이션, 부하 분산.

3. 브라우저 풀 (Selenium/Puppeteer용)
새로운 인스턴스 생성 대신 브라우저 세션 재사용. RAM과 시작 시간을 절약합니다.

4. 분산 Rate Limiter
다중 워커 간의 rate limit 동기화. Redis를 사용하여 동기화합니다.

5. 모니터링 및 알림 (Prometheus, Grafana)
실시간 메트릭 모니터링: 요청 성공률, 지연 시간, 프록시 사용량, 오류.

6. 중앙 집중식 로깅 (ELK Stack, Loki)
모든 워커의 로그를 집계하여 문제 진단 속도 향상.

리소스 계산

규모 봇/계정 수 프록시 서버 월별 비용
소규모 1-10 10-20 IP 1x VPS (4GB RAM) $50-100
중간 규모 10-50 50-100 IP 2-3x VPS (8GB RAM) $200-500
대규모 50-200 200-500 IP 5-10x VPS (16GB RAM) $1,000-2,500
엔터프라이즈 200+ 500+ IP Kubernetes 클러스터 $5,000+

팁: 소규모로 시작하여 단위 경제성(봇/계정당 ROI)을 확인한 후 확장하십시오. 자동화 프로젝트의 70%는 복잡성 과소평가로 인해 수익성이 없습니다.

프록시 비용 최적화

절약 전략

  • 스티키 세션: 요청마다 로테이션하는 대신 IP를 최대 120분 재사용
  • 정확한 타겟팅: 러시아 사이트 파싱에 미국 IP를 구매하지 않기
  • 트래픽 추정: 실제 트래픽 사용량 모니터링 (많은 사람들이 2-3배 초과 지불)
  • 계층적 접근: 70%의 작업에 데이터 센터 사용, 레지덴셜은 꼭 필요한 곳에만 사용
  • 대량 구매: ProxyCove는 볼륨 구매 시 할인 제공

실제 예시: 월 100,000 페이지 파싱:

  • 페이지당 평균 크기: 500KB
  • 총 트래픽: 50GB
  • 데이터 센터 프록시($1.5/GB) 사용 시: 월 $75
  • 레지덴셜 프록시($2.7/GB) 사용 시: 월 $135
  • 하이브리드 (70% DC + 30% Res): 월 ~$93 ← 최적

실제 사용 사례

사례 1: E-commerce 가격 모니터링

과제: 매일 50,000개 이상의 제품 가격 모니터링

해결책:

  • Puppeteer + ProxyCove 레지덴셜 프록시
  • 요청 10회당 IP 로테이션
  • 분산 아키텍처: 10개 워커
  • Rate limiting: 워커당 초당 5회 요청

결과: 3시간 만에 전체 파싱 완료, 차단 0건, 프록시 비용 약 $200/월

사례 2: Instagram 매스 팔로잉

과제: 50개 브랜드 Instagram 계정 홍보

해결책:

  • GoLogin 안티 디텍트 브라우저
  • ProxyCove 모바일 프록시 50개 (계정당 전용 IP)
  • 14일 워밍업: 일일 10→200회 작업
  • 인간 행동 에뮬레이션: 무작위 일시 중지, 오류 포함

결과: 6개월 동안 차단 0건, 팔로워 45,000명 증가, 프록시 비용 약 $570/월

사례 3: Telegram 봇 알림 발송

과제: 매일 100,000명 이상의 사용자에게 알림 발송

해결책:

  • 작업 큐(Celery)를 사용한 Python-telegram-bot
  • 부하 분산을 위한 ProxyCove 데이터 센터 프록시 5개
  • Rate limiting: 전역적으로 초당 30개 메시지
  • 429 오류 발생 시 지수 백오프 적용

결과: 55분 만에 100,000개 메시지 발송 완료, 전달률 99.8%, 프록시 비용 약 $30/월

사례 4: Discord 모더레이션 플릿

과제: 200개 Discord 서버 자동 모더레이션

해결책:

  • Node.js cluster를 사용한 Discord.js
  • ProxyCove 레지덴셜 IPv6 프록시 200개 (봇당 1 IP)
  • WebSocket 호환성을 위한 HTTPS 프록시 사용
  • 헬스 체크 및 연결 끊김 시 자동 재시작

결과: 99.9%의 안정적인 가동 시간, 일일 1M+ 이벤트 처리, 프록시 비용 약 $540/월

안정적인 인프라 구축

호스팅 선택

☁️ 클라우드 VPS

최고: DigitalOcean, Hetzner, Vultr
가격: 인스턴스당 월 $5-80
장점: 쉬운 확장
단점: IP가 블랙리스트에 자주 포함됨

🖥️ 전용 서버

최고: OVH, Hetzner Dedicated
가격: 월 $40-200
장점: 깨끗한 IP, 성능
단점: 확장 어려움

🏠 레지덴셜 서버

최고: 레지덴셜 IP 기반 자체 서버
가격: 자체 장비 비용
장점: 가장 깨끗한 IP
단점: 설정 복잡성

모니터링 및 알림

모니터링 항목

  • 성공률: 요청 성공 비율 (>95% 유지)
  • 응답 시간: 프록시 평균 지연 시간 (<2초)
  • 오류율: 429, 403, 503 오류 빈도
  • 프록시 상태: 풀 내 작동 중인 프록시 비율 (>90%)
  • 리소스 사용량: 서버의 CPU, RAM, 네트워크
  • 비용 추적: 프록시 지출 대 예산

권장 사항: 중요 지표에 대해 Telegram/Slack 알림을 설정하십시오. 문제 발생 시 신속하게 대응하는 것이 대규모 차단 및 다운타임을 방지하는 열쇠입니다.

결론 및 권장 사항

2025년 핵심 요약

  1. 프록시는 선택이 아닌 필수. 고품질 프록시 없이는 몇 시간 내에 봇이 차단됩니다.
  2. 레지덴셜 IP가 중요합니다. 데이터 센터 프록시는 2025년에는 가장 간단한 작업에만 유효합니다.
  3. 단일 프록시 유형은 모두에게 맞지 않습니다. 계층적 접근 방식을 사용하십시오: 중요 작업에는 모바일, 주요 작업에는 레지덴셜, API에는 데이터 센터.
  4. 스텔스 기술은 필수입니다. 탐지 방어 기능이 없는 Selenium/Puppeteer는 즉시 탐지됩니다.
  5. 워밍업이 차단을 방지합니다. 신규 계정과 IP는 활동량을 점진적으로 늘려야 합니다.
  6. 모니터링 = 생존. 실시간 모니터링 없이는 너무 늦을 때까지 문제를 알 수 없습니다.
  7. 확장은 아키텍처를 요구합니다. 작업 큐, 프록시 풀, 분산 레이트 리미팅은 사치가 아닌 최소 요구 사항입니다.
  8. 규모보다 ROI가 중요합니다. 100개의 수익 없는 봇보다 10개의 수익성 있는 봇이 낫습니다.

최종 권장 사항

초보자용 (봇/계정 1-10개)

  • ✅ ProxyCove 데이터 센터 프록시($1.5/GB)로 시작
  • ✅ 기성 라이브러리 사용 (python-telegram-bot, discord.js)
  • ✅ selenium-stealth 또는 puppeteer-extra-stealth 추가
  • ✅ 소량으로 2-4주 테스트
  • ✅ 성공률 및 오류 모니터링

중급자용 (봇/계정 10-50개)

  • ✅ ProxyCove 레지덴셜 프록시($2.7/GB)로 전환
  • ✅ 부하 분산을 위해 작업 큐(Celery, Bull) 도입
  • ✅ 헬스 체크 기능이 있는 프록시 풀 관리자 설정
  • ✅ 모니터링을 위해 Prometheus + Grafana 설정
  • ✅ 소셜 미디어용 안티 디텍트 브라우저 사용

고급 사용자용 (50개 이상 봇)

  • ✅ 하이브리드 프록시: 중요 작업용 ProxyCove 모바일 프록시($3.8/GB) + 주 작업용 레지덴셜
  • ✅ 수백 개의 워커 관리를 위한 Kubernetes 클러스터
  • ✅ Redis 기반 분산 레이트 리미터
  • ✅ 중앙 집중식 로깅을 위한 ELK Stack
  • ✅ 내결함성을 위한 서킷 브레이커 패턴
  • ✅ 자동화 전략 A/B 테스트

ProxyCove를 봇에 사용해야 하는 이유

낮은 지연 시간

봇의 중요 작업에 대한 평균 응답 시간 <200ms

🌍

195+ 국가

모든 자동화 작업에 대한 지리적 타겟팅 지원

🛡️

99%+ 가동 시간

봇의 장기적인 안정적인 운영에 중요

💬

24/7 지원

러시아어로 제공되는 기술 지원

🔄

유연한 로테이션

최대 120분 스티키 세션 또는 요청당 로테이션

💰

최적의 가격

투명한 가격 책정으로 $1.5/GB부터 시작

ProxyCove에서 지금 바로 봇 확장을 시작하세요

텔레그램 봇, 디스코드 자동화 및 웹 스크레이핑을 위한 전문 프록시에 액세스하십시오. 2분 만에 가입, 24/7 지원, 숨겨진 비용 없음.

$1.5/GB

데이터 센터

텔레그램 API, 모니터링

$2.7/GB

레지덴셜

디스코드, 스크레이핑 ⭐

$3.8/GB

모바일

소셜 미디어, 다중 계정

🎁 특별 혜택

프로모션 코드 ARTHELLO를 사용하고 첫 충전 시 +$1.3 추가 혜택을 받으세요!

24/7 러시아어 기술 지원 • 수수료 없음 • 투명한 가격 책정

🎯 총 3부, 5,800+ 단어

파트 1: 프록시 필요성, 안티봇 시스템, 레이트 리밋, 봇 유형 (1,900+ 단어)
파트 2: 텔레그램, 디스코드, Selenium, Puppeteer용 프록시 설정 (1,950+ 단어)
피날레: 차단 방지 전략, 봇 확장, 실제 사례, 인프라 (1,950+ 단어)

최신 코드 예제, 모범 사례 및 실제 사례를 포함한 2025년 봇용 프록시 사용에 대한 종합 가이드.