클라이언트 개선 작업: 2020년 돌아보기 & 향후 계획

2020년에 일궈낸 성과와 2021년 계획을 말씀드립니다

앞서 리그 오브 레전드 클라이언트의 성능과 안정성을 개선하는 작업에 대해 꾸준히 소식을 전해드리기로 약속한 바 있습니다.

오늘 글은 이 시리즈의 여섯 번째 블로그 글입니다. (첫 번째 글은 여기서, 두 번째 글은 여기서, 세 번째 글은 여기서, 네 번째 글은 여기서, 다섯 번째 글은 여기서 볼 수 있습니다.)

요약: 2020년 동안 클라이언트 기동 시간, 아키텍처, 챔피언 선택, 게임 종료 과정, 메모리 누수, 클라이언트 충돌 등의 개선 작업과 버그 수정을 진행했습니다. 현재 2021년 1분기 계획을 수립하는 중이며 커뮤니티 패널과 계속해서 클라이언트의 전반적인 안정성을 개선하는 데 집중하고자 합니다.

2020년 돌아보기

클라이언트 팀은 2019년 말에 구성되었으며 초창기에는 리그 오브 레전드 클라이언트의 상태를 파악하는 작업이 주된 업무였습니다. 이러한 과정에서 클라이언트 개선 작업의 초점은 전 세계 플레이어 여러분이 가장 신경 쓰시는 부분에 두기로 했습니다. 할 일은 아직 남았지만, 2020년 동안 클라이언트 개선 작업을 하며 유의미한 진전을 이룩했습니다.

  • 어떤 작업을 할지 결정할 때 사용하는 전 세계 클라이언트 인식 플레이어 설문 조사를 진행했습니다. 아래 성과 대부분은 플레이어 여러분의 바람에서 비롯되었습니다.
  • 전 세계 플레이어 90%의 클라이언트 부트스트랩(기동) 시간을 (2020년 초의 29.5초에서) 16초까지 단축했습니다.
    • 이는 클라이언트 내 부트스트랩 엠버 앱(클라이언트 기동 시 로딩되는 앱)을 63% 줄이고 플러그인을 57% 줄이는 등 아키텍처 작업의 결실입니다. 간단히 말해 대량의 코드를 정리했습니다.
  • 챔피언 선택 과정에서 챔피언을 선택하고 금지할 때의 반응성과 안정성을 향상했습니다.
    • 챔피언을 검색할 때 필터를 적용하면 나타나는 성능 문제 해결, 중앙의 챔피언 아이콘 표시부에 개선사항 적용
    • 챔피언 선택에 도입된 기능 중 일부에 대해 사용 실태를 살펴봤습니다. 자세한 내용은 아래에서 말씀드리겠습니다.
    • 챔피언 선택 준비 완료 및 금지에 걸리는 시간 개선
    • 챔피언 선택 및 관련 부분에서 발생하는 메모리 누수 해결 (아래에서 구체적으로 다룹니다)
  • 게임 종료 과정 중 클라이언트로 돌아오는 단계에서 클라이언트가 완전히 멈추고 화면이 검은색으로 변하는 현상을 해결했습니다.
  • 게임 종료 후 재접속 버튼이 표시된 채 클라이언트가 반응하지 않는 문제를 해결했습니다.
  • 2020년 동안 소소한 문제부터 해묵은 문제까지 총 175가지 버그를 수정했습니다.
    • 채팅 창에서 플레이어의 이름이 “...”으로 표시되는 문제
    • 메시지를 받았을 때 작업 표시줄의 단추가 깜빡이지 않는 문제
    • 새로운 플레이어에게 커뮤니티 패널이 보이지 않는 문제
    • 다른 컴퓨터에서 로그인할 때 설정이 초기화되는 문제
    • 로그인 시 선물 알림이 반복되는 문제
    • 클라이언트에서 각종 동작을 실행한 다음 홈 화면으로 돌아왔을 때 검은색만 보이는 문제
  • 컬렉션 탭과 각 하위 탭의 반응성을 개선했습니다.
  • 룬 탭의 로딩 시간을 40% 단축하고 룬 인터페이스의 원활성과 안정성을 향상했습니다.
  • 클라이언트 전체에 걸쳐 30가지의 메모리 누수를 해결했습니다. 해결하기 어려운 문제였을 뿐만 아니라 2020년 후반에 발견했음에도 연말 전에 개선사항을 도입할 수 있어 특히 뿌듯했습니다.
    • 메모리 누수는 작업이 완료된 후 프로그램의 일부가 메모리를 반환하지 않았을 때 발생합니다. 이는 시스템에서 실행 중인 다른 프로그램에 할당 가능한 메모리가 전체적으로 줄어드는 결과를 낳습니다. 메모리 누수가 겹치면 항상 문제를 유발하며 원인을 정확히 잡아내기란 극도로 어렵습니다. 프로그램이 크면 더더욱 어려워집니다.
    • 10.23 패치에서 메모리 누수 수정사항이 적용되기 전 라이엇 지역에서는 메모리 부족으로 인한 충돌이 패치마다 193,000건씩 발생했습니다. 2020년의 마지막 패치인 10.25 패치에서는 충돌 건수가 55% 감소했습니다!

앞서 말씀드린 대로 전 세계 클라이언트 인식 플레이어 설문 조사 응답을 참고해 집중적으로 작업할 분야를 정했습니다. 위와 같은 진전은 개선의 목소리가 가장 높았던 몇몇 분야에서 이루어졌지만, 궁극적으로 이러한 노력에 의미가 있으려면 플레이어 여러분 모두가 상황이 나아지고 있다고 느껴야 합니다. 그런 만큼 게임 내 지표뿐만 아니라 전체적인 설문 조사 결과도 긍정적인 추세를 보인다는 소식을 전해드리게 되어 기쁩니다. 클라이언트 사용 경험이 덜 짜증 난다고 느끼는 플레이어가 점점 많아지고 있다는 의미죠!

...방점은 ‘덜 짜증 난다’에 있습니다. 올해 달성해야 할 목표는 아직 많이 남았으며 앞으로도 계속 진행 상황을 전해드리겠습니다.

사용도가 낮은 챔피언 선택 기능

기억하시는 분도 있겠지만, 이전 글에서 전반적인 성능 개선을 위해 사용도가 낮은 챔피언 선택 기능의 삭제를 검토하는 중이라고 언급했습니다. 선호 챔피언 지정, 임무, 감정표현 기능을 살펴본 결과 챔피언 선택에서 삭제하지 않고 최적화 작업을 진행하기로 했습니다. 벌써 감정표현 창 관련 문제 하나를 수정했으며 선호 챔피언 지정과 임무 기능도 의도한 대로 작동하게 하는 작업을 하고 있습니다.

예정된 작업

현재 올해 1분기 계획 수립을 마무리 짓고 있으며 다음으로 진행 예정인 리그 오브 레전드 클라이언트 개선 작업은 아래와 같습니다.

커뮤니티 패널

작년 동안 커뮤니티 패널 관련 문제의 증가 추세가 이어졌습니다. 12월에는 게임 중인 친구의 플레이어 카드에 게임 모드와 챔피언이 표시되지 않는 문제를 수정했습니다. 다음으로 해결할 계획인 문제는 아래와 같습니다.

  1. 커뮤니티 패널이 연결되지 않는 문제
  2. 친구 목록이 로딩되지 않고, 친구의 상태가 틀리게 표시되고, 친구가 보이지 않는 문제
  3. 친구 목록이 가득 찼을 때 친구 요청을 받지 못하는 문제
  4. 친구가 일반 게임 중일 때 플레이어 카드에서 랭크 정보가 사라지는 문제
  5. 메시지를 연이어 빠르게 입력하면 채팅이 버벅거리는 문제
  6. 클라이언트 종료 시 폴더의 순서가 바뀌는 문제
  7. ‘게임 및 서버 분류하기’로 정렬 시 레전드 오브 룬테라 및 발로란트 폴더가 사라지는 문제
  8.  채팅 창에서 ‘날짜별 보기’를 클릭하면 텍스트 상자가 겹치는 문제
  9. ‘새로운 친구 요청 알림 표시’ 설정이 반대로 작동하는 문제

또한 오래된 자바스크립트(아래에서 더 자세히 다루겠습니다) 프레임워크를 폐기하고 커뮤니티 패널이 완전히 엠버 기반으로 작동하게 할 계획입니다. 이번 기회에 코드를 자세히 살펴보고 깔끔하게 정리해 안정성을 향상하고 버그를 줄이고자 합니다.

클라이언트 안정성

리그 오브 레전드 클라이언트의 안정성을 개선하는 작업에 클라이언트 충돌과 자바스크립트 오류 등 2개의 새로운 중점 분야를 추가할 계획입니다. 이러한 오류는 여러 가지 현상으로 이어질 수 있으며 여기에는... 클라이언트 충돌도 포함됩니다. 작업을 진행할 때 챔피언 선택이나 클라이언트 부트스트랩 등 클라이언트의 특정 부분에 집중하지 않고 클라이언트 전체를 포괄적으로 살펴보고자 합니다. 기존에 우선으로 진행하던 안정성 작업에 새로운 집중 분야를 더한 4개의 주안점은 아래와 같습니다.

  • 충돌 감소: 10.25 패치 기간 중 16개의 라이엇 지역에 걸쳐 220만 건의 클라이언트 충돌이 발생했습니다. 초기 조사에 따르면 현재 사용하는 크로미엄을 새로운 버전으로 업그레이드하는 방안이 대부분의 충돌을 해결하는 데 최선책인 듯합니다. 크로미엄은 리그 오브 레전드 클라이언트 아키텍처의 기반이 되는 웹 브라우저입니다.
  • 자바스크립트 오류 감소: 10.25 패치 기간 중 16개의 라이엇 지역에 걸쳐 3천 6백만 건의 자바스크립트 오류가 발생했습니다. 자바스크립트 오류가 충돌이나 성능 저하로 이어지지 않을 때도 있지만, 표면적으로 드러나지 않는 오류라도 쌓이면 결국 그러한 문제로 이어지기도 합니다. 발생하는 오류를 줄이면 클라이언트 전반에 걸쳐 긍정적인 효과를 기대할 수 있습니다.
  • 계속해서 메모리 누수 해결: 작년 메모리 누수를 일부 해결했는데 효과가 아주 좋았습니다. 올해도 마찬가지로 큰 성과를 거두고 싶습니다.
  • 코드베이스를 깔끔하게 정리하기 위해 아키텍처 작업 계속: 앞서 말씀드린 대로 크로미엄을 업그레이드하려면 많은 사전 작업이 필요합니다. 사전 작업은 그 자체만으로도 클라이언트 성능을 추가로 향상하는 효과를 가집니다. 올해 중반 무렵까지 사전 작업을 완료하고 크로미엄 업그레이드 작업에 착수할 계획입니다.
    • 마지막으로 크로미엄을 업그레이드한 시점은 클라이언트 개선 작업을 시작하기 몇 달 전인 2019년 12월이었습니다. 그때의 업그레이드는 효과가 좋았으며(Ctrl+F로 “크로미엄”을 검색해주세요) 이번 업그레이드를 적용할 시점이 다가오면 기대 효과를 자세히 설명해드리겠습니다.

클라이언트에 대한 피드백을 꾸준히 보내주셔서 감사하며 모두 잘 새겨듣고 있습니다! 좋은 성과를 거둔 2020년의 여세를 이어나가면서 앞으로도 계속 플레이어 여러분을 위해 클라이언트를 개선하겠습니다!