왜 나는 클라우드 스크레이퍼를 포기하고 로컬 퍼스트 Reddit 툴을 만들었는가

발행: (2025년 12월 19일 오전 09:05 GMT+9)
6 min read
원문: Dev.to

Source: Dev.to

클라우드 스크래퍼 함정

클라우드 기반 도구, 모니터링 서비스, 서버에 데이터를 전송하는 브라우저 확장 프로그램, 그리고 내 VPS에서 실행되는 파이썬 스크립트들을 여러 개 써봤습니다.

모두 같은 문제를 가졌습니다: Reddit가 서버 IP를 차단한다—아주 공격적으로. 간단한 스크래퍼를 실행한 지 5분 만에 내 VPS가 차단되었습니다. 프록시 회전이나 주거용 IP를 써도 소용없었습니다; Reddit이 계속 탐지했습니다. 몇 주마다 모니터링 도구에서 “Reddit에 문제가 발생했습니다”라는 메일을 받았습니다.

명백한 해결책

친구가 무심코 “그냥 네 컴퓨터에서 실행하면 안 되냐?”라고 했습니다.

나는 반대했습니다: 배포가 더 어렵고, 정기 결제와 사용량 추적이 복잡해지니까요. 하지만 앱을 내 노트북에서 실행하면 Reddit이 내 집 IP를 보게 됩니다—그냥 일반 사용자가 브라우징하는 것이죠. 회피를 위한 탐지가 없으니 바로 동작합니다.

내가 만든 것

Python + PyQt6 데스크톱 앱, 저장소는 SQLite.
Reddit Toolbox

핵심은 놀라울 정도로 간단합니다:

import requests
import sqlite3

def scrape_subreddit(name, limit=100):
    url = f"https://reddit.com/r/{name}.json?limit={limit}"

    # That's it. Just a GET request from user's IP.
    response = requests.get(url, headers={
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'
    })

    if response.status_code == 200:
        return response.json()['data']['children']
    else:
        # Fallback to RSS if JSON is blocked
        return scrape_via_rss(name)

RSS 폴백이 핵심입니다. 때때로 Reddit이 특정 패턴에 대해 JSON을 차단하지만 RSS는 열어 둡니다. 두 가지를 모두 갖추면 거의 완전히 실패하는 경우가 없습니다.

실제로 중요한 기능들

1. 필터가 있는 배치 스크래핑

서브레딧 이름 5개를 붙여넣고 각각 200개의 게시물을 약 10초 안에 스크래핑합니다. 필터 옵션:

  • 최대 댓글 수 (예: ≤ 8)
  • 최소 점수 (다운보트된 콘텐츠 제외)

2. 오른쪽 클릭 AI 답글

답글 초안을 자동 생성합니다(항상 크게 재작성됨).

3. 사용자 분석

DM을 보내기 전에 해당 사용자의 기록을 확인합니다: 계정 연령, 카르마, 활동 중인 서브레딧—빠른 sanity check.

수익화 문제

웹 앱이면 로그인, 기능 게이트, 서버‑사이드 제한을 제어할 수 있습니다. 데스크톱 앱은 사용자가 바이너리를 가지고 마음대로 사용할 수 있죠.

DRM, 라이선스 키, 하드웨어 지문을 고민했지만 $15/월 도구를 해킹하려는 사람은 원래 결제할 생각이 없다는 사실을 깨달았습니다.

그래서 간단히 했습니다: 앱은 세션 시작 시 Supabase API 호출로 구독 상태를 확인합니다. 실패하면 무료 티어(하루 15회 스크래핑)로 전환합니다. 우회가 가능하겠지만, 실제 업무에 쓰려는 사람들은 기꺼이 결제합니다.

받아들인 트레이드‑오프

  • 크로스‑디바이스 동기화 없음 – 데이터는 한 대의 머신에만 존재합니다.
  • 수동 업데이트 – 자동 업데이트 기능을 작업 중이지만 아직 미완성.
  • 텔레메트리 제로 – 사용자가 실제로 어떻게 쓰는지 알 수 없지만, 그게 더 좋습니다.

결과

  • 차단 관련 지원 티켓 제로(클라우드 도구에서 매일 발생하던 문제와는 달리).
  • 앱 크기 약 50 MB(Electron 기반이라면 150 MB 이상).
  • 로그인 없이 바로 써볼 수 있다는 점에 사용자들이 호응합니다: “드디어 내 이메일을 먼저 요구하지 않는 도구다.” 그 메일 한 줄이 내 주를 빛냈습니다.

로컬‑퍼스트가 의미 있는 경우

로컬‑퍼스트가 모든 상황에 맞는 건 아닙니다. 여전히 서버가 필요한 경우:

  • 실시간 협업
  • 다중 디바이스 동기화
  • 소셜 기능

하지만 API를 대상으로 하고 스크래퍼 방어가 강력한 경우, 싱글 유저 도구는 로컬‑퍼스트 접근이 충분히 고려할 만합니다.

도구 이름은 Reddit Toolbox 입니다. 무료 티어도 제공하니 한번 사용해 보세요.

PyQt, 아키텍처, 혹은 User‑Agent 문자열에 대한 제 의견에 대해 궁금한 점이 있으면 언제든 물어보세요.

Back to Blog

관련 글

더 보기 »