VM 의 공인 IP 가 YouTube 봇 차단을 당했다 — 진단과 우회 옵션

n8n 워크플로에서 YouTube 영상 자막을 받아와 LLM 으로 요약하는 흐름을 만들고 있었다. 그런데 같은 코드가 로컬 노트북에서는 잘 동작하는데, 운영 VM 에서만 자막이 안 잡혔다. 그것도 자막이 분명히 켜져 있는 TED 강연에서.

from youtube_transcript_api import YouTubeTranscriptApi
  YouTubeTranscriptApi.get_transcript("jNQXAC9IVRw")
  # → youtube_transcript_api._errors.TranscriptsDisabled

“자막이 비활성화돼있다” 는 응답. 실제 영상에는 자막이 있다. 즉 라이브러리가 자막 트랙을 못 찾는 게 아니라, YouTube 가 우리 요청에 자막 메타데이터 자체를 안 돌려주고 있는 것이었다.

1. yt-dlp 도 더 노골적인 메시지를 띄운다

같은 영상으로 yt-dlp --skip-download --print title 을 시도하면 메시지가 훨씬 노골적이다.

ERROR: [youtube] jNQXAC9IVRw:
    Sign in to confirm you're not a bot.

“봇이 아닌지 확인하려면 로그인해라”. YouTube 가 요청 출처를 의심스러워한다는 뜻이고, 보통은 요청 IP 단위로 적용되는 일시적·반영구적 차단이다.

2. IP 차단인지 다른 문제인지 — 다른 머신에서 재현 시도

같은 코드를 로컬 노트북, 그리고 다른 클라우드 인스턴스에서 돌려봤다. 둘 다 정상. 이 VM 의 공인 IP 에서만 차단되고 있었다.

Oracle Cloud, AWS, GCP 등 대형 클라우드 사업자의 IP 대역은 봇/스크래핑 트래픽이 워낙 많이 나오기 때문에 YouTube 가 일찌감치 신호로 잡고 있다. 어느 시점에 일반 가정용 IP 처럼 통과해주다가, 어느 시점에 갑자기 차단이 들어온다. 이번이 그 경계를 넘은 시점이었던 셈.

3. 그래도 살아있는 경로 — oEmbed, watch 페이지 HTML

전부 막힌 건 아니다. 다음 두 경로는 차단되지 않았다.

# oEmbed — 제목 / 채널명만
  curl -s "https://www.youtube.com/oembed?url=https://youtu.be/jNQXAC9IVRw&format=json"

  # watch 페이지 HTML — description, duration, 일부 메타
  curl -sL "https://www.youtube.com/watch?v=jNQXAC9IVRw" | grep -oP '"description":"[^"]+"' | head -1

자막 본문은 못 받지만, 영상 설명(description) 과 제목 정도는 가져올 수 있다. 자막이 부실해도 영상 설명이 잘 쓰여 있는 채널(강연, 리뷰, 튜토리얼)은 description 만으로도 꽤 쓸 만한 요약이 나온다. 일단 폴백으로 충분.

4. 자막 본문을 정말 받으려면 — 옵션 셋

description 으로는 안 되는 경우(음악, 짧은 클립, 설명 없는 vlog 등)가 있다. 그때 쓸 수 있는 우회 옵션 세 가지.

(a) Residential 프록시 경유

가정용 IP 를 잠시 빌려 요청하는 방식. Datacenter 프록시는 같이 막혀있을 가능성이 높으므로 Residential 만 유효하다.

from youtube_transcript_api import YouTubeTranscriptApi
  from youtube_transcript_api.proxies import WebshareProxyConfig

  api = YouTubeTranscriptApi(
      proxy_config=WebshareProxyConfig(
          proxy_username="...", proxy_password="...",
      ),
  )
  api.get_transcript("jNQXAC9IVRw")
  • 비용: 트래픽 단가가 GB 당 수 달러대. 자막은 영상당 KB 단위라 작은 플랜으로 매우 오래 쓸 수 있다.
  • 함정: 영상 파일을 다운로드하면 GB 가 빠르게 사라진다. 자막용으로만 쓰는 게 비용 효율적.

(b) Whisper STT 사이드카

자막 트랙을 받지 못해도, 영상의 오디오 트랙은 별도 추출이 가능한 경우가 있다. 추출한 오디오를 OpenAI Whisper 또는 자체 호스팅 Whisper 에 넣어 트랜스크립션. 자막 없는 영상까지 커버되지만 비용·지연이 크다.

(c) 외부 자막 API

Supadata, Apify 같은 외부 서비스가 자막을 받아주는 엔드포인트를 판다. 자체 프록시 관리 부담이 없는 대신, 영상 수에 따라 요금이 빠르게 누적된다.

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤