부수 프로젝트를 위해 YouTube Data API v3 할당량을 짜내며 배운 점
Source: Dev.to
TL;DR
기본 10,000 단위/일 할당량은 약 10개의 순진한 사용자 요청만으로 소진됩니다. 세 가지 트릭을 사용해 사용자당 비용을 약 50배 줄이고 TubeVocab을 무료 티어에서 배포할 수 있었습니다.
퀵스타트에 포함되지 않은 할당량 산술
- 기본 일일 할당량: 10,000 단위.
search.list– 호출당 100 단위 (쿼리로 동영상 찾기).videos.list– 호출당 1 단위 (ID를 얻은 뒤 메타데이터 가져오기).captions.list– 50 단위 (사용 가능한 자막 목록).captions.download– 200 단위 (자막 데이터 다운로드).
일반적인 사용자 흐름 – 채널 검색 → 동영상 선택 → 자막 로드 → 인터랙티브 플레이어 렌더링 – 은 대략 다음과 같습니다:
100 (search) + 1 (videos) + 50 (captions list) + 200 (download) = 351 units
하루 10,000 단위라면 28세션만 사용해도 무료 할당량이 소진됩니다.
사용자당 비용을 ~50배 줄인 세 가지 트릭
1. 알려진 ID에 search.list를 사용하지 않기
사용자가 YouTube URL을 붙여넣으면 동영상 ID가 이미 URL에 포함됩니다. 이를 파싱하고 search.list를 건너뛰세요.
// Bad: 붙여넣은 URL당 100 단위
const result = await youtube.search.list({
q: pastedUrl,
type: 'video',
part: 'snippet'
});
// Good: 0 단위, 정규식으로 ID 추출
const id = pastedUrl.match(/(?:v=|youtu\.be\/)([\w-]{11})/)?.[1];
const result = await youtube.videos.list({
id,
part: 'snippet,contentDetails'
}); // 1 unit
이 변경으로 평균 붙여넣기 흐름이 351 → 251 단위로 감소합니다.
2. 공식 captions.* 엔드포인트 완전 배제
captions.download는 200 단위가 들고 OAuth가 필요합니다(사용자가 동영상 소유자여야 함). 소유자가 아닌 경우, 할당량에 포함되지 않는 비공식 XML 엔드포인트를 사용하세요:
https://video.google.com/timedtext?lang=en&v=VIDEO_ID
반환된 XML을 파싱해 타임스탬프가 포함된 전사본을 얻을 수 있습니다(0 할당량).
참고: 이 엔드포인트는 비공식이므로, youtube-transcript-api 방식으로 스크래핑하는 백업을 유지합니다. 두 방식을 결합하면 공식 캡션 할당량을 전혀 사용하지 않고도 약 95 %의 자막 적중률을 얻습니다.
이후 “자막 로드” 비용이 250 → 1 단위로 감소했습니다.
3. 동영상 ID 수준에서 적극적으로 캐시하기
메타데이터, 자막, 썸네일은 동영상 자체가 바뀌지 않는 한 모든 조회에서 동일합니다. 이러한 자산을 동영상 ID별 캐시(SQLite 등)로 저장하고 만료 없이 유지합니다. 캐시된 동영상을 다시 볼 때는 할당량이 전혀 소모되지 않습니다.
약 500개의 인기 동영상을 캐시해 두면 세션당 한계 비용이 사실상 0이 되며, 할당량은 처음 보는 동영상에만 사용됩니다.
실제 배포 결과
- 새 동영상 세션 평균: ~2 단위 (
videos.list+ 가끔 백업) - 캐시된 동영상 세션 평균: 0 단위
무료 티어는 이제 하루에 약 5,000개의 새로운 동영상을 지원할 수 있어 별도 예산 관리가 필요 없습니다—사이드 프로젝트에 충분한 여유가 있습니다.
핵심 요약: YouTube Data API를 사용하는 어떤 서비스든(어휘 도구, 접근성, 검색, 분석 등)
search.list를 할당량 소모원으로 여기고, 가능하면captions.*를 피하며, 동영상 ID별로 결과를 영구히 캐시하면 무료 티어가 실제로 넉넉해집니다. 이 스택으로 TubeVocab을 만들었으며, 할당량 계산이 가장 과소평가된 기술적 위험이었습니다. 누군가에게 일주일 정도의 시간을 절약해 주길 바랍니다.