NOMO.asia

요즘 저녁만 되면 트위치의 버퍼링이 심해지고 있다. 버퍼링이 심한 근본적인 이유까지는 정확히 모르겠다. 다만 쉽게 알 수 있는 사실은, 트위치 live는 작은 동영상 조각들을 연속해서 다운 받아 이어 재생하는 형식인데, 그냥 단순하게 2초짜리 동영상 조각을 받는데 2초보다 더 걸려서 버퍼링이 걸리고 있었다.

나는 KT 회선을 사용 중인데, 라이브 시청 시 서버가 서울(SEL)로 연결되면 버퍼링이 없었지만 주말 피크 시간에는 10차례 이상 새로고침을 해도 서울 서버에 연결이 안 되는 경우도 있었다. 평일 저녁에는 Akamai Korea 서버도 상태가 괜찮았지만 주말 피크 시간에는 여기도 버퍼링이 걸렸고, 서울 서버가 아니고서는 답이 없었다.

이전에는 서버가 어떤 서버로 잡혔는지 확인하기 위해 Twitch Server Locator 라는 크롬 확장 기능을 사용했었는데, 요즘 버퍼링 때문에 다시 사용해보니 "Can't find Server Location. Please Retry" 라는 메시지가 나오며 제대로 작동하지 않았다.

그래서 twitch.tv 에서 실시간 동영상을 받아오는 서버가 어디인지 표시하는 툴을 브라우저 확장 기능의 일종인 UserScript 기반으로 만들었다. 이름은 Twitch-Server-Info 이다. Github 링크 (https://github.com/nomomo/Twitch-Server-Info)

미리보기

스크립트를 적용하면 플레이어에 마우스를 올렸을 때 서버 주소와 (가능한 경우) 서버가 위치한 지역이 표시된다.
클릭하면 클립보드에 서버 이름이 복사된다.

설치 방법

STEP 1. 자신의 브라우저에 맞는 유저스크립트 관리 확장기능 설치

먼저 위 링크에서 자신의 브라우저에 맞는 확장기능을 설치해야한다. (동작은 Chrome, Firefox 브라우저에서만 확인했다.)

STEP 2. Twitch-Server-Info 스크립트 설치

확장 기능 설치 이후 아래의 링크를 클릭하여 이동, 설치 버튼을 누른다.

https://raw.githubusercontent.com/nomomo/Twitch-Server-Info/master/Twitch-Server-Info.user.js

주의: 본 스크립트를 설치 및 사용하며 브라우저 과부하로 인한 응답 없음/뻗음 등 으로 인한 데이터 손실 등 문제 발생 시 개발자는 책임지지 않음(보고된 문제는 없음)

본 스크립트를 사용하다가 Twitch 접속에 문제가 생기거나 동영상 재생이 안 되는 문제 등이 발생하는 경우, 이 스크립트를 그냥 끄고 업데이트가 될 때 까지 기다리거나 Tampermonkey 의 관리 메뉴에서 삭제하면 된다.

참고: 별도의 확장 기능 없이 서버 확인하기

참고로 별도의 확장 기능이 없이도 내가 연결된 Twitch 서버가 어디인지 쉽게 확인이 가능하기는 하다. 브라우저에서 F12 키를 눌러 개발자 도구를 열고 Network 탭으로 간 뒤, 필터에 ".ts" 를 입력해주고 Domain 을 표시해주면 쉽게 볼 수 있다.

일부 서버가 다른 것들과 섞여서 나올 수도 있는데, 빈도 수가 높고 파일 크기가 1MB ~2MB 정도인 것이 어느 서버의 Domain 인지를 보면 된다.

매번 개발자 도구를 들어가서 확인하는 것은 귀찮은 일이기는 하지만, 무언가를 본인 PC와 브라우저에 설치하기 찝찝한 사람들은 위의 방법을 참고하기 바란다.

숨겨진 기능 - 로그 기록하기

접속되는 서버의 시간대별 통계를 내봐도 괜찮을 것 같아서 로그 기능을 만들어서 원하는 사람은 켤 수 있도록 했다.

아직 로그를 확인하기 위한 UI 를 만들지는 않아서 숨겨놨지만 console 창에서 접근 가능하다. 브라우저에서 twitch.tv 에 접속하고 F12 키를 눌러 개발자 도구를 연 다음, console 창에 아래의 내용을 붙여넣으면 로그 기능을 쓸 수 있다.

  • 로그 기능 켜기/끄기: TWITCH_SERVER_INFO_LOGGING()
    기본으로 꺼져 있으므로 켜줘야 한다.
  • 로그 보기: TWITCH_SERVER_INFO_SHOWLOG()

시간, streamer 이름, 서버 주소를 기록한다. streamer 이름을 기록하는 이유는, 하꼬 스트리머에게 서울 서버를 배정 안 해준다는 카더라가 있어서 진짜 그런지 확인해보기 위해서이다.

  • 로그 삭제: TWITCH_SERVER_INFO_CLEARLOG()

나중에 원하는 사람들한테만 데이터를 제공받아 요일별, 시간대별, 회선별, 지역별 통계를 내보면 큰 의미가... 없겠지만 알고 당하는 것과 모르고 당하는 것은 다르니까 기분이라도 좀 낫지 않을까싶다.

향후 계획에 대한 이야기

  1. 설정, 로그, 요일/시간대별 접속 통계 확인 등 UI 만들기
  2. 서버 표시 스타일, 표시 위치 설정할 수 있도록 하기
  3. 초기 접속 시부터 강제로 원하는 서버로 연결되도록 하기

원하는 서버가 잡힐 때 까지 새로고침을 반복하는 것과 유사한 방식으로, 원하는 서버가 연결될 때 까지 실제 새로고침 없이 내부적으로만 재연결을 시도하는 것은 지금도 큰 어려움 없이 가능하다. 하지만 이 방식은 잘못하면 일종의 DDoS 공격처럼 될 수 있다.

이 확장기능을 새로 만든 이유는 앞에서 말한 것처럼 동일한 목적을 가진 기존의 크롬 확장 기능인 Twitch Server Locator 가 제대로 동작하지 않았기 때문이다. 그런데 Chrome 웹 스토어에서 확인해보면 이 툴의 기존 사용자가 46,000 명 정도로 표시되고있다. 그럴 일은 없겠지만, 만약 4만명 정도가 피크시간에 짧은 간격으로 무한 재연결을 시도하면 서버에 가해지는 부담이 클 것이다 (실제로는 재시도 간격, 최대 시도 횟수에 제한을 두겠지만). 자원은 한정되어 있으므로 서울 서버에 접속하는 사람이 많아질 수록 재시도 횟수는 더욱 늘어날 것이다.

사용자가 수동(손)으로 새로고침을 하는 것과 툴을 이용해 재연결을 시도하는 것은 다른 차원이라고 생각하고, 그런 툴을 만들어서 배포했을 때의 부작용을 제대로 생각해보거나 감당하기는 어렵다. 따라서 반복적으로 재연결을 하는 방법이 아닌 무언가 다른 방법을 찾기 전까지 이런 툴을 공개적으로 배포하는 것은 어려울 것 같다.