[Part 3] 유튜브 API 무료 한도, 10,000번이 아니었다
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을 넘지 않는다.
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인지가 전부다.
- 비용이 결과 개수와 상관없다면, 한 번에 최대로 받는 게 이득이다.
- 한도의 기준 시간대가 우리와 다르면, 계산을 맞추려 애쓰기보다 절반 아래로 잡는 게 간단하고 안전하다.
프롬피드 개발기
- 개요. SNS에서 유행하는 AI 프롬프트, 빈칸만 채워 바로 쓰게 만들었다
- 1편. 방문자가 늘어도 DB 조회는 그대로다
- 2편. AI 없이 유행 프롬프트 자동 수집기 만들었다
- 3편. 유튜브 API 무료 한도, 10,000번이 아니었다 (지금 읽는 글)
- 4편. 복사해도 숫자가 안 올라가던 이유
- 5편. 이미지가 깨져 보였던 이유 3가지
- 6편. Lighthouse 모바일 63점을 98점으로 올렸다
- 7편. 개인정보 없이 매주 알림 보내기 (웹 푸시)
- 8편. 테스트가 깨지면 배포가 안 되게 막았다
- 9편. 프롬피드 회고: 잘한 것과 아쉬운 것
프롬피드: promfeed.solfany.com