따라서 "게임 리뷰"라는 키워드로 검색한 동영상 목록을 출력하려고 하는데, 당연히 블로그 검색부터 했다. 대부분의 블로그는 Channels, Playlists, Videos 메소드를 사용했는데 나는 검색 기능만 필요하기 때문에 Search 메소드를 사용할 것이다.
그런데 Search 메소드 사용한 블로그대로 다 해봤는데도 안돼고 감이 안잡혀서... 공식 문서를 확인했다. 사실 그래도 모르겠어서 보류하고 뉴스 크롤링 기능부터 구현했는데 여기서 request 라이브러리를 사용한 걸로 감이 와서 해결할 수 있었다!
(2) Youtube API 요청시 주의할 점
Youtube API 요청은 무료로 사용할 수 있는 대신 하루에 요청할 수 있는 할당량이 정해져 있다. 일반적으로 일간 할당량은 10,000이다.
따라서 지속적으로 유지할 서비스를 계획하는 개발자들은 이 할당량을 신중히 계산하고 할당량을 조금이라도 더 적게 소비하는 쿼리를 짜서 요청해야 할 것이다.
나는 이번 프로젝트에 다양한 기능이 필요하지 않아서 고민해보지 않았지만 이와 관련한 블로그를 확인하니 여러 가지 메소드를 조합해서 필요한 정보 이상을 응답하지 않도록 하는 것 같았다.
사용하는 메소드와 요청 형식에 따라 한 번 요청시 소비되는 cost가 달라지기 때문에, 여기를 확인하고 본인이 요청하는 쿼리의 cost 계산해봐야 한다.
나는 단순하게 search 메소드를 사용하여 list를 응답받기 때문에 공식 문서에 의하면 100 cost를 사용한다. 그러면 하루에 100번의 요청밖에 하지 못한다는 것이므로 하루동안 100명이 새로고침 없이 한 번씩만 접속할 수 있다는 결론이 나온다... 할당량을 다 쓰면 유튜브에서 응답을 해주지 않으므로 당연히 페이지에는 동영상이 제대로 출력될 수 없을 것이다.
이러한 문제를 해결하기 위해 나는 Redis 캐시 서버를 사용했고, 안전하게 Youtube API 응답은 86400초, 그러니까 하루동안 저장되도록 설정해두었다.
[02 Youtube API 키 발급받기 ]
Youtube API를 사용하려면 먼저 구글에서 API Key를 발급받는 과정이 필요하다.
Postman으로 테스트하기 위해 Router 계층 코드까지 완성하고 테스트하면 내가 원한 형식대로 응답이 오는 것을 확인할 수 있다.
(3) Front에서 적용한 모습
Front분들이 바빠서 React에 youtube 동영상 플레이어 넣는 방법까지는 내가 찾아봤다.
이것도 굳이 deprecated된 iframe 태그를 사용해야 하나 고민이 많았는데 깔끔하게 react-youtube를 사용하면 됐다. 무려 Youtube가 공식적으로 만들어 준 패키지!
옵션은 원하는대로 설정하면 되고 이유는 알 수 없지만(아마도 string 타입에서 "를 그대로 쓰면 이후 값들이 전송되지 않으며 오류가 뜨기 때문일것으로 예상) 위에 Postman 응답값처럼 " 가 "로 받아와져서 replace 함수와 정규표현식을 사용해서 해결했다.