어느 날 보니 유튜브에서 구독한 채널 개수가 380개 정도가 되는 걸 보고 살짝 당황했다. 챙겨보는 채널은 몇 개 안 되는 것에 반해 구독한 채널 개수가 이렇게 많은 걸 보니 그동안 너무 생각 없이 구독 버튼을 눌렀나 보다.
더군다나 구독한 채널 수가 많다보니 특정 채널에서 게시글이 업데이트 될 때 알람이 발생하기 때문에 어떤 작업을 하다가 괜시리 휴대폰에 눈이 가서 집중이 깨질때도 간혹 발생한다. 이렇다보니 언젠가 정리해야지 싶었는데 생각난 김에 일단 구독한 채널을 전부 구독을 취소한 다음 자주 보는 것을 다시 구독하기로 결정했다.
이제 이걸 어떻게 편하게 처리할 수 있을지 생각해보자.
어떻게 처리해 볼까
유튜브 구독 채널을 취소하는 건 굉장히 간단한다. 해당 채널에 가서 구독 취소를 하면 된다. 그런데 컴퓨터에게 이걸 대신하게 만들게 하는 방법이 뭐가 있을까를 고민해야 했다.
그래서 생각한 방법은 두 가지이다.
1. 동적 크롤링을 통해 구독 취소
2. GoogleAPI 중 Youtube Data API를 이용하기
동적 크롤링으로 처리하기
동적 크롤링을 통해 구독을 취소하는 건 꽤나 익숙한 방법이다. 과거에 페이스북 페이지 좋아요 일괄 취소도 javascript로 짜본 적 있었고 Browser에서 사용자 설문 매크로를 만들 때도 이와 비슷한 경험을 한 적이 있었기 때문이다.
그런데 동적 크롤링을 만들 때마다 소비하는 에너지가 조금 크다.
동적 크롤링으로 어떤 버튼을 클릭하는 흉내를 처리하기 위해서는 HTML 상에서 그 경로(xpath)나 element를 한 땀 한 땀 따서 이를 코드로 옮겨야 하기 때문이다. 더군다나 이 방법이 먹히지 않을 때는 javascript 코드를 실행할 수 있게끔 만들어야 해서 비효율적인 방법이다.
Google API로 처리하기
그렇다면 Google API를 써서 해봐야겠다는 생각을 했는데 Google API는 GCP와 연계된 부분이 있기 때문에 GCP에 익숙하지 않으니 어렵겠다 싶었다.
사실 GCP 경험이 아주 없진 않다.
google spread sheet의 데이터를 읽거나 저장하는 스크립트를 짜본 적 있었고 Youtube 댓글 수집을 처리하느라 관련 문서를 읽었던 적이 있다. 그런데 Youtube 댓글 수집 처리의 경우엔 관련 문서를 읽다가 내용을 이해하기 어렵고 사용하기 어려워 포기해서 동적 크롤링으로 만들었던 사실이 생각났다.
즉 과거에 하려다가 어려워서 포기한 문제를 다시 도전하게 되는 셈이었다.
그동안 회사 일을 하면서 배운 기술과 미약한 경험이지만 여러 삽질의 과정을 겪은 내가 그걸 할 수 없을 것 같다는 생각은 하지 않았기 때문이다.
이제 코드를 작성해 볼까
Google API로 구독 버튼 일괄 취소 처리를 수행하는 스크립트를 만들기로 결정했다. 그런데 역시 순탄치 않았다.
GCP는 역시 익숙하지 않았으니 많이 헤매었고 API를 이용하기 위한 인증은 어떤 방식으로 처리해야 되는지 헷갈렸고 중간에 조금 더 편하게 할 수 있는 방법이 있지 않을까 고민하면서 30줄짜리 코드를 이틀에 걸쳐 완성했다.
매일 이런 형태의 일을 처리하면서 느끼는 거지만 결과만 놓고 보면 뭔가를 성취해 낸 게 되어 나 스스로를 고무시키는 것 같다. 그런 매력이 있기 때문에 과정이 고통스럽더라도 이 결과를 보려 잠자는 시간마저 포기할 정도로 몰입하는 게 아닐까 싶다.
아 이런 issuse가..
코드를 짜고 잘 동작하는지 한 번씩 돌려보다가 사용량 초과 issue가 났다. 처음엔 단순히 분당 횟수제한 정도이지 않을까 싶었는데 "일일 할당량"을 초과했다는 메시지가 나왔다. 이 때문에 200개 정도의 채널을 구독 취소했을 때 사용량 초과 issue가 발생했던 것이다.
GoogelAPI는 Request당 가중치를 매겨 제한량을 설정해 놓는다는 걸 다 만들고 나니 알게 되었다. 세계적인 기업이 왜 이렇게 쪼잔하지 라는 생각을 잠시 하다가 Google에 관련된 산업과 그걸 통해 나처럼 뭔가를 성취하고자 하는 사람이 있는 걸 생각해 보니 낮은 할당량에 뭔가 이해심을 갖게 되었다.
또한 생각해 보니 동적크롤링과 API를 통한 데이터를 수집할 때 경험을 통해 얻은 사실을 잊고 있었다.
동적 크롤링 - 손수 제작이기 때문에 공수가 많이 들고 동작이 느릴 수 있지만 확실히 처리할 수 있음
공개된 API - 일일 할당량 제한이 있고 이를 넘어서면 비용을 낼 수도 있음 또한 API KEY 관리가 쉽지 않음
GoogleAPI의 경우도 마찬가지였다. API 일일 할당량 초과가 일어났을 때 꼼수로 "새 Project를 만들고 거기서 사용하면 되지 뭐"라는 생각을 했는데 굳이 그렇게까지 해서 구독 취소 스크립트를 만들 필욘 없다고 판단했다.
마치며
YoutubeData API를 이용하기 위해서는 Oauth2 인증 방식을 사용해야 했는데 이 과정에서 loginPopUp을 안 띄우고 진행할 수 있는지를 조사하는데만 하루를 소비했다. 방법을 찾지 못해서 아쉬웠으나 새롭게 무언가를 배운 것에 대해 의의를 두고 싶다.
brunch에는 스크립트를 만들면서 들었던 생각과 감상을 적었는데 어떻게 만들었는지는 tistory에 정리해 놨다. 일상에서 "무언가"를 "코딩"으로 편하게 처리할 수 있는 일들을 많이 맞닥드렸으면 하는 바람으로 이만 글을 마친다.