September 10, 2018

스트리트 파이터 5의 API

image

적지만 꾸준히 시간을 투자하며 하는 게임이 바로 Street Fighter 5 되시겠다. 게임 한 판이 대전격투게임 특성상 2분 정도 걸리기 때문에 중간에 마무리짓고 나오기도 편해서 요즘은 이것만 한다.

지는 것보다는 이기는 것이 더 기분이 좋으므로 어쨌든 실제 게임 시간보다는 관련 내용을 공부하는 시간이 더 많아지게 되는데, 이 중에 게임 내의 기능으로 특정 유저의 게임을 “리플레이”형태로 볼 수 있는 기능을 사용할 수 있다. 프로게이머들의 게임을 보고 분석할 수가 있는 것이다.

문제는 리플레이를 보려면 반드시 게임을 켜서 확인을 해야 하므로 게임하는 시간이 아닐 때의 접근성이 매우 떨어지는데, 고마운 사람들이 볼만한 리플레이를 유튜브에 올리므로 그거를 보면 되겠다.

이것도 불만이 없는 것은 아니다. 예를 들어 리플레이 기능에는 추가 옵션으로 캐릭터의 “키 입력”과 “공방 데이터”를 함께 볼 수 있는데, 이게 매 리플레이를 재생할 때마다 OFF로 되어 있어서 상당히 귀찮게 활성화 해야 한다. 그래서 그런지 유튜브에는 이 데이터를 함께 레코딩해 올라오는 리플레이 영상이 굉장히 희소하다. 그래서 중요한 게임 같은 것들은 직접 리플레이를 녹화하는데, 이게 시간이 굉장히 아까운 것이다. 그래서 자동으로 리플레이를 녹화하려는 시도를 하고 있다.

그 중 하나의 시도로, 과연 이 게임, 클라이언트와 서버는 어떤 API를 통해 서로의 정보를 요청하고 응답을 전달할까? 예를 들면 이런 것을 확인해 보고 싶은 것이다.

  1. 고랭크 유저 A의 리플레이 리스트 확인
  2. 1에서 얻은 리플레이 리스트를 여러 조건으로 분류
  3. 상대 등급별
  4. 상대 캐릭터별

그러면 해당 리플레이만 찾아서 바로 재생하면 되니까 말이다. 그런 간단함을 생각하고 http 프록시를 통해 확인해봤더니, 우선 결론부터 이야기하면 불가능하다. 이유는 OAuth1을 사용하여 통신하기 때문이다. http 요청/응답은 확인해도 내가 요청을 만들 수가 없는 것이다… 어쩐지 V리그 같은 것들이 왜 다시 안생기는가 했는데, 다 이유가 있었던 것이다.

어쨌든 신기한 것도 알았는데 다음과 같다.

  1. 인프라는 aws와 akamai같은 곳에 구성되어 있다
  2. 리플레이 데이터의 저장은 S3(us-west)를 사용함
  3. 해시된 파일명을 사용함
  4. 파일 하나의 크기는 대략 120KB 정도

LOL처럼 리플레이나 전적 분석을 하기 쉽게 이 정도는 공개해줄만한 것 같은데 이런 것이 참 아쉽다.

그래서 다음 자동화 정책을 생각해봐야 하는데 다시 시간이 나면 기록하는걸로…