YouTube API 쿼터는 하루 10,000 Units/Day. 100K 영상을 초과하지 않고 추적하는 방법

발행: (2026년 2월 20일 오후 08:23 GMT+9)
12 분 소요
원문: Dev.to

Source: Dev.to

Siya @ Business

YouTube Data API v3로 뭔가를 만든 적이 있다면, 벽에 부딪힌 적이 있을 겁니다.

Google은 하루에 10,000 쿼터 유닛을 제공합니다. 단일 search.list 호출에 100 유닛이 소모된다는 사실을 깨닫기 전까지는 관대하게 들릴 수 있죠. 즉, 하루에 100번의 검색만 할 수 있다는 의미입니다. 취미 프로젝트라면 괜찮을 수도 있지만, 수천 개의 동영상을 추적하는 프로덕션 앱이라면 바로 사용이 불가능합니다.

저는 바로 이 문제에 직면했습니다. ContentStats를 구축하면서—YouTube, TikTok, Instagram 전반에 걸쳐 조회수, 좋아요, 댓글, 공유 수를 추적하는 비디오 분석 API입니다—수만 개의 동영상에 대해 하루에 여러 번 통계를 가져와야 했습니다.

다음은 각 엔드포인트가 실제로 얼마나 비용이 드는지와, 제가 이를 해결하기 위해 취한 방법을 정리한 내용입니다.

모든 YouTube API 호출의 실제 비용

대부분의 개발자는 엔드포인트마다 할당량 비용이 얼마나 크게 다른지 깨닫지 못합니다:

EndpointCost per CallCalls per Day (10 K quota)
search.list100 units100
videos.list1 unit10 000
channels.list1 unit10 000
commentThreads.list1 unit10 000
playlists.list1 unit10 000
playlistItems.list1 unit10 000
videos.insert (upload)1 600 units6
thumbnails.set50 units200

문제는 명확합니다: search.listvideos.list보다 100배 더 비쌉니다. 영상을 찾기 위해 search.list를 사용하고, 그 후 videos.list로 통계를 가져온다면 영상당 101 유닛을 소모하게 됩니다. 하루에 10 K 유닛을 사용할 경우, 최대 99개의 영상만 처리할 수 있습니다.

내 할당량을 절약한 최적화

첫 번째로 배운 점: 이미 비디오 ID가 있다면 search.list를 절대 사용하지 말라.

videos.list요청당 최대 50개의 비디오 ID를 받아들이며 비용은 1 유닛에 불과합니다. 즉, 올바르게 배치하면 하루에 500 000개의 비디오 통계를 가져올 수 있습니다:

// 나쁨: 1 비디오 = 1 유닛
const response = await youtube.videos.list({
  part: 'statistics,snippet',
  id: 'dQw4w9WgXcQ'
});

// 좋음: 50 비디오 = 1 유닛
const response = await youtube.videos.list({
  part: 'statistics,snippet',
  id: videoIds.slice(0, 50).join(',')
});

배치를 사용하면 10 000 유닛으로 다음을 얻을 수 있습니다:

  • 10 000 호출 × 호출당 50 비디오 = 하루에 500 000 비디오‑통계 조회

이는 search.list를 사용했을 때 얻을 수 있는 99개의 비디오와는 엄청난 차이입니다.

하지만 더 큰 문제가 있습니다

최적화를 적용하더라도 YouTube API에는 근본적인 제한이 있습니다:

  • 쿼터는 태평양 표준시 기준 자정에 초기화됩니다 — 여러분의 현지 시각이 아니라. 사용자가 유럽이나 아시아에 있다면, 그들의 피크 시간대에 쿼터가 소진되어 남은 것이 없게 됩니다.
  • 웹훅이나 스트리밍 API가 없습니다. 폴링을 해야 합니다. 시간당 업데이트를 원한다면, 영상당 하루에 24번의 API 호출을 하게 됩니다. 1 000개의 영상이라면 480개의 배치 요청—즉 하나의 지표만을 위해서도 480 단위가 소모됩니다.
  • 쿼터 증액을 요청하려면 컴플라이언스 감사를 받아야 합니다. Google의 quota extension form에서는 개인정보 처리방침, 서비스 약관, 그리고 영상 walkthrough 등 앱에 대한 상세 검토를 요구합니다. 승인은 몇 주에서 몇 달이 걸릴 수 있으며, 많은 요청이 거부됩니다.
  • 쿼터 제한 외에도 속도 제한이 존재합니다. 쿼터가 무제한이라 하더라도 초당 속도 제한에 걸려 대량 작업이 느려집니다.

내가 만든 결과물

수개월간 할당량 제한과 씨름한 끝에, 나는 이 모든 복잡성을 처리하는 전용 비디오‑분석 레이어인 ContentStats를 구축했습니다:

  • 할당량 제한 없음 — 필요에 따라 원하는 만큼 비디오를 추적
  • 시간별 스냅샷 — 자동 폴링으로 cron 작업을 관리할 필요 없음
  • 멀티‑플랫폼 — YouTube, TikTok, Instagram, X에 대해 동일한 API 제공
  • 간단한 REST API — 하나의 엔드포인트, 하나의 API 키, OAuth 흐름 없음

비디오 통계를 가져오는 예시는 다음과 같습니다:

curl https://api.contentstats.io/v1/videos/dQw4w9WgXcQ \
  -H "Authorization: Bearer YOUR_API_KEY"
{
  "video_id": "dQw4w9WgXcQ",
  "platform": "youtube",
  "current_stats": {
    "views": 1500000000,
    "likes": 22000000,
    "comments": 3200000
  },
  "tracked_since": "2026-01-15T00:00:00Z",
  "snapshots_count": 720
}

할당량을 관리할 필요가 없습니다. OAuth 토큰을 갱신할 필요도 없습니다. 배치 로직도 필요 없습니다.

YouTube API를 계속 사용할 경우 실용적인 팁

공식 API를 직접 사용해야 한다면, 가장 중요한 최적화 방법은 다음과 같습니다:

  1. 캐시를 적극적으로 사용하세요
    YouTube 통계는 매초 변하지 않습니다. 응답을 최소 5~15분 동안 캐시하세요. Redis 예시:

    const CACHE_TTL = 15 * 60; // 15 minutes
    
    async function getVideoStats(videoId) {
      const cached = await redis.get(`yt:${videoId}`);
      if (cached) return JSON.parse(cached);
    
      const response = await youtube.videos.list({
        part: 'statistics',
        id: videoId
      });
    
      const stats = response.data.items[0]?.statistics;
      await redis.setex(`yt:${videoId}`, CACHE_TTL, JSON.stringify(stats));
      return stats;
    }
  2. 필요한 part만 요청하세요
    part 파라미터는 추가 할당량을 소모하지 않지만 응답 크기와 지연 시간을 늘립니다. 통계만 필요하면 statistics만 요청하고 snippet, contentDetails 등은 생략하세요.

  3. fields 파라미터를 사용해 페이로드를 줄이세요

    const response = await youtube.videos.list({
      part: 'statistics',
      id: videoIds.join(','),
      fields: 'items(id,statistics(viewCount,likeCount))'
    });
  4. 할당량 사용량을 모니터링하세요
    알림(예: Cloud Monitoring, 맞춤 대시보드)을 설정해 일일 한도에 가까워질 때를 파악하고, 비핵심 요청을 제한하거나 연기할 수 있도록 하세요.

  5. 가능한 한 배치 처리하세요
    videos.list의 50개 ID 제한을 활용하세요. ID를 50개씩 묶어 배치하고 동시에 처리하되 초당 속도 제한을 준수하세요.

이러한 패턴을 적용하면 10 K 일일 할당량을 많은 프로덕션 사용 사례에 충분히 확장할 수 있습니다—하지만 정말 대규모 추적이 필요할 경우 ContentStats와 같은 전용 분석 서비스를 사용하는 것이 가장 신뢰할 수 있는 해결책입니다.

할당량 사용량 모니터링

실시간 할당량 사용량을 확인하려면 Google Cloud Console 로 이동하세요. 사용량이 80 %에 도달하면 알림을 설정하여 새벽 2 시의 quotaExceeded 오류에 놀라지 않도록 하세요.

다중 API 키 사용 (주의)

각 Google Cloud 프로젝트마다 10,000‑단위 할당량이 부여됩니다. 여러 프로젝트를 만들고 키를 교체하여 사용할 수 있습니다. Google이 이를 명시적으로 금지하지는 않지만, 회색 지대에 해당하므로 남용하지 마세요.

할당량 비용 치트 시트

시작할 때 있었으면 좋았던 전체 참고 자료입니다. 북마크해 두세요—필요할 겁니다.

작업메서드할당량 비용
동영상 검색search.list100
동영상 상세 정보 가져오기videos.list1
채널 정보 가져오기channels.list1
댓글 목록 조회commentThreads.list1
재생목록 항목 조회playlistItems.list1
댓글 달기commentThreads.insert50
동영상 업로드videos.insert1,600
동영상 메타데이터 업데이트videos.update50
썸네일 설정thumbnails.set50
재생목록 만들기playlists.insert50
동영상 평가videos.rate50
실시간 채팅 메시지 조회liveChatMessages.list5

할당량은 매일 태평양 표준시(PT) 자정에 초기화됩니다. 현재 사용량은 Google Cloud Console에서 확인할 수 있습니다.

더 많은 최적화 전략이 포함된 전체 분석은 **ContentStats 블로그**의 자세한 가이드를 참고하세요.

TL;DR

  • YouTube API는 하루에 10,000 단위를 제공합니다.
  • search.list100 단위가 소모됩니다 (대부분 개발자가 빠지는 함정).
  • videos.list1 단위이며 호출당 50개의 ID를 받을 수 있습니다 — 이것을 사용하세요.
  • 배치 요청을 사용하고, 응답을 캐시하며, 필요한 필드만 요청하세요.
  • 수천 개의 동영상을 쿼터 문제 없이 추적해야 한다면 ContentStats 를 확인하세요 — 폴링, 배치, 다중 플랫폼 복잡성을 모두 처리해 줍니다.

저는 ContentStats를 만들고 있습니다 — YouTube, TikTok, Instagram, X 전반에 걸쳐 동영상 성과를 추적해야 하는 개발자를 위한 비디오 분석 API입니다. 무료 체험.

0 조회
Back to Blog

관련 글

더 보기 »

따뜻한 소개

소개 여러분, 안녕하세요! 여기서 진행되는 deep tech 토론에 매료되었습니다. 커뮤니티가 번창하는 모습을 보는 것은 정말 놀랍습니다. 프로젝트 개요 저는 열정적입니다...