[youtube] 유튜브 api 할당량 어쩌구 저쩌구

Dora_ bang·2024년 7월 3일
post-thumbnail

현재 진행하고 있는 프로젝트에서 관련 유튜브 채널을 넣어달라는 요청을 받고 급하게 youtube api를 찾아보게 되었다. 제한적인 만큼 어떤 기능을 사용하면 좋을지 고민하다가 블로그에 정리를 하면서 생각해봐야겠다 싶어 찾아왔다.

현재 생각하고 있는 방향은 메인에 관련 유튜브 광고 배너를 추가하고, 배너 클릭 시 관련 유튜브 채널을 모아볼 수 있는 랜딩 페이지로 이동하는 방식이다. 광고를 받았을 경우, 캐러셀 슬라이드로 상단 노출 및 최근 업로드된 영상을 10개 가량 같이 소개해줄 수 있도록 기획하고 있다. 그 외 공개 허락을 받은 일반 유튜브 채널 소개 카드가 나열된다. 해당 리스트는 방문 시에 셔플을 통해 정렬을 매번 다르게 띄워줄 예정이다.

(전직 디자이너이자, 기획자이자, 프론트 개발자이자,,,클라우드 서비스를 이용할 줄 알게된,,,나는 모두 혼자 해낸다,,,해내야만 했다,,^_^)



공식문서에서 유튜브 API는 일 10,000포인트를 지급하는데 각 API 마다 소모하는 포인트가 달라 할당량을 잘 계산해서 사용해야한다.

(할당량 초과 시에는 할당량 증가 신청을 해야한다. 원한다면 구글 클라우드 플랫폼 콘솔에서 할당량 초과 전 알림 서비스를 신청할 수 있다.

여기서 내가 받아봐야할 데이터는 특정 채널의 최근 업로드된 영상 리스트이다. 해당 api는 search를 통해 받아볼 수 있는데 한 번 패칭 시 100포인트를 소모한다.

현재 운영되고 있는 홈페이지는 일 사용자 최소 200명 정도가 이용하고 있다. 한 사람이 방문할때마다 해당 페이지에 3회 이상 조회 시, 채널의 수가 3개 이상일 시, 1,800회 패칭을 하게 되는데, 데이터를 1분마다 리패칭 등등 다양한 경우를 생각해야해 일 10,000포인트는 결코 많은 양이 아닌 것 같다,,,

그래서 구글링을 통해 최적화할 방법을 찾아냈다.

호출 시 1포인트를 소모하는 playlistItems: list를 통해 데이터를 받아오는 것이다. 다만 이 API를 사용할 때 채널 아이디 값이 필요하다.

채널 아이디 값은 videos: list를 통해, 원하는 채널의 영상 하나의 아이디 값을 넣어서 알아낼 수 있다. 마찬가지로 1회 조회 시 1포인트가 소모된다. 최초 1회만 찾아주면 되는 거라서 부담감은 없다!

위 이미지 중 YYrJSUANv18이 영상 id 값이다.

이것을 이용해 postMan에서 channelId 값을 받아오자.

channelId 값을 받아왔다! channelId 값의 두번째 문자열을 U로 바꿔준다. 위 채널 아이디를 예시로 들자면 아래와 같다.

UCCw4iKa18PGsQZOQ270tx2A > UUCw4iKa18PGsQZOQ270tx2A

해당 값을 firebase에 등록 후, 해당 channelId의 최근 업로드된 영상 리스트를 받아오는 것이다.

이제 playlistItems: list API를 사용하여 최근 영상을 받아오자. 나는 최근 영상을 무한스크롤과 같은 형태로 구현하지 않을거라 maxResults를 사용해서 끊어서 받아왔다. 원한다면 nextPageToken을 통해 다음 페이지를 요청할 수 있다.

해당 key 값을 통해 최근 업로드 영상으로 link를 걸어줄 생각이다. 내부에서 iframe을 사용하여 직접 플레이시킬 수도 있겠지만,,,MVP 기능이 아니기에 외부 링크로 통할 수 있도록 연결만,,,해야지,,,ㅎㅎ,,

여기서 조금 더 생각해볼 점은 현재는 하나의 채널만 받아오고 있지만 추가로 광고 요청을 받게 되었을 때, 채널이 2~3개로 늘어날 경우에는 어떻게 해야하는가에 대한 문제다. 할당량 초과 시에 어떻게 대응하는지 궁금해 여러 테크 블로그들을 전전했지만 방법을 찾기가 어려웠다,,,


  1. 앞서 설명한 구글 클라우드 플랫폼 콘솔에서 API KEY 할당량 초과 시 알림 설정을 하여 할당량 증가 요청을 매번 해주는 방법,,,
    (매번 이 방법을 사용하기엔,,,백수지만 시간이 적은 나로서는 너무너무너무 힘들다,,,)

  2. API KEY 값을 여러 개 발급하여 할당량 초과 시에는 스페어 KEY 값을 사용할 수 있도록 하는 방법
    (1번보다는 낫지만 이게 최선일까,,,)

  3. 할당량을 최소화, 최적화하여 사용하는 방법
    (현재 해당 방법으로 진행했지만 언제 어떻게 할당량이 초과할지 모른다는 점이 굉장히 불편하다,,,)

우선 생각하고 있는 방법은 firebase database 내 문서를 불러올 때, updatedAt을 기준으로 1일 이상 소요되었을 경우에는 새로운 데이터를 받아와 저장해주도록 하는 것이다. 일단 이론은 여기까지 하도록 하겠다. 이미 블로그 글이 충분히 길어졌으니, 이후 글은 직접 진행해보고 난 뒤 업로드하는 것으로,,,



참고

Youtube API 공식문서
할당량 생각하며 YouTube API로 원하는 데이터 얻기

0개의 댓글