김솔비 블로그
기술 블로그

[Part 3] 유튜브 API 무료 한도, 10,000번이 아니었다

4분 읽기시리즈 4/10

TL;DR

  • 유튜브 Data API 무료 한도는 하루 10,000유닛이다. 검색 1번이 100유닛, 영상 정보 조회는 1유닛이다.
  • 검색 결과를 20개에서 50개로 늘려도 비용은 똑같이 100유닛이다. 수집량이 공짜로 2.5배가 된다.
  • 구글의 하루와 한국의 하루가 어긋나도 넘지 않게, 하루 4,800유닛으로 제한했다.

문제

수집기를 붙이고 보니 유튜브 사용량이 예상보다 빨리 찼다. 하루 10,000번이면 넉넉하다고 생각했는데, 그게 아니었다.

원인: "번"이 아니라 "유닛"

유튜브 Data API의 무료 한도는 요청 횟수가 아니라 유닛(quota unit)으로 센다. 요청마다 비용이 다르다.

요청비용
검색 (search.list)100유닛
영상·채널·댓글 정보1유닛

즉 검색은 하루 100번이면 끝이다. 키워드 18개로 유튜브를 두 번씩(7일 조회수 순, 3일 최신 순) 검색하면 그것만으로 18 × 2 × 100 = 3,600유닛이다.

선택 1: 한 번 검색할 때 많이 받는다

검색 1번의 비용은 결과 개수와 상관없이 100유닛이다. 그래서 검색 결과를 20개에서 50개(최대)로 늘렸다. 비용은 그대로인데 한 번에 보는 후보가 2.5배가 된다.

대신 영상마다 조회수, 좋아요, 채널 국가를 확인하는 요청이 늘어난다. 이건 1유닛짜리라 부담이 적다.

선택 2: 초기화 시각이 다르다

두 번째 함정은 하루의 기준이다.

  • 구글은 미국 태평양 시간 자정에 한도를 초기화한다. 한국 시간으로는 오후 4~5시다.
  • 우리 사용량 기록은 한국 날짜로 센다.

그래서 구글의 하루 하나가 한국 날짜 이틀에 걸친다. 한국 날짜로 하루 10,000유닛까지 쓰게 두면, 구글 기준으로는 하루에 그보다 많이 쓸 수 있다.

해결은 단순하게 했다. 한국 날짜 하루 상한을 4,800유닛으로 잡았다. 날짜가 어떻게 어긋나도 이틀을 합쳐 9,600유닛이라 10,000을 넘지 않는다.

ts
export const LIMITS = { /** * 유튜브: 하루 10,000 유닛 무료. 검색 1번 = 100, 영상·채널·댓글 = 1 * 구글은 미국 태평양 자정(한국 오후 4~5시)에 초기화, 여기선 한국 날짜로 센다. * 구글 하루가 한국 날짜 이틀에 걸쳐도 넘지 않게 4,800 (2일 합쳐도 9,600 < 10,000) */ youtube: { unit: "유닛", freeDaily: 10_000, capDaily: 4_800 }, /** NAVER API HUB 검색: 무료의 일부만 쓴다 */ naver: { unit: "회", freeMonthly: 775_000, capDaily: 1_000, capMonthly: 20_000 }, } as const;

선택 3: 한도에 닿으면 부르지 않는다

한도에 닿으면 그 출처는 호출 자체를 하지 않고 건너뛴다. 관리자가 수동 수집 버튼을 여러 번 눌러도 마찬가지다. 호출을 하지 않으니 과금이 생길 수 없는 구조다.

사용량은 관리자 화면에 그래프로 보여 준다. 얼마나 남았는지 눈으로 보면서 키워드를 조정한다.

결과

API우리 상한무료 한도
유튜브하루 4,800유닛하루 10,000유닛
네이버월 20,000회월 775,000회

두 API 모두 무료 한도 안에서 돈다. 운영비는 0원이다.

배운 점

  • 무료 한도를 볼 때는 단위부터 확인한다. "10,000"이 무엇의 10,000인지가 전부다.
  • 비용이 결과 개수와 상관없다면, 한 번에 최대로 받는 게 이득이다.
  • 한도의 기준 시간대가 우리와 다르면, 계산을 맞추려 애쓰기보다 절반 아래로 잡는 게 간단하고 안전하다.

프롬피드 개발기

프롬피드: promfeed.solfany.com