클라이언트 개선 작업 - 근본적인 아키텍처 작업은 계속됩니다

리그 오브 레전드 클라이언트 개선을 위한 노력으로 이뤄낸 성과에 대해 말씀드립니다.

올해 초, 저희는 리그 오브 레전드 클라이언트의 성능을 개선하기 위해 보이지 않는 곳에서 이루어지는 작업에 대해 두 달에 한 번씩 소식을 전하겠다고 말씀드린 바 있습니다.

이번 업데이트는 이 시리즈의 세 번째 블로그 글입니다. (첫 번째 글은 여기서, 두 번째 글은 여기서 볼 수 있습니다.)

요약: 클라이언트를 실행하는 코드를 개선하겠다는 저희의 목표에 도달하기 위한 작업이 꾸준히 성과를 내고 있습니다. 그 과정에서 문제를 일으키는 버그도 수정했죠. (수정한 버그는 아래에서 볼 수 있습니다.) 하지만 성과에도 불구하고 아직 할 일이 많습니다. 개선 작업은 앞으로도 계속될 것입니다.


최근 성과

클라이언트 관련 첫 번째 블로그 글에서 말씀드렸다시피 일부 클라이언트 성능 문제를 해결하는 최선의 방법은 클라이언트 내 플러그인과 엠버(Ember) 앱을 통합하고 개수를 줄이는 것입니다.

이 개념이 생소한 분들을 위해 말씀드리자면, 플러그인은 클라이언트 코드를 활용성 있는 묶음으로 나누기 위해 사용하는 툴이고, 엠버 앱은 클라이언트의 유저 인터페이스를 구동하기 위해 사용됩니다.

저희는 목표를 달성하기 위해 꾸준히 성과를 내고 있습니다. 시간 경과에 따른 플러그인과 엠버 앱의 총 개수가 아래 그래프에 나와 있습니다.

Architecture-Stats_kr.png

위 그래프를 보면 ‘그런데 이게 클라이언트 성능에 정확히 어떤 영향을 준다는 거지?’라는 생각을 하셨을 것입니다. 이 질문에 대한 대답은 복잡하지만, 넓게 보면 플러그인과 엠버 앱 개수가 줄어들면 클라이언트 코드 효율이 올라갑니다. 코드를 더 간략하게 한다는 것은 성능이 향상된다는 것이고, 이를 통해 개발팀이 클라이언트를 관리하기가 더 용이해지죠.

저희가 하는 작업의 영향을 측정하는 방법 중 하나는 클라이언트 기동에 걸리는 시간을 측정하는 것입니다. 아래 그래프는 시간 경과에 따른 기동 시간 변화를 보여줍니다.

Loading-Screen-Render_kr.png

보시다시피 지난 두 달여간 부트스트랩 시간은 크게 변하지 않았습니다. 저희의 작업이 리스크가 클 수밖에 없다는 것을 고려하면 이 추이는 어느 정도 성공적인 결과라고 생각합니다. 복잡한 코드를 다루고 플러그인을 손보는 작업은 주의하지 않으면 예상치 못한 문제를 발생시킬 수 있으니까요. 하지만 지금까지는 이런 문제는 없었던 것으로 보입니다.

앞으로 몇 번의 패치 기간에 부트스트랩 시간이 더 개선될 것이기에 저희는 큰 기대를 걸고 있습니다. 이제 여러분께서 클라이언트를 기동할 때마다 더 지능적으로 어떤 플러그인을 불러올지 선택하게 해줄 새로운 솔루션을 개발했기 때문에 기대가 더 크죠. (이 주제에 대한 세부 내용은 최근 클라이언트 관련 블로그 글의 ‘어피니티의 문제’ 부분을 참고해주세요.)

현재 저희 계획은 앞으로 적어도 두 달 동안은 통합 작업을 계속하는 것입니다. 플러그인과 엠버 앱의 개수를 줄임으로써 의미 있는 장기적 이득을 볼 수 있다고 생각하기 때문이죠. 전반적인 코드 환경을 개선함으로써 버그, 메모리 누수, 프로그램 충돌 문제를 해결하기가 쉬워질 것입니다.

버그와 충돌 이야기가 나온 김에 최근에 있었던 버그 수정에 대해 알아보죠.

최근 버그 수정

클라이언트 팀은 클라이언트 개선 작업과 함께 지난 몇 달간 수없이 많은 버그를 수정하는 데 힘썼습니다. 10.13 패치부터 리그 오브 레전드 패치 노트에 별도의 ‘버그 수정’ 란이 추가될 예정입니다.

클라이언트 팀이 올해의 각 패치를 통해 수정한 클라이언트 관련 버그는 다음과 같습니다.

  • 10.1 - 이제 게임 종료 후 클라이언트 위치가 초기화되지 않습니다
  • 10.1 - ‘게임 시작’ 버튼 옆 리그 오브 레전드 로고가 가끔 사라지는 문제를 해결했습니다
  • 10.1 - [MAC] 인터넷 연결이 1분 이상 끊어졌다가 다시 연결될 때 클라이언트가 가끔 충돌하는 문제를 해결했습니다
  • 10.1 - 내정보 배경 변경사항이 이제 다른 플레이어들에게 정상적으로 표시됩니다
  • 10.3 - 이제 마우스 가운데 버튼으로 링크를 클릭해도 클라이언트가 정상적으로 작동합니다
  • 10.3 – 이제 전리품에서 마법공학 상자를 사용한 후 상점 아이콘을 선택했을 때 상점 아이콘이 정상적으로 강조됩니다
  • 10.3 - 컬렉션 탭에서 정렬 필터를 바꿀 때 이제 자동으로 역 알파벳순으로 바뀌지 않습니다
  • 10.3 - 컬렉션 탭에서 ‘달성한 업적’에 따른 정렬을 이제 정상적으로 사용할 수 있습니다
  • 10.4 - 특정 행동(친구 삭제하기, 삭제당하기, 차단당하기)을 하면 챔피언 선택 중에 소셜 패널과 채팅창이 작동하지 않는 문제를 해결했습니다
  • 10.4 - 컬렉션 탭에서 이제 다시 유사한 철자로 챔피언을 검색할 수 있습니다
  • 10.4 - 이제 소/대문자 구별 없이 컬렉션 탭에서 챔피언을 검색할 수 있습니다
  • 10.4 - 이제 컬렉션 탭에서 챔피언을 알파벳순으로 정확히 정렬할 수 있습니다
  • 10.4 - 이제 ‘나만의 상점’을 보다가 게임을 시작했고 게임 종료 후 ‘한 번 더 하기’ 버튼을 클릭해도 클라이언트가 검은 화면을 표시하지 않습니다
  • 10.5 - 컬렉션 탭의 챔피언 페이지 맨 아래에 있는 불필요한 스크롤 바를 삭제했습니다
  • 10.7 - 사용자 설정 게임 로비에서 ‘친구 요청 보내기’ 버튼을 사용할 수 없게 되는 문제를 해결했습니다
  • 10.7 - 격전 허브에서 예정된 토너먼트를 볼 때 ‘일정 보기’ 정보 화면이 이제 흐리게 표시되지 않습니다
  • 10.8 - 변경사항을 저장하지 않고 감정표현 탭을 나갈 때 변경사항 저장 여부를 묻는 메시지가 이제 정상적으로 표시됩니다
  • 10.8 - 게임 종료 화면에서 나가면 이제 내정보 페이지로 이동하지 않습니다
  • 10.8 - 클라이언트에 로그인할 때 소환사 아이콘이 이제 정상적으로 표시됩니다
  • 10.9 - 파랑 팀 근접 미니언 아이콘을 선택할 수 없게 되는 문제를 해결했습니다
  • 10.9 - 유지/관리 작업으로 인해 리그 오브 레전드를 플레이할 수 없을 때 로그인을 시도한 플레이어는 이제 부정확한 오류 메시지를 받지 않습니다
  • 10.9 - 차단한 플레이어의 이름이 차단 목록에 나타나지 않는 문제를 해결했습니다
  • 10.9 - 구버전 엠버 앱으로 인해 발생하는 메모리 누수를 해결하기 위한 몇 가지 수정이 이루어졌습니다
  • 10.10 - 로그인 직후 룬 페이지가 사라지거나 삭제된 것처럼 보이는 버그를 수정했습니다
  • 10.10 - 이제 ‘게임 시작’ 버튼을 클릭하면 룬 페이지가 자동으로 닫힙니다
  • 10.10 - 이제 룬 페이지를 재정렬해도 중복된 룬 페이지가 생기거나 충돌이 일어나지 않습니다
  • 10.10 - 일부 플레이어가 룬 페이지를 수정할 수 없는 문제를 해결했습니다
  • 10.11 - 이제 ‘저사양 모드 활성화’ 및 ‘게임 중에는 클라이언트 완전히 끄기’ 세팅이 세팅 창을 닫으면 정상적으로 저장됩니다
  • 10.11 - 컬렉션 탭에서 ‘스킨 등급’ 버튼이 부분적으로 비어있는 문제를 해결했습니다
  • 10.11 - 플레이어가 가끔 관전 모드에 들어갈 수 없는 문제를 해결했습니다
  • 10.12 - 챔피언 선택 중 룬 페이지 기능에 영향을 주는 문제를 해결했습니다

위 버그가 지금까지 저희가 수정한 버그입니다.

다음 단계

저희는 클라이언트 작업을 하면서 다음과 같은 근본적인 질문을 반복해서 던져봅니다. ‘리그 오브 레전드 클라이언트가 플레이어를 위해 제 역할을 다하고 있는가?

이 질문에 대한 답은 물론 ‘아니오’입니다. 적어도 아직은 아니죠.

수정해야 할 버그, 예방해야 할 충돌, 근절해야 할 근본적인 아키텍처 문제가 많습니다. ‘클라이언트가 플레이어를 위해 제 역할을 다하는가?’라는 질문에 저희가 당당히 ‘네’라고 답할 수 있을 때까지 올해 저희가 시작한 작업은 계속될 것입니다.

그 시점에 이르기까지 시간이 걸리겠지만, 그 과정에서 여러분께 계속해서 소식 전하겠습니다. 다음 몇 번의 패치 기간에 저희는 계속해서 플러그인과 엠버 앱 통합 작업을 이어가면서 발견된 버그를 수정하려고 합니다. 다음 소식을 전할 때쯤에는 저희가 이 작업의 다음 단계 준비를 완료한 상태라면 좋겠네요. 다음 단계에서는 챔피언 선택 과정의 반응성 개선에 특히 중점을 두고자 합니다.

리그 오브 레전드를 플레이해주셔서 감사합니다. 몇 달 내로 또 다른 클라이언트 블로그 글로 여러분께 다시 인사드리겠습니다.