클라이언트 개선 작업: 크로미엄 임베디드 프레임워크(CEF) 업데이트 도입 완료
요약: 11.17 패치에서 리그 오브 레전드 클라이언트의 기반이 되는 크로미엄 임베디드 프레임워크 웹 브라우저를 업데이트했으며 메모리 사용량 대폭 개선, CPU 사용률 감소, 충돌 감소 등으로 이어졌습니다. 따라서 이제 클라이언트 안정성 및 성능을 개선하기 위한 업데이트를 더 자주 진행하는 데 초점을 맞출 수 있습니다!
크로미엄 임베디드 프레임워크 업데이트
클라이언트 개선 작업에 큰 진전이 있었습니다! 올해 초 리그 오브 레전드 클라이언트 아키텍처의 기반이 되는 웹 브라우저인 크로미엄 임베디드 프레임워크(Chromium Embedded Framework, 이하 CEF)를 버전 91로 업데이트하는 작업이 클라이언트 개선에 가장 크게 기여하겠다고 판단한 바 있습니다. (참고로 2019년 11월에 마지막으로 업데이트했을 때는 버전 74였습니다...) CEF 업데이트의 이점은 두 가지로 나눌 수 있습니다. 우선 메모리 사용량, CPU 사용률, 안정성 등이 즉시 개선됩니다. 둘째로 업데이트에는 새로운 기능과 툴(잠시 후 자세히 말씀드리겠습니다)이 포함되기 때문에 향후 개선이 용이해집니다. 이러한 이유로 CEF 업데이트는 올해의 최우선 사항이었으며 11.17 패치에서 버전 91 업데이트를 성공적으로 도입한 후 지금까지 결과가 매우 좋다는 소식을 전해드리게 되어 정말 기쁩니다!
클라이언트 충돌 감소
CEF 업데이트는 클라이언트 충돌을 대거 해결하는 데 도움이 되었으며 앞으로 계속 플레이어에게 중대한 영향을 끼치는 문제들을 해결해 나가고자 합니다. 11.16 패치 이후 충돌 건수 61% 감소, 2021년 현재 기준 평균 대비 38% 감소라는 만족스러운 결과를 얻었으며 충돌 건수를 더욱더 줄이기 위한 노력을 이어갈 계획입니다. 사실 11.18 패치 초기 데이터에 따르면 충돌 건수가 또 줄어들었습니다! 한 번의 패치 기간에는 엄청난 숫자(라이엇 지역에서는 2억 4천 회를 넘어가기도 합니다!)의 클라이언트 기동이 이루어지니 굉장히 만족스러운 결과입니다.
패치 | 충돌 건수 |
11.14 | 2,349,865 |
11.15* | 3,686,442 |
11.16 | 3,161,145 |
11.17 | 1,214,155 |
(* 11.15 패치 기간은 평소보다 길었기 때문에 건수가 많았습니다.)
나머지 충돌의 가장 흔한 원인은 컴퓨터의 메모리가 부족하기 때문인 듯합니다. 더 자세히 살펴본 결과 메모리 부족으로 인한 충돌 중 거의 절반이 Windows 7을 구동 중인 오래된 PC에서 발생했다는 사실을 발견했습니다. 세계 각지에 Windows 7(현재 구동에 필요한 최소 사양)을 사용하는 오래된 PC에서 리그 오브 레전드를 즐기는 플레이어가 있기는 하지만, 충돌 건수 중 자동 프로그램(봇), 정품 또는 최신 버전이 아닌 Windows, 정상적인 리그 오브 레전드 플레이어를 대표하지 않는 기타 상황 등으로 인한 경우가 얼마나 되는지 살펴보고자 합니다.
메모리 사용량 감소
클라이언트를 한 번 시작한 후 종료하기까지의 프런트엔드 메모리 사용량은 많이 감소한 모습을 보였습니다. 클라이언트의 프런트엔드란 플레이어가 상호작용하는 버튼이나 텍스트 필드 등 보이거나 클릭 가능한 모든 요소를 의미합니다. 라이엇 지역에서 개선 효과는 아래와 같았습니다.
CEF 버전 | 20백분위수 플레이어 (고사양 PC) | 50백분위수 플레이어 (중간 사양 PC) | 90백분위수 플레이어 (저사양 PC) |
74 (11.17 패치 전) | 359MB | 597MB | 1,016MB |
91 (11.17 패치 이후) | 74MB | 275MB | 598MB |
개선 효과 | 285MB (79%) | 322MB (54%) | 418MB (41%) |
이와 같은 상황에서 메모리는 집중력과 비슷합니다. 여유 메모리가 늘어날수록 컴퓨터가 동시다발적으로 작업을 처리하거나 기존 작업에 집중할 여력이 더 확보됩니다. 그러면 클라이언트 충돌이 덜 발생하고 여유 메모리로 LCK 방송을 시청하는 동시에 랭크 게임 대전 검색을 기다릴 수 있겠죠!
CPU 사용률 감소
클라이언트 구동에 필요한 CPU 전력 또한 감소했습니다. 라이엇 지역에서 개선 효과는 아래와 같았습니다.
CEF 버전 | 20백분위수 플레이어 (고사양 PC) | 50백분위수 플레이어 (중간 사양 PC) | 90백분위수 플레이어 (저사양 PC) |
74 (11.17 패치 전) | 13% | 34% | 83% |
91 (11.17 패치 이후) | 10% | 22% | 72% |
감소율 | 23% | 35% | 15% |
CPU 사용률 감소는 컴퓨터가 힘을 덜 들여도 클라이언트를 구동할 수 있음을 의미해서 CPU 온도와 전력 소비 감소로 이어집니다. 예를 들자면 영상은 CPU 부하를 대폭 늘리지만, 리그 오브 레전드 클라이언트는 그러지 않아야 합니다. 한 마디로 넷플릭스와 펜타킬을 즐길 여력이 늘어납니다.
CEF를 새 버전으로 업데이트하면 무엇이 가능해지나요?
크로미엄 기반 앱
크로미엄 기반 앱인 툴과 프로그램은 소프트웨어 개발 분야에서 급성장하고 있습니다. 이 글을 읽는 지금, Discord로 친구와 채팅할 때, 같은 노래 10곡으로 이루어진 플레이리스트를 100번째 들을 때 모두 이미 크로미엄 앱을 사용하고 계실 수 있습니다. 리그 오브 레전드 클라이언트 역시 크로미엄 기반입니다. 클라이언트의 CEF 버전을 업데이트하면 크로미엄의 새로운 기능과 개선사항을 활용할 수 있습니다.
웹어셈블리
다음으로 다룰 웹어셈블리(WebAssembly)는 복잡한 명령을 기본적인 자바스크립트보다 훨씬 빠르게 실행할 수 있는 코드 형식입니다. 클라이언트의 앱은 대부분(이전 블로그 글에 등장한 엠버 앱 기억하시나요?) 아직 자바스크립트를 기반으로 작동합니다. CEF는 웹어셈블리를 활용해 코드를 더 효율적으로 처리하는 특화된 ‘초소형 컴퓨터’를 클라이언트 내에서 가상으로 구동합니다. 웹어셈블리는 폭넓은 프로그래밍 언어를 지원하므로 기존 코드를 재사용하기 쉬워질 뿐만 아니라 (별도의 앱을 실행하는 방식 대신에) 특화된 ‘초소형 컴퓨터’에서 프로세스를 실행하기 때문에 성능 면에서 유리합니다. 웹어셈블리는 웹 전체에 걸쳐 서서히 채택되는 중이며 크로미엄이 업데이트될 때마다 웹어셈블리에 대한 지원이 강화되고 있습니다. 웹어셈블리를 활용하면 클라이언트가 더 빨라지고 과거에 불가능했던 작업을 진행할 수 있게 됩니다.
웹 워커
웹 워커(Web Workers)라는 기술도 있습니다. 과거에 크로미엄 앱은 동기적으로 작동했습니다. 코드를 한 줄씩 처리한다는 의미인데요. 작업자 1명이 공장의 생산 라인을 전부 담당하는 상황과 비슷합니다. 반면에 웹 워커는 작업자를 늘려 여러 줄의 코드를 동시에 처리합니다. 예를 들어 채팅 웹 워커가 채팅과 관련된 모든 일을 처리하는 동안 클라이언트는 게임 진입 작업에 집중할 수 있습니다. 그러니 이제는 정말 수다스러운 친구가 티모 빌드를 추천해달라고 하는 상황에서도 채팅 창이 클라이언트의 다른 부분을 느리게 만들지 않습니다. 웹 워커 역시 클라이언트의 속도를 올려줍니다.
이러한 신규 기능을 효과적으로 활용하기 위한 코드를 새로 작성하지 않았는데 CEF 업데이트만으로도 벌써 클라이언트가 빨라졌습니다. 이는 이미 작성한 자바스크립트를 더 잘 처리할 수 있게 되었기 때문입니다. 이제 클라이언트의 다른 부분을 개선하면서 근본적인 성능 개선에 효과적인 방법에 집중할 수 있습니다.
기타 작업 현황
지난 글 이후 게임 종료 과정에서도 진전이 있었습니다. 우선 통계 표시 건너뛰기 화면에서 지연 현상이 여전히 발생하고 있는데 정확히 어떤 이유로 문제가 발생하는지 확인하기 위해 데이터를 수집하는 코드를 추가했습니다. 지금처럼 긴 지연 시간은 비정상적이며 이러한 작업 덕분에 문제의 원인을 파악하고 지연 시간을 줄일 수 있었습니다. 11.17 패치에서는 통계 표시 건너뛰기 화면에서 클라이언트가 완전히 멈출 가능성을 줄이는 수정사항을 적용했습니다. 11.19 패치에서는 게임 종료 과정의 속도를 더 올려줄 게임 엔진 수정사항이 추가로 도입될 예정입니다. 마지막으로 도전과제를 도입할 생각에 기대가 크며 새로운 기능이 클라이언트의 성능과 안정성에 부정적인 영향을 끼치지 않도록 사전 조사를 철저히 진행하고 있습니다.
향후 계획
CEF 업데이트의 클라이언트 개선 효과가 탁월하다는 점을 고려해 업데이트를 (1.5년 주기가 아니라) 더 자주 진행하는 일정을 수립하고 있습니다. 남은 2021년 동안 플레이어 여러분께 향상된 경험을 선사해드리기 위해 클라이언트의 안정성을 계속 우선시하면서 도전과제 팀과 게임 종료 과정을 살펴보고 큰 불편을 야기하는 버그를 수정하며 코드를 꾸준히 개선해 나가고자 합니다. 클라이언트 개선 작업으로 달성한 엄청난 성과를 축하하는 자리에 함께해주셔서 감사합니다! 그럼 다음에 다시 인사드리겠습니다.