클라이언트 개선 작업 - 성과와 난관, 새로운 발견
몇 달 전 ‘클라이언트 개선 작업’이라고 부르는 리그 오브 레전드 클라이언트 유지 보수 계획을 발표했습니다.
작업에 어려움을 겪고 있더라도 흔들리지 않고 꾸준히 진행 상황을 공유해드리고자 하는데요. 직설적으로 말씀드리자면, 클라이언트의 성능이 만족스러운 수준에 도달하려면 아직 갈 길이 멀어 보입니다.
이번 개발자 블로그에서는 지금까지 이뤄낸 성과와 봉착한 난관에 대한 이야기를 공유해드리고 앞으로의 계획을 말씀드리겠습니다.
약간의 성과
클라이언트에 대한 첫 블로그 글에서 말씀드린 바와 같이, 우선은 90백분위수 플레이어의 경우에도 부트스트랩 시간이 약 15초로 단축되도록 하는 데 집중하고자 했습니다. 다시 한번 말씀드리자면, 부트스트랩 시간은 클라이언트가 기동될 때까지 얼마나 오래 걸리는지를 보여주는 척도입니다.
지난번에 목표를 달성하기 위해 클라이언트에서 사용하는 플러그인과 엠버(Ember) 앱을 통합하고 줄일 계획이라고 말씀드렸습니다. 용어가 생소하시다면 플러그인은 클라이언트의 코드를 활용성 있는 묶음으로 나눌 때, 엠버 앱은 UI를 구동시킬 때 사용하는 수단이라는 점을 기억하시면 됩니다.
여기에 대한 작업은 지금까지 순조롭게 진행되고 있습니다. 아래 그래프는 시간 경과에 따라 클라이언트에 플러그인과 엠버 앱이 총 몇 개 있었는지를 보여줍니다. 패치마다 개수가 조금씩 줄어드는 모습을 확인할 수 있는데요. 현재 클라이언트 부트스트랩 과정 동안 로딩되는 엠버 앱과 플러그인의 개수는 작업을 처음 시작했을 때보다 각각 10%와 20% 감소한 상황입니다.
좋은 소식이죠! 하지만 몇 가지 난관에 부딪히기도 했습니다.
약간의 난관
플러그인 작업의 결과 연초 몇 번의 패치 동안은 부트스트랩 시간이 크게 개선되는 모습을 보였습니다.
하지만 10.3 패치부터 부트스트랩 시간이 역주행하기 시작했고 10.7 패치에서는 전체적으로 저점을 기록했습니다.
이러한 추세는 아래 그래프에서 확인할 수 있습니다. 그래프를 이해하는 데 도움을 드리자면, 곡선이 왼쪽에 가까워질수록 이상적입니다. 더 빠른 부트스트랩 시간을 의미하기 때문이죠.
이러한 퇴보는 최근 몇 주 동안 리그 오브 레전드 서버에 대한 부하가 증가하면서 나타난 결과일 가능성이 있습니다. 상황이 상황이다 보니 집에서 보내는 시간이 늘어난 플레이어가 전 세계적으로 많습니다. 리그 오브 레전드를 굉장히 많이 플레이하시고 있어서 서버 인프라에 부담이 가고 있으며 이는 불안정한 응답 시간과 느려진 부트스트랩 시간으로 이어졌습니다.
플레이어 유입에 대응하기 위해 서버 용량을 늘리기 시작하면 클라이언트 성능이 다시 개선될 수 있습니다. 동시에 부트스트랩 과정에서 로딩되는 자바스크립트 코드를 줄이는 등 다른 잠재적 원인에 대한 조치도 계속하고자 합니다.
퇴보의 이유가 어찌 되었든 희망은 있습니다. 첫 개발자 블로그 글에서 말씀드린 대로 부트스트랩 시간과 (다음으로 진행할 작업인) 챔피언 선택 확정 시간을 개선하는 과정에서 클라이언트 아키텍처의 근본적인 부분에 대한 정리와 재작업이 이루어집니다.
다시 말하자면 버그를 수정하고 클라이언트 아키텍처에서 괴로움을 유발하는 근본적인 문제를 자세히 살펴보게 되는데요.
이러한 작업을 하다가 어피니티(Affinity)라는 클라이언트 기능에 구조적인 문제가 있다는 점을 발견했습니다.
어피니티의 문제
어피니티는 몇 년 전 ‘클라이언트 업데이트’를 진행했을 때 도입한 기능입니다. 부트스트랩이 완료되기 전에 어떤 플러그인을 로딩해야 하는지 지정할 수 있게 해주는데요.
어피니티와 관련된 문제를 두 가지 발견했습니다.
- 어피니티는 제대로 작동하지 않고 있었습니다. 2018년 어느 날 어피니티는 의도치 않게 망가졌습니다. 어피니티가 오작동하고 있어서 클라이언트는 부트스트랩과 게임 후 로딩 과정에서 매번 모든 플러그인을 로딩하고 있었습니다.
- 어피니티를 고치더라도 문제가 해결되지 않습니다. 어피니티가 설계한 대로 작동했을 때조차도 플러그인 로딩에 대한 우선순위를 효율적으로 배정하지 못했다고 생각합니다. 간단히 말씀드리자면, 부트스트랩 과정에서 너무 많은 플러그인이 로딩되는 문제는 클라이언트에 항상 있었던 겁니다.
요약 - 어피니티를 더욱 우수하고 효율적인 대안으로 완전히 교체해야 합니다.
이러한 발견은 뜻밖이었지만, 클라이언트에 대한 작업을 시작할 때 세웠던 핵심 가설을 입증해주었습니다. 클라이언트를 깊숙이 파헤치기 위해 시간을 할애함으로써 문제의 근본적인 원인을 발견할 수 있었죠.
추후 행보
어피니티가 제 역할을 못 하고 있다는 사실을 알게 되었으니 플러그인의 우선순위를 제대로 배정하는 새로운 솔루션을 도입할 수 있습니다. 이로써 부트스트랩 시간을 단축하고 다른 중요한 클라이언트 작업을 진행할 여력이 생깁니다.
이러한 작업은 클라이언트 유지 보수 계획에 근본적인 영향을 끼치지 않지만, 전체적인 진행 속도가 약간 느려질 수는 있습니다. 그렇다 해도 이번 발견은 앞으로의 방향을 더욱 명확하게 해주기 때문에 긍정적이라고 생각합니다. 전반적으로 문제가 덜하고 더욱 안정적인 플레이어 경험으로 이어진다면 저희 노력이 수포로 돌아가지는 않겠죠.
부트스트랩 시간을 만족스러운 수준으로 단축한 뒤에는 클라이언트 개선 작업의 두 번째 단계, 챔피언 선택 화면에서 클라이언트의 응답 시간을 감소하는 작업을 시작할 계획입니다. 아무래도 이번 작업에서 가장 관심 있어 하실 부분인 만큼 하루빨리 시작하고 싶은 마음입니다.
진행 상황은 계속 공유해드릴 예정이며 몇 달 내 비슷한 글로 다시 인사드리도록 하겠습니다. 리그 오브 레전드를 플레이해 주셔서 항상 감사합니다.