NOMO.asia

Twitch 는 API 문서에는 기재하지 않은 몇가지 API endpoint 들을 서드파티 개발자들에게 비공식적으로 "제공해오고" 있었다. 예를 들면 이전에 포스팅했던 채널의 컨트롤 패널을 가져오는 API 라던지, 이 글에서 소개한 생방송 비디오의 마스터 플레이리스트를 가져오는 API가 이런 류의 API 에 해당했다. 다만 이러한 것들은 공식적으로 API문서에 기재되지 않은 기능이므로, 이것을 Twitch 가 서드파티 개발자들에게 "제공했다" 라고 이야기하는 것은 잘못된 표현일 수도 있다. 다만 실제 이런 API 들의 사용 방법이 Twitch 의 개발자 포럼에서 공개적으로 공유 및 논의되고 서드파티 개발자의 Client-ID 를 이용해 접근이 가능했었다는 점에서 "사용을 묵인했다" 정도로 보수적으로 표현할 수 있을 것 같다.

여하튼 이런 API endpoint 들이 있었는데, 약 4일 전인 11월 10일부터 이러한 API 들이 간헐적으로 정상적으로 작동이 됐다가 안 됐다가를 반복하더니, 결국 오늘인 11월 14일에는 아예 사용할 수 없는 상태가 되었다…가 15일에는 또 사용 가능으로 바뀌고 혼란스러운 상태이다. 가끔 사용 가능 상태로 바뀌는 경우가 있기는 하지만, 일단 공식 답변에 따르면 중지가 맞는듯하다. https://api.twitch.tv/api/ 로 시작하는 API endpoint 들은 API 문서에 사용 방법과 예시가 적혀있지 않은데, 이러한 것들이 모두 사용 불가로 바뀐 것으로 추정된다.

현재 해당 API endpoint 로 요청하면 아래와 같이 응답한다.

{
    error: “Gone”,
    message: “this API has been removed.”,
    status: 410
}

이유를 알아보기 위해 Twitch 개발자 포럼에서 논의된 내용을 읽어보니 아래와 같이 정리가 되었다.

  1. https://api.twitch.tv/api/ 로 시작하는 API endpoint 들은 Twitch 가 정식으로 지원하는 API endpoint 가 아니며, 언제든지 바뀌거나 제거될 수 있다.
  2. 위와 같은 API endpoint 는 문서화되지 않은(undocumented) endpoint 로, 서드파티의 사용이 의도된 것이 아니다.
  3. 서드파티는 문서화된(documented) endpoints 를 "사용해야 한다" ("should only")
  4. https://api.twitch.tv/api/ 로 시작하는 대부분의 endpoint 는 내부적으로 웹사이트를 구동하기 위해 Twitch 에서 사용된 것이며, 현재는 GQL endpoint 로 대체되었다. 이것 또한 서드파티가 사용해서는 안 되는(should NOT) endpoint 이다.
  5. 이것들은 서드파티가 사용하지 않아야 하는 것이므로 문서화되지 않은 채로 남아있었으며, 이는 Twitch 가 해당 API endpoint 를 이용한 기능을 구현하는 것을 원하지 않는다는 것을 의미한다.
  6. 따라서 이러한 API endpoint 의 사용이 차단되었다.

참고로 위의 응답에는 "this API has been removed." 라며 API 가 아예 제거된 것처럼 나왔지만 실제로는 제거된 것이 아니며, 현재는 서드파티의 Client-ID 를 이용한 접근만 차단된 것이라고 한다. 따라서 Twitch 가 웹에서 자체적으로 사용하는 Client-ID 를 이용하면 여전히 기존 방법대로 사용이 가능하다고 하는데, 이것은 원칙적으로는 사용해서는 안 되는 방법이다. 현재 기능이 막힌 일부 서드파티 툴들이 Twitch 웹사이트의 Client-ID 를 사용하여 기능을 복구한 것으로 보이는데, 추후 어떻게 될지는 모르겠지만 문제의 소지가 없지는 않다고 하겠다.

앞서 링크한 포럼의 논의에서도 언급된 내용이지만, 현재 막힌 API 기능들은 어떻게든 구현될 수 있는 기능들이므로 결국 이것은 Twitch 와 개발자 모두에게 손해로 이어질 것이다. 먼저 개발자는 추가적인 개발에 소요되는 시간과 더 느린 응답으로 인한 손해를 입게 될 것이다. 그리고 동일한 기능 구현을 위해서는 아무래도 (비)공식적인 API로 제공할 때보다 트래픽 자원을 많이 사용하게 될 것이므로, 결국 Twitch 또한 손해를 입게 될 것이다. 하지만 얼마 되지 않는 트래픽보다 의도하지 않은 API 사용의 통제를 우선으로 택한 것으로 생각된다. 이런일이 갑작스레 일어난 것은 아닐 것이고 무엇인가가 심각하게 악용되었거나 한 계기가 있을듯? 아니면 그냥 웹사이트 개편 중의 한 과정이거나...

(현재는 막힌) 패널의 정보를 가져오는 기능을 구현하고자 하자면 그냥 채널 페이지를 파싱하면 바로 해결되는 문제이다. 또는 현재 브라우저로 채널 페이지의 접속했을 때 트위치 웹사이트에서는 https://gql.twitch.tv/gql 에 대해 요청하여 패널의 정보를 가져오고 있는데, 이를 모방하여 기능을 구현할 수 있다. 물론 이러한 행동은 트위치 정책 위반의 소지가 있지만 애교수준이며, 애초에 현재 이보다 더 심하게 정책을 위반한 서드파티 프로그램들이 상당수 돌아다니고 있다. 브라우저에서 볼 수 있는 정보들은 모두 어떻게든 긁어올 수 있는 만큼, 현재는 막힌 기존의 API 를 이용하여 무엇인가 악용하던 개발자들은 이러한 API가 막히더라도 어떻게든 해당 기능을 쉽게 구현할 것이다.

그리고 대부분 이런 API 들은 유저 편의기능을 구현하기 위해 사용되는데, 이러한 기능을 별도로 구현했다고 제재하는 것은 사실 생각하기 어렵다. 이미 내가 만든 재생 시 항상 최대 화질로 시작하는 확장기능이나 현재 재생 중인 서버의 위치를 확인하는 확장기능 또한 그러하다. 또한 개인적으로는 실시간으로 재생 중인 동영상의 음성을 인식하여 자동으로 텍스트로 변환하는 Speech-to-Text 기능을 브라우저단에서 구현하거나, 영상을 실시간으로 캡쳐 및 분석하여 딥러닝 학습을 통해 현재 게임 내 정보를 분석하여 보여주는 것을 역시 브라우저단에서 구현하는 것을 구상해두었는데, 이런 것은 당연히 기본 Twitch API 만으로는 불가능 한 것이다.

여하튼 갑작스럽게 이런일이 생겨서 두서없이 이것저것 적어보았다. 내 경우에 패널의 정보를 긁어오는 것이 반드시 필요한 것은 아니고, 내가 Twitch 의 서드파티 개발로 돈을 번다거나 하는 것도 아니므로 당분간은 없는채로 살 것이다.