블로그로 돌아가기

로봇.txt와 프록시: 경쟁자를 합법적으로 크롤링하고 사이트 차단을 피하는 방법

프록시를 통한 윤리적 데이터 수집에 대한 완벽한 가이드: robots.txt 준수, 차단 회피 및 법적 위험 없이 경쟁사 데이터를 수집하는 방법.

📅2026년 3월 5일
```html

경쟁업체 데이터 크롤링은 마케터, 마켓플레이스 판매자 및 에이전시에게 일반적인 관행입니다. Wildberries에서 가격을 모니터링하고, Avito에서 광고를 수집하며, 경쟁업체의 제품군을 분석합니다. 그러나 대부분의 웹사이트는 대량 요청을 차단하고, robots.txt 파일을 무시하면 법적 문제를 일으킬 수 있습니다. 이 기사에서는 프록시를 사용하여 윤리적으로 크롤링하는 방법: 웹사이트 규칙을 준수하고 차단을 피하며 비즈니스에 위험을 주지 않고 데이터를 수집하는 방법을 살펴보겠습니다.

robots.txt란 무엇이며 웹사이트에 필요한 이유

robots.txt 파일은 웹사이트의 루트에 위치한 텍스트 문서로, 검색 로봇과 크롤러에게 어떤 섹션을 스캔할 수 있고 어떤 섹션은 금지되어 있는지를 알려줍니다. 예를 들어, 인터넷 쇼핑몰은 장바구니나 개인 계정의 색인을 금지하여 이러한 페이지가 Google에 노출되지 않도록 할 수 있습니다.

일반적인 robots.txt 파일은 다음과 같습니다:

User-agent: *
Disallow: /admin/
Disallow: /cart/
Disallow: /api/
Crawl-delay: 10

User-agent: Googlebot
Allow: /

Sitemap: https://example.com/sitemap.xml

지침 분석:

  • User-agent: * — 모든 봇에 대한 규칙 (별표는 "모든 봇"을 의미)
  • Disallow: /admin/ — /admin/ 섹션의 스캔 금지
  • Crawl-delay: 10 — 요청 간 10초 지연
  • User-agent: Googlebot — Google에 대한 특별 규칙 (모든 것이 허용됨)

웹사이트가 robots.txt를 사용하는 이유:

  1. 서버 과부하 방지 — 대량 크롤링은 서버에 부담을 주어 실제 사용자에게 느린 서비스를 제공합니다.
  2. 기술 페이지 숨기기 — 장바구니, 결제 양식, API 엔드포인트는 색인화되어서는 안 됩니다.
  3. 상업적 데이터 보호 — 마켓플레이스는 경쟁업체가 쉽게 전체 제품 카탈로그를 다운로드하는 것을 원하지 않습니다.
  4. 트래픽 절약 — 봇의 각 요청은 웹사이트 소유자에게 비용이 발생합니다.

중요: robots.txt는 권장 사항이지 기술적 장벽이 아닙니다. 이 파일은 물리적으로 접근을 차단하지 않지만, 규칙을 무시하면 IP 차단이나 소송으로 이어질 수 있습니다 (특히 미국과 유럽에서).

데이터 크롤링은 법률의 회색 지대에 있습니다. 각국마다 다른 규칙이 있지만, 소송을 피하기 위해 알아야 할 몇 가지 일반 원칙이 있습니다.

러시아의 법률

러시아에는 크롤링에 대한 특별한 법률이 없지만, 일반 규정이 적용됩니다:

  • 저작권 (민법 제1259조) — 저작권자의 허가 없이 고유한 텍스트, 사진, 제품 설명을 복사할 수 없습니다. 가격 및 특성 크롤링은 일반적으로 안전합니다. 이는 사실 데이터이기 때문입니다.
  • 개인 데이터 (152-FZ) — 사용자 개인 데이터(이름, 전화번호, 이메일)를 동의 없이 수집하는 것은 금지됩니다. 이는 소셜 미디어 프로필이나 연락처 데이터베이스 크롤링에 해당합니다.
  • 불공정 경쟁 (행정법 제14.33조) — 크롤링이 비즈니스 모델 복사 또는 고객을 오도하는 데 사용되면 최대 500,000 루블의 벌금을 받을 수 있습니다.

미국 및 유럽의 법률

미국과 EU의 법률은 더 엄격합니다:

  • CFAA (Computer Fraud and Abuse Act, 미국) — 무단 컴퓨터 시스템 접근은 범죄로 간주됩니다. robots.txt 위반은 "무단 접근"으로 해석될 수 있습니다. 유명한 사례: LinkedIn vs hiQ Labs (2022) — 법원은 공개 데이터 크롤링은 합법적이지만 기술적 장벽(예: CAPTCHA)을 무시하는 것은 합법적이지 않다고 판결했습니다.
  • GDPR (General Data Protection Regulation, EU) — EU 시민의 개인 데이터를 명시적 동의 없이 수집하는 것은 금지됩니다. 벌금은 최대 2천만 유로 또는 연간 매출의 4%입니다.
  • 서비스 약관 (Terms of Service) — 많은 웹사이트가 규칙에서 크롤링을 명시적으로 금지합니다. 위반 시 계약 위반으로 소송을 당할 수 있습니다.

실용적인 조언: 크롤링 전에 세 가지 문서를 확인하세요: robots.txt, 서비스 약관 및 대상 웹사이트의 개인정보 보호정책. 크롤링이 명시적으로 금지된 경우 대체 데이터 소스를 찾아보세요 (공식 API, 파트너 프로그램, 준비된 데이터 세트).

안전하게 크롤링할 수 있는 데이터

데이터 유형 위험 비고
제품 가격 낮음 사실 데이터로 저작권 보호를 받지 않음
제품 특성 낮음 기술 데이터는 안전함
고유한 설명 높음 저작권 보호를 받음
제품 사진 높음 저작권자의 허가가 필요함
사용자 연락처 치명적 152-FZ 및 GDPR 위반
공식 통계 낮음 공개 데이터는 안전함

윤리적인 크롤링: 위반 없이 데이터를 수집하는 방법

윤리적인 크롤링은 비즈니스 요구와 웹사이트 소유자에 대한 존중 사이의 균형입니다. 문제를 일으키지 않고 필요한 데이터를 수집할 수 있습니다.

윤리적인 크롤링의 기본 원칙

  1. robots.txt 준수 — 크롤링이 금지된 섹션은 우회하지 마세요. 대체 데이터 소스를 찾으세요.
  2. 요청 속도 제한 — 초당 1000개의 요청을 보내지 마세요. 서버에 과부하를 주지 않기 위해 요청 간 2-10초의 지연을 두세요.
  3. 크롤러의 User-Agent 사용 — 일반 사용자로 위장하지 마세요. 정직한 User-Agent를 명시하세요. 예: "MyCompanyParser/1.0 (contact@mycompany.com)". 이는 웹사이트 관리자와의 문제 발생 시 연락할 수 있게 합니다.
  4. 공개 데이터만 크롤링 — 비공식 섹션, API 또는 데이터베이스에 접근하려 하지 마세요.
  5. 복사한 데이터 재판매 금지 — 수집한 정보를 내부 용도로 사용하세요 (경쟁 분석, 가격 모니터링) 경쟁 서비스 생성에는 사용하지 마세요.
  6. 데이터 캐시 — 동일한 페이지를 여러 번 요청하지 마세요. 결과를 로컬에 저장하고 일정에 따라 업데이트하세요 (하루에 한 번, 일주일에 한 번).

크롤링하지 말아야 할 경우

크롤링이 문제를 일으키는 경우가 있습니다:

  • 웹사이트가 API를 제공하는 경우 — 많은 마켓플레이스 (Wildberries, Ozon, Yandex.Market)는 파트너를 위한 공식 API를 가지고 있습니다. 크롤링 대신 이를 사용하세요 — 더 빠르고 합법적이며 신뢰할 수 있습니다.
  • 데이터가 CAPTCHA 또는 인증으로 보호되는 경우 — 보호를 우회하는 것은 시스템 해킹으로 간주될 수 있습니다.
  • 웹사이트가 서비스 약관에서 크롤링을 명시적으로 금지하는 경우 — 소송 위험이 너무 높습니다.
  • 개인 데이터를 수집하는 경우 — 이는 GDPR 및 152-FZ 위반으로 큰 벌금을 초래합니다.

robots.txt를 올바르게 읽고 준수하는 방법

robots.txt 파일은 도메인의 루트에 위치합니다: https://example.com/robots.txt. 크롤링을 시작하기 전에 항상 이 파일을 확인하세요.

robots.txt의 주요 지침

지침 의미 예시
User-agent 어떤 봇에 대한 규칙 User-agent: * (모든 봇)
Disallow 크롤링 금지 섹션 Disallow: /admin/
Allow 허용된 섹션 (Disallow의 예외) Allow: /public/
Crawl-delay 요청 간 최소 지연 (초 단위) Crawl-delay: 10
Sitemap 사이트 맵 링크 (모든 페이지 목록) Sitemap: /sitemap.xml

robots.txt 예시 및 해석 방법

예시 1: 크롤링 전면 금지

User-agent: *
Disallow: /

이는 "모든 봇이 전체 웹사이트를 스캔하는 것이 금지됨"을 의미합니다. 이러한 웹사이트를 크롤링하는 것은 소유자의 규칙을 위반하는 것입니다. 대체 데이터 소스를 찾아보세요.

예시 2: 선택적 제한

User-agent: *
Disallow: /admin/
Disallow: /api/
Disallow: /cart/
Allow: /products/
Crawl-delay: 5

이는 "제품 섹션(/products/)은 크롤링할 수 있지만, /admin/, /api/, /cart/는 금지됨"을 의미합니다. 요청 간 5초의 지연을 두세요. 이는 정상적인 조건으로, 제한을 준수하며 제품을 크롤링할 수 있습니다.

예시 3: 특정 봇에 대한 규칙

User-agent: Googlebot
Allow: /

User-agent: *
Disallow: /
Crawl-delay: 10

이는 "Google은 전체 웹사이트를 스캔할 수 있지만, 다른 모든 봇은 금지됨"을 의미합니다. Google이 아닌 경우 크롤링이 금지됩니다.

크롤링 전 robots.txt 확인 방법

대부분의 프로그래밍 언어는 robots.txt를 자동으로 확인할 수 있는 라이브러리를 가지고 있습니다. Python의 예:

from urllib.robotparser import RobotFileParser

rp = RobotFileParser()
rp.set_url("https://example.com/robots.txt")
rp.read()

# 페이지 크롤링 가능 여부 확인
url = "https://example.com/products/item123"
user_agent = "MyParser/1.0"

if rp.can_fetch(user_agent, url):
    print("크롤링 허용됨")
else:
    print("robots.txt에 의해 크롤링 금지됨")

이는 규칙을 자동으로 확인하고 특정 URL을 크롤링할 수 있는지 여부를 알려줍니다.

Rate Limiting 및 요청 간 지연

Rate Limiting (요청 속도 제한)은 웹사이트를 과부하로부터 보호하는 것입니다. 너무 많은 요청을 짧은 시간에 보내면 서버가 IP를 차단하거나 CAPTCHA를 표시할 수 있습니다.

지연을 준수하는 것이 중요한 이유

  • IP 차단 방지 — 웹사이트는 하나의 IP에서 요청 빈도를 추적합니다. 분당 100개의 요청을 보내면 봇으로 차단됩니다.
  • 서버 부하 감소 — 대량 크롤링은 웹사이트를 "다운"시킬 수 있습니다. 특히 저렴한 호스팅의 작은 리소스인 경우 더욱 그렇습니다.
  • robots.txt의 Crawl-delay 준수 — 웹사이트가 10초의 지연을 지정한 경우, 이 규칙을 무시하는 것은 비윤리적입니다.
  • 더 자연스러운 행동 — 일반 사용자는 초당 10페이지를 열지 않습니다. 지연은 크롤러가 실제 사람처럼 보이게 합니다.

다양한 작업에 대한 권장 지연

크롤링 유형 요청 간 지연 비고
작은 웹사이트 (1000페이지 이하) 5-10초 서버 성능이 낮음
중간 웹사이트 (온라인 쇼핑몰) 2-5초 최적의 균형
대형 마켓플레이스 (Wildberries, Ozon) 1-3초 강력한 인프라, 그러나 강한 보호
API 엔드포인트 API의 제한에 따라 (일반적으로 분당 10-100 요청) API 문서를 참조하세요
소셜 미디어 (Instagram, VK) 10-30초 매우 엄격한 제한, 높은 차단 위험

코드에서 지연을 구현하는 방법

time 라이브러리를 사용한 Python의 예:

import time
import requests

urls = [
    "https://example.com/product1",
    "https://example.com/product2",
    "https://example.com/product3"
]

for url in urls:
    response = requests.get(url)
    print(f"크롤링 완료: {url}")
    
    # 다음 요청 전 3초 지연
    time.sleep(3)

더 복잡한 시나리오의 경우, 무작위 지연(random delay)을 사용하여 행동을 더욱 자연스럽게 만드세요:

import time
import random

for url in urls:
    response = requests.get(url)
    
    # 2초에서 5초 사이의 무작위 지연
    delay = random.uniform(2, 5)
    time.sleep(delay)

윤리적인 크롤링을 위한 프록시 회전

robots.txt를 준수하고 지연을 두더라도, 하나의 IP에서 대량의 데이터를 크롤링하면 의심을 받을 수 있습니다. 프록시 회전은 다양한 IP 주소 간에 요청을 분산시켜 여러 실제 사용자처럼 행동하도록 도와줍니다.

프록시 회전이 필요한 이유

  • Rate Limiting 우회 — 하나의 IP에서 시간당 100개의 요청 제한이 있다면, 10개의 프록시를 사용하면 시간당 1000개의 요청을 할 수 있습니다.
  • 지리적 분산 — 지역별 데이터 크롤링을 위해 (예: 모스크바와 블라디보스토크의 Wildberries 가격) 다양한 도시의 프록시가 필요합니다.
  • 의심 감소 — 다양한 IP에서의 요청은 실제 사용자 트래픽처럼 보입니다.
  • 백업 — 하나의 프록시가 차단되면 크롤러가 자동으로 다른 프록시로 전환됩니다.

윤리적인 크롤링을 위한 프록시 유형

프록시 유형 장점 단점 사용 시기
주거용 실제 가정 사용자 IP, 차단 위험이 낮음 다른 유형보다 비쌈 강력한 보호를 가진 소셜 미디어, 마켓플레이스 크롤링
모바일 모바일 통신사 IP, 최대 신뢰도 가장 비쌈, 사용 가능한 IP가 적음 Instagram, TikTok, 모바일 애플리케이션 크롤링
데이터 센터 저렴하고 높은 속도 쉽게 감지되며, 종종 블랙리스트에 있음 간단한 웹사이트 크롤링, 테스트

윤리적인 크롤링을 위한 추천: 자동 프록시 회전이 가능한 주거용 프록시를 사용하세요. 이들은 비용과 신뢰성의 균형을 제공하며, IP는 일반 사용자처럼 보입니다.

프록시 회전 전략

  1. 요청마다 회전 — 각 요청이 새로운 IP에서 이루어집니다. 엄격한 제한이 있는 웹사이트(소셜 미디어, 마켓플레이스)에서 적합합니다.
  2. 시간에 따른 회전 (5-10분마다) — 하나의 IP가 여러 요청에 사용되다가 변경됩니다. 더 자연스러운 행동입니다.
  3. Sticky sessions (고정 세션) — 하나의 IP가 사용자 세션 전체에 사용됩니다 (예: 인증 + 개인 계정 크롤링). 인증이 필요한 웹사이트에 필수입니다.
  4. 지리적 회전 — 각 지역에 해당하는 프록시를 사용합니다. 예: 모스크바의 Wildberries 가격 크롤링 — 모스크바의 프록시 사용.

Python에서 프록시 회전 예시

import requests
import random
import time

# 프록시 목록 (실제 프록시로 교체)
proxies_list = [
    {"http": "http://user:pass@proxy1.example.com:8080"},
    {"http": "http://user:pass@proxy2.example.com:8080"},
    {"http": "http://user:pass@proxy3.example.com:8080"}
]

urls = [
    "https://example.com/product1",
    "https://example.com/product2",
    "https://example.com/product3"
]

for url in urls:
    # 무작위 프록시 선택
    proxy = random.choice(proxies_list)
    
    try:
        response = requests.get(url, proxies=proxy, timeout=10)
        print(f"{url}를 {proxy}를 통해 크롤링 완료")
    except Exception as e:
        print(f"프록시 {proxy}에서 오류 발생: {e}")
    
    # 3초 지연
    time.sleep(3)

실제 사례: 마켓플레이스 및 경쟁업체 크롤링

비즈니스를 위한 윤리적인 크롤링의 실제 시나리오를 살펴보겠습니다.

사례 1: Wildberries 가격 모니터링

과제: Wildberries에서 제품을 판매하고 있으며, 경쟁업체의 가격을 추적하여 자신의 가격을 조정하고 싶습니다.

문제:

  • Wildberries는 빈번한 요청 시 IP를 차단합니다.
  • 가격은 배송 지역에 따라 달라집니다.
  • 하루에 100-500개의 제품을 크롤링해야 합니다.

윤리적인 해결책:

  1. robots.txt 확인 — Wildberries는 제품 카드 크롤링을 허용하지만 API 엔드포인트는 금지합니다.
  2. 주거용 프록시 사용 — 각 지역 (모스크바, 상트페테르부르크, 노보시비르스크)에 해당하는 프록시를 사용합니다.
  3. 요청마다 회전 — 각 제품을 새로운 IP로 크롤링합니다.
  4. 2-3초 지연 — 요청 간에 지연을 둡니다.
  5. 하루에 한 번 크롤링 — 매시간 가격을 업데이트하지 않고, 매일 모니터링으로 충분합니다.

결과: 차단 없이 경쟁업체의 최신 가격을 얻을 수 있습니다. Wildberries는 요청이 시간과 IP에 분산되어 비정상적인 부하를 감지하지 않습니다.

사례 2: Avito 광고 크롤링

과제: 부동산 중개인으로서, 시장 분석을 위해 귀하의 도시에서 아파트 판매 광고를 모두 수집하고 싶습니다.

문제:

  • Avito는 의심스러운 활동 시 CAPTCHA를 표시합니다.
  • 5000개 이상의 광고를 크롤링해야 합니다.
  • 데이터는 매일 업데이트됩니다.

윤리적인 해결책:

  1. robots.txt 확인 — Avito는 광고 페이지 크롤링을 허용하지만, Crawl-delay: 5초 제한이 있습니다.
  2. 주거용 프록시 사용 — 10개의 요청마다 회전 (각 요청마다 회전하지 않도록 의심을 피합니다).
  3. 5-7초 지연 — robots.txt의 Crawl-delay를 준수합니다.
  4. 야간에 크롤링 — 웹사이트의 부하가 최소화되는 시간 (오전 2시-6시)에 수행합니다.
  5. 데이터 캐시 — 동일한 광고를 두 번 크롤링하지 않고, 결과를 데이터베이스에 저장합니다.

결과: 하룻밤 사이에 모든 새로운 광고를 CAPTCHA와 차단 없이 수집합니다. Avito는 과부하를 경험하지 않으며, 필요한 데이터를 얻습니다.

사례 3: 경쟁업체의 제품군 분석

과제: 전자상거래 웹사이트 소유자로서, 경쟁업체에 어떤 새로운 제품이 있는지 알고 싶습니다.

문제:

  • 경쟁업체의 웹사이트는 보호된 호스팅과 안티봇 시스템을 사용합니다.
  • 10,000개의 제품 카탈로그를 크롤링해야 합니다.
  • 매주 이를 수행하고 싶습니다.

윤리적인 해결책:

  1. robots.txt 확인 — /catalog/ 크롤링이 허용되며, /admin/ 및 /api/는 금지됩니다.
  2. Sitemap 사용 — 모든 페이지를 수동으로 탐색하는 대신 sitemap.xml에서 URL 목록을 가져옵니다 (더 빠르고 불필요한 부하를 생성하지 않음).
  3. 5분마다 회전하는 주거용 프록시 — 하나의 IP가 20-30개의 요청을 수행한 후 변경됩니다.
  4. 3-5초 지연 — 일반 사용자 행동을 모방합니다.
  5. 새로운 제품만 크롤링 — 현재 카탈로그를 이전 카탈로그와 비교하고 변경 사항만 크롤링합니다.

결과: 매주 경쟁업체의 신제품 목록을 차단 없이 얻습니다. 경쟁업체의 웹사이트는 문제를 겪지 않으며, 경쟁 우위를 확보합니다.

규칙 준수를 위한 자동화 도구

윤리적인 크롤링을 간소화하고 자동으로 robots.txt를 준수하는 도구가 있습니다.

Scrapy (Python)

Scrapy는 Python에서 크롤링을 위한 인기 있는 프레임워크입니다. 이 프레임워크는 robots.txt를 자동으로 확인하고 규칙을 준수합니다.

Scrapy에서 robots.txt 준수 설정:

# settings.py

# robots.txt 준수 활성화
ROBOTSTXT_OBEY = True

# 요청 간 지연 (초 단위)
DOWNLOAD_DELAY = 3

# 무작위 지연 (0.5에서 1.5 * DOWNLOAD_DELAY 사이)
RANDOMIZE_DOWNLOAD_DELAY = True

# 하나의 도메인에 대한 동시 요청 제한
CONCURRENT_REQUESTS_PER_DOMAIN = 1

# 크롤러의 User-Agent
USER_AGENT = 'MyCompanyParser/1.0 (+http://mycompany.com/bot)'

이러한 설정으로 Scrapy는 크롤링 전에 robots.txt를 자동으로 확인하고 모든 규칙을 준수합니다.

Apify (클라우드 플랫폼)

Apify는 코드 없이 웹 스크래핑을 위한 클라우드 플랫폼입니다. 시각적 인터페이스를 통해 크롤러를 생성하고, Apify는 자동으로 프록시 및 제한 준수를 관리합니다.

윤리적인 크롤링을 위한 장점:

  • 내장된 프록시 회전 (주거용 및 데이터 센터)
  • 자동으로 robots.txt 준수
  • 인터페이스를 통한 지연 설정
  • 스케줄 설정 (하루/주에 한 번 크롤링)

Octoparse (코드 없는 크롤러)

Octoparse는 프로그래밍 없이 크롤링을 위한 데스크탑 애플리케이션입니다. 코드를 작성할 수 없는 마케터와 판매자에게 적합합니다.

Octoparse에서 윤리적인 크롤링 설정하는 방법:

  1. 작업 설정(Task Settings) 열기
  2. "robots.txt 존중" 활성화
  3. 3-5초 지연 설정
  4. "Proxy Settings"에서 프록시 연결
  5. 스케줄 설정 (Schedule)

Puppeteer/Playwright (JavaScript)

Puppeteer와 Playwright는 브라우저 자동화를 위한 라이브러리입니다. JavaScript 렌더링 웹사이트 크롤링에 적합합니다.

Puppeteer를 사용한 윤리적인 크롤링 예시:

const puppeteer = require('puppeteer');
const robotsParser = require('robots-parser');

async function ethicalScrape(url) {
  // robots.txt 확인
  const robots = robotsParser('https://example.com/robots.txt', 
    'MyParser/1.0');
  
  if (!robots.isAllowed(url)) {
    console.log('robots.txt에 의해 크롤링 금지됨');
    return;
  }
  
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  
  // 페이지 로드 전 지연
  await new Promise(resolve => setTimeout(resolve, 3000));
  
  await page.goto(url);
  const data = await page.evaluate(() => {
    return document.querySelector('h1').innerText;
  });
  
  console.log(data);
  await browser.close();
}

ethicalScrape('https://example.com/product1');

결론

프록시를 통한 윤리적인 크롤링은 비즈니스 요구와 웹사이트 소유자에 대한 존중 사이의 균형입니다. robots.txt를 준수하고 요청 간 지연을 두며 프록시 회전을 사용하면 법적 위험과 차단 없이 필요한 데이터를 수집할 수 있습니다. 주요 원칙: 크롤링 전에 robots.txt를 확인하고, 요청 속도를 제한하며, 정직한 User-Agent를 사용하고, 공개 데이터만 크롤링하세요. 이는 비즈니스를 법적 소송으로부터 보호하고 크롤러의 안정적인 작동을 보장합니다.

마켓플레이스, 경쟁업체 웹사이트를 크롤링하거나 시장 분석을 위한 데이터를 수집할 계획이라면, 자동 프록시 회전이 가능한 주거용 프록시를 사용하는 것을 권장합니다. 이들은 비용과 신뢰성의 균형을 제공합니다.

```