Apex 레전드 정보 레전드 스토리 허브 FAQ PC 요구 사항 제작진 접근성 배틀 로얄 팀 데스매치 컨트롤 건 런 시즌 배틀 패스 최신 뉴스 게임 업데이트 최신 미디어 뉴스레터 가입 스토어 Twitter Instagram Facebook Youtube Twitch TikTok 포럼 커뮤니티 리소스 playapexshop.com 경쟁 커뮤니티 가이드라인 Apex 레전드 정보 레전드 스토리 허브 FAQ PC 요구 사항 제작진 접근성 배틀 로얄 팀 데스매치 컨트롤 건 런 시즌 배틀 패스 최신 뉴스 게임 업데이트 최신 미디어 뉴스레터 가입 스토어 Twitter Instagram Facebook Youtube Twitch TikTok 포럼 커뮤니티 리소스 playapexshop.com 경쟁 커뮤니티 가이드라인 Windows용 EA app PC용 Steam PlayStation®4 PlayStation®5 Xbox Nintendo Switch Windows용 EA app PC용 Steam PlayStation®4 PlayStation®5 Xbox Nintendo Switch

PC용 Apex 레전드 다운로드

PC용 다운로드

본 게임은 게임 내의 무작위 가상 아이템 선택을 포함한 게임 내 아이템 획득에 사용되는 게임 내 가상 화폐 구매가 포함되어 있습니다.

이용약관

EA 사용자 계약

스토어 방문하기

Apex 틱의 원리: 개발자의 서버 및 넷코드 심층 분석

Apex 레전드의 리드 엔지니어인 Ricklesauceur와 함께 플레이어들이 겪는 온라인 문제와 원인, 그리고 개발자들의 문제 해결 노력에 대해 알아보겠습니다.

시작하며

안녕하세요? Apex 레전드의 리드 엔지니어인 @ricklesauceur입니다. 오늘은 여러분께 Apex 레전드를 지원하는 온라인 인프라에 대해 조금 설명해 드리겠습니다.

지금까지는 Apex 레전드의 서버, 넷코드, 온라인 인프라에 대해 공개적으로 이야기한 적은 거의 없지만, 이제부터는 조금 더 자주 다루려고 합니다. 오늘 설명할 내용은 다음과 같습니다.

  • Apex 레전드에서 온라인 경험을 개선하기 위해 개발팀이 진행 중인 작업
  • Apex를 플레이하며 겪을 수 있는 흔한 온라인 문제 또는 연결 문제에 대한 이해 및 설명
  • 슬로우 모션 서버, 피격 판정, 지연 보정 시스템 등 특히 자주 묻는 질문에 대한 설명
  • 서버 틱레이트, 그리고 틱레이트가 영향을 주는 것과 주지 않는 것에 대한 자세한 설명

경고: 본 게시물은 아주 깁니다. 플레이어 여러분들이 궁금해하셨던 Apex 레전드 온라인 인프라에 대해 제대로 된 심층 설명을 하기 위해서 작성되었기 때문입니다.

이 글을 시작으로 더 긴 글을 작성할 예정입니다. 이 글에서 많은 주제를 다루고 있지만, 많은 시간을 쏟을 필요가 있는 다양한 주제(DDOS 공격! 서버 충돌 버그! 기타 등등!)가 여전히 많습니다. 이 블로그 글이 마음에 든다면, 다음에는 어떤 소식을 듣고 싶은지 알려주세요. 계속 이어가도록 하겠습니다.

넷코드, 서버, 틱레이트, 다양한 온라인 기술에 대해 자세히 아시는 분이라면 모두 환영합니다! 저희가 최근 개선한 사항에 관해 이야기해보겠습니다.

성능 데이터로 대응 시간 향상

시즌 6에서는 성능 디스플레이가 도입되었습니다. 이렇게 생겼으며, 성능에 대한 기본 정보를 제공합니다.

"인"과 "아웃"은 게임이 소모하는 대역폭입니다(kB/s). 지연 시간도 있습니다(밀리 세컨드). 패킷 손실과 초크 패킷은 초당 패킷의 %로 계산됩니다.

이러한 수치는 플레이어와 개발자에게 도움이 됩니다. 게임을 플레이하며 어떤 문제를 겪는지 이해할 수 있기 때문입니다. 즉, 발생한 문제를 실제 기술적인 정보로 변환할 수 있는 것이죠.

성능 디스플레이가 있기 전에는 플레이어들이 "무언가" 잘못됐다고 느끼더라도 더 자세하게 알아볼 방법이 없었습니다. 하지만 이제 플레이어는 "10% 패킷 손실을 겪고 있고 300ms의 지연 시간을 겪고 있다"처럼 정확하게 말할 수 있게 되었습니다. 사실상 모든 게 바뀌었다고 할 수 있는데, 이러한 숫자는 종종 잘못된 걸 바로잡는 데 가장 큰 역할을 하기 때문입니다. 이 역할에 대해서는 나중에 다시 설명하도록 하겠습니다.

성능 디스플레이를 작업하는 동안, 플레이어와 서버의 주요 성능 통계 또한 추적하기 시작했습니다. 이러한 추적 데이터로 게임 플레이 당시 누군가 문제를 신고하면, 매치 정보를 불러와 어떤 서버가 게임을 호스팅하고 있는지에 대한 정보를 포함한 모두의 성능 정보를 조회할 수 있습니다.

이로써 개인화되면서 집중적인 방법으로 서버 문제를 조사할 기회가 저희 팀에게 주어졌습니다. 저희는 이 접근법으로 어느 정도 성공을 거뒀지만, 장기적인 서버 문제 해결 방법은 아니라고 생각합니다. 먼저, 저희는 플레이어 여러분의 신고를 받은 다음 그 후 엔지니어를 할당해 문제의 원인을 파악한 후 문제의 원인에 따라 해결을 시도합니다.

최근 시즌에서는 멋진 외부 데이터 사이언스 팀의 도움을 받아 1주일치의 데이터를 나열 및 처리(예: 수집 및 분석)하고 지나친 패킷 손실과 서버 성능 문제를 발견할 수 있었습니다. 이러한 접근법은 이미 효과가 나타나고 있습니다. 예를 들어, 일부 서버에서 호스팅하는 게임의 네트워크 성능이 정말 좋지 않았는데, 저희 데이터센터의 네트워크 장비 하나가 불량이라는 걸 파악했습니다. 서버 자체는 괜찮았지만, 문제의 서버에 연결된 하드웨어가 방대한 패킷 손실을 유발했습니다. 이런 예시처럼 많은 문제를 발견하고 있습니다.

데이터를 체계적으로 분석하여 얻을 수 있는 가장 큰 이점은 수치와 플레이어를 교차 참조하여 패턴을 찾을 수 있도록 해준다는 것입니다. 그리하여 매주 서버의 상태가 좋아지는지, 나빠지는지 확실하게 말할 수 있게 되었습니다. 문제가 통제 범위를 벗어났을 때, 데이터 분석은 저희 협력사가 문제를 수정하는 데 큰 도움이 됩니다. 알 수 없는 무언가가 잘못되었다고 알리는 대신, "특정 요소가 잘못됐다"라고 짚어주기 때문에 관련된 모든 사람의 시간을 절약해줄 수 있습니다. (이런 정보 수집에 동의하지 않을 수 있습니다. 설정 메뉴에서 "게임 플레이"의 "사용 공유" 체크를 해제하세요.)

이런 자동화는 많은 도움이 되고 있습니다. 하지만 이것으로 충분하지 않습니다.

이런 접근법을 통해서도 문제에 대응하는 속도는 충분히 빠르지 않습니다. 대부분의 데이터를 안정적으로 수집하고 리포트하기까지는 일주일이 걸리며, 완전한 조사가 시행되기까지는 일주일이 더 걸립니다. 이렇게 문제를 발견하는 순간부터 해결책을 찾는 데 최대 2주가 걸릴 수 있으며, 서버 패치가 필요한 경우 해결책을 배포하는 데 더 많은 시간이 걸릴 수 있습니다.

이는 개선할 수 있는 문제이며, 개선을 위해 계속해서 노력할 것입니다. 이제 해결책에 대해 이야기해 보겠습니다.

먼저, 주간 리포트 외에도 실시간 알림 시스템을 추가했습니다. 실시간 알림은 같은 수준의 정보지만 더 빠르게 정보를 제공합니다. 이를 통해 하드웨어 문제를 바로 해결하거나 조사를 시작해 패치를 작업할 수 있습니다. 문제가 해결될 때까지 기다리는 게 괴로운 일이라는 것을 저희도 잘 알기 때문에, 서버 문제 경보와 해결책 사이의 시간을 단축하기 위해 노력하고 있습니다.

두 번째로, 플레이하고 있는 서버를 더 빨리 찾을 수 있도록 새로운 서버 고유 ID("SID")를 성능 디스플레이에 도입할 것입니다. 현재는 플레이어가 시간과 날짜를 제공하면 확보한 데이터와 상관관계를 분석하여 서버를 찾아야만 했습니다. 고유 ID가 도입되면 이런 일을 할 필요가 없게 됩니다.

위의 두 가지 해결책은 다가오는 시즌인, Apex 레전드: 레거시에서 적용될 예정이며, 서버 문제 해결 속도가 현재보다 두 배나 빨라질 것입니다.

알려진 문제에 대한 심층 분석

지금부터는 조금 흥미로운 부분으로, 여러분이 접할 수 있는 서버 문제를 광범위하게 분류해 보겠습니다. 아래 목록에 모든 문제가 포함되어 있는 것은 아니지만, 대부분의 질문에 대한 답을 찾을 수 있길 바랍니다.

서버가 슬로우 모션으로 돌아갑니다.

모두의 관심을 받는 문제입니다. 현재 저희 서버는 20Hz로 구동됩니다. 즉, 모든 세계 상태를 50ms(1초 또는 1,000밀리 세컨드를 20으로 나눔)에 한 번 구현합니다.

서버는 그림을 표시하는 것이 아니므로 FPS(초당 프레임)와는 무관합니다. 대신, 서버는 "상태"를 계산하죠. 하지만 기본 원칙은 동일합니다. 네트워크에서 유저 입력을 수신하고, 물리를 계산하고, 구현한 새로운 세계 상태를 클라이언트로 보내고 이를 반복합니다. 이 과정이 꾸준히 50ms 이상 소요되면, 서버가 구현을 완료할 수 있도록 게임 진행이 느려집니다. 따라서 슬로우 모션 서버가 되는 것입니다.

서버의 프레임타임 시각화 자료입니다. 5번째 열이 50ms 목표입니다. 이 아래는 모두 빠른 서버입니다. 이 서버는 안정적이고 요구하는 속도보다 더 빠르다는 것을 알 수 있습니다.

그에 비하면, 이 서버는 한 번도 프레임타임을 충족하지 못하고 약 200ms 프레임타임으로 돌아갑니다(목표보다 4배 느림). 전형적인 슬로우 모션 서버입니다.

이를 유발하는 건 여러 가지 원인이 있지만, 간혹 데이터센터 내 기계 부품이 언더클럭된 CPU, 과열 등의 다양한 원인으로 인해 제대로 성능을 내지 못하는 것과 연관이 있습니다.

일반적으로 이런 것을 발견하면 해당 기계를 제거합니다. 말 그대로 서비스 제공자를 호출하여 주어진 기계의 문제를 설명하고, 오프라인으로 전환해달라고 요청하는 것입니다.

앞서 언급한 실시간 감지 해결 방법으로 이러한 문제는 다가오는 시즌에 상당히 감소할 것입니다. 이 문제를 해결하기 위해 많은 노력과 시간을 투자했으며, 계속해서 지켜볼 예정입니다.

지연 시간이 불안정합니다.

Wi-Fi로 플레이하는 경우 저희가 할 수 있는 일은 거의 없습니다! 유선 연결이라면, 빠르게 변화하는 지연 시간은 저희 서버 성능과 관련있을 가능성이 있습니다.

보통 60 프레임으로 게임을 구동하더라도 많은 일이 화면에 일어나면 프레임이 떨어질 수 있습니다. 프레임이 조금만 떨어져도 느낄 수 있죠. 서버도 이와 유사하게 작동합니다. 이 문제의 원인을 확인하는 데는 자동 감지 시스템이 크게 도움되지 않습니다. 이전까지는 개발 서버에서 감속 현상을 재구현해야 했지만, 이는 오랜 시간이 걸리고 많은 시도를 해야 합니다. 플레이어의 컴퓨터로 실행했을 때는 만들어 낸 서버 환경과 설정과 다를 수 있어 모든 걸 1대 1로 구현하기 어렵습니다.

다행히 저희 오퍼레이션 팀이 RPROF 파일이라는 걸 얻을 수 있는 툴을 만들었습니다. 이 파일로 기본적으로 모든 프레임에서 서버가 무엇을 하는지(탄도 시뮬레이션, 네트워크 인/아웃, 플레이어 움직임 등) 볼 수 있습니다. RPROF 파일 덕분에 무엇이 느린지 파악하고 엔지니어가 최적화를 시작할 수 있습니다. 일반적으로는 시즌마다 생겨난 새로운 기능으로 성능 요구 사항이 증가하여 발생한 문제인 경우가 많습니다.

예를 들어, 시즌 7과 8에서 게임 시작 시 챔피언 등장 화면이 느려지는 걸 보신 적 있을 겁니다. 이 문제는 매치가 시작될 때 모든 플레이어가 같은 장소에 생성되면서 서로 겹칠 때 발생했습니다. (생성되는 모습은 UI 때문에 아예 볼 수 없습니다!) 물리 시뮬레이션은 어떤 물체가 다른 물체와 겹칠 때 많은 문제가 발생하고, 저희 물리 엔진은 몸이 겹칠 때 서로 밀어내려는 특성을 가지므로 서버에 거대한 CPU 부하를 줍니다.

지역별 느린 성능 문제를 가진 서버의 영향을 받은 매치 백분율입니다(슬로우 모션 포함). 일부 지역은 더 나아지고 있지만, 일부 지역은 나빠지고 있습니다(X축=시간).

미국 서부 지역에 대한 상세한 정보로 불량 기계를 확인할 수 있었습니다(X축=시간). 이 차트에서는 고장 난 부분이 확실하게 보입니다. 일부 기계는 영향을 받았고, 다른 기계는 안정적입니다.

RPROF 파일 사용을 통해 게임에 추가된 새로운 기능을 최적화하고, 향후 일반적인 지연 시간 단축에 도움이 될 것으로 기대하고 있습니다. 모든 플레이어의 지연 시간을 낮추는 것은 저희에게 매우 중요한 과제이므로, 이런 도구는 이러한 과제를 달성하기 위해 필수적인 존재입니다.

패킷 손실 / 초크 패킷이 많이 있습니다.

해결하기 아주 힘든 문제입니다. 아마 플레이어 여러분의 잘못도, 저희의 잘못도 아닙니다!

플레이어의 컴퓨터에서 나가는 인터넷 트래픽이 저희 데이터센터를 거치고 다시 돌아오는 방식에 문제가 발생하는 것입니다. 최초의 네트워크 트래픽은 ISP(인터넷 서비스 제공자) 네트워크에서 시작합니다. 플레이어의 ISP가 플레이어의 정보 및 다른 고객의 정보를 보내는 부분의 고장으로 인해 손실 / 거부가 있을 수 있습니다. 그 결과 게임 클라이언트가 플레이어 주변의 다른 플레이어에게 일어나는 일을 모르거나, 게임 서버가 플레이어가 총을 쏘고 싶은지, 움직이는 방향이 어디인지 제대로 파악하지 못할 수 있습니다. 또한, ISP 네트워크와 저희 데이터센터 네트워크 간의 연결도 잊어서는 안 됩니다. 이 연결선 어딘가에 문제가 발생할 수 있습니다.

일이 순조롭게 진행됐을 때 이 과정을 "피어링"라고 부릅니다. 대부분은 두 네트워크 사이의 연결 상태가 약해질 때 피어링 문제가 발생합니다. 서로 이어지는 길에는 여러 장소를 거쳐 갈 수 있습니다. 그리고 Apex 서버에서 보낸 정보가 다시 플레이어에게 가야 하며, 이때 간혹 다른 경로를 이용하게 됩니다. 왜 원인이 복잡한지 점점 이해가 될 겁니다.

이 문제를 해결하기 위해서는 먼저 문제의 발생 지점을 확인해야 합니다. 이를 자동화하기는 매우 어려운데, 여러분이 보내주신 데이터와 서버에서 받은 정보 모두가 필요하고, 두 "관점"에서 문제를 확인하고 네트워크의 경로를 따라 문제를 확인해야 하기 때문입니다.

현재로선 저희가 플레이어에게 네트워크 경로 추적 관련 정보를 받고, 저희 데이터센터 측에서도 같은 정보를 받아 문제의 혼잡 지점을 찾아야 합니다. 이는 아주 많은 시간을 투자해야 하고, 해결하는 데 오랜 시간이 걸립니다. 저희가 찾은 정보에 따라 전 세계의 사업 협력사들의 협조를 받아야 하기 때문이죠. 자동화가 이 과정을 개선하는 데 도움이 되기를 바라며, 아직 초기 단계지만 조금씩 개선해가고 있습니다.

저희가 이야기하고 있는 네트워크 트래픽 문제의 경우 다행인 점은, 이 문제가 특정 개인별로 나타나는 것이 아닌 단체로 일어나고 있다는 것입니다. 즉, 한 플레이어가 겪고 있는 문제를 해결하면 다른 플레이어들의 문제도 해결될 확률이 높습니다. 또한, 게임에서 사용하는 대역폭을 적극 줄여 문제를 완화하려 하고 있습니다.

호스트 최고 평균 최악 지역 ISP 22 31 264 ISP 1 27 185 515 ISP 2 24 194 652 게임 서버 31 263 522
호스트 최고 평균 최악
지역 ISP 22 31 264
ISP 1 27 185 515
ISP 2 24 194 652
게임 서버 31 263 522

이것은 한 프로 플레이어의 네트워크 추적 정보(지연 시간 표시)로, 인터넷 모뎀에서 저희 서버 중 하나까지의 통계입니다. 저희는 인터넷 연결의 실제 상태를 평가하기 위해 여러 번 조사를 시행합니다. 최상의 상태에서는 31ms의 대기 시간으로 게임을 플레이할 수 있었습니다. 하지만 최악의 기록은 약 522ms입니다. 이 경우에는 지연 시간이 500ms로 제대로 게임을 즐길 수 없습니다. 인터넷 연결이 로컬 ISP 네트워크에서 약간 흔들리지만, 평균적으로 이런 상황은 매우 희귀한 것으로 보입니다(평균 31ms, 최악 264ms로 단순 일회성 문제로 보임) 하지만 플레이어와 게임 서버 사이 노드 중 하나인 로컬 ISP와 ISP1 사이의 지연 시간이 증가하고 있습니다. 둘 사이에 패킷 손실과 라우팅 문제가 있는 것이 거의 분명합니다. 해당 문제는 저희가 통제할 수 없지만, 이 문제를 협력사에 알릴 수 있습니다. 이런 문제를 해결하는 것은 모든 플레이어에게 도움이 됩니다.

가끔 문이나 벽 뒤에서 죽거나 이전 자리로 다시 돌아갑니다.

꽤 논란이 있는 주제입니다. 바로 지연 보정 문제입니다.

온라인 게임이 처음 생긴 이후로 모든 게임의 개발자가 가진 가장 큰 문제는 실시간으로 실행되지 않는 게임을 가짜로 실시간 액션화하는 것입니다. 기본적으로, 온라인 게임에서 벌어지는 모든 일은 서버 및 돌아오는 데 걸리는 지연 시간 때문에 지연됩니다. 입력, 렌더링, 심지어 서버 틱레이트 등 많은 요인으로 지연 시간이 생깁니다.

설상가상으로 플레이어와 달리 상대도 다른 수준의 지연 시간이 추가된다는 것입니다. 이를 해결하기 위해 서버는 당신과 상대에게 일어나는 일뿐만 아니라, 여러분의 행동을 입력할 때 여러분의 관점에서 무슨 일이 일어나는지 끊임없이 살펴봐야 합니다. 지연 보정은 조금씩 다른 경험들을 전부 하나의 현실로 합치는 기법입니다.

여기에 완벽한 해결 방법은 없습니다. 하나된 진실은 없기 때문입니다. 가장 중요한 것은 서버는 일종의 타임머신이라는 것입니다. 서버는 꾸준히 세계 상태를 되돌려 플레이어가 발사한 총이 맞았는지 확인하고 세계에 있는 모두에게 업데이트합니다.

이 원칙을 더 잘 설명하기 위해, 저의 동료 Earl Hammon이 공정성과 지연 보정, 그리고 이것이 Apex 레전드에서 어떻게 작동하는지에 대한 짧은 글을 썼습니다. 아래에서 읽을 수 있습니다.

시나리오를 설명하기 위해 Apex 레전드에서 하이라는 플레이어와 로우라는 플레이어가 있다고 가정해 봅시다. 하이라는 플레이어는 핑 300ms, 로우라는 플레이어는 핑 50ms입니다. 서로의 핑 차이는 250입니다.

현실 기준으로 둘이 동시에 총을 쏘면 어떻게 될까요? 당연히 서버 기준에서는 로우의 총알이 하이의 총알보다 더 먼저 발사될 것입니다. 즉, 로우가 우세합니다.

만약 둘 중 하나가 모퉁이를 돌다가 서로를 마주친다면 어떻게 될까요? 여기서도 로우가 우세합니다. 로우가 서버에서 "덜 뒤처졌기" 때문에 하이를 먼저 볼 수 있습니다. 다시 한 번 로우가 핑으로 이득을 보는 셈입니다. 여기에 로우의 총알이 더 빨리 서버에 전해지는 이점까지 더해집니다.

이러한 경우는 로우가 이점을 지닌 "불공정"한 상황입니다. 하지만 낮은 핑의 플레이어가 이러한 상황에서 유리하다는 것이 합리적으로 받아들여지므로, 어느정도 "공정"하다고 할 수도 있습니다.

그렇다면 로우가 모퉁이 뒤에서 엄폐하기 위해 이동했다면 어떨까요? 하이는 로우가 엄폐하지 않은 과거에 머물러 있다면 로우를 쏠 수 있습니다. 반면 로우는 하이의 패킷이 서버로 도달하고, 서버에서 로우로 도달하기 전까지 하이가 쏜 사실을 알 수 없죠. 이렇게 되면 로우는 안전하게 엄폐했다고 생각했지만 총을 맞게 됩니다. 로우의 관점에서 보면 말이 안 되는 상황에서 총을 맞은 것입니다.

하지만 이는 로우에게 유리했던 상황에도 정확하게 적용됩니다! 로우가 갑자기 엄폐물에서 나와 하이를 쏠 때, 로우는 일어나서 하이를 보고 총을 쏘지만, 하이는 아직 로우가 엄폐물에 있는 것으로 처리됩니다. 하이의 관점에서 봤을 때, 엄폐물에 있던 누군가에게 맞았다는 것은 말이 되지 않습니다. 이러한 편차는 제거할 수 없으며, 오직 서로 번갈아가며 발생할 뿐입니다. 핑은 실제로 발생하는 것이고, 플레이어마다 지연 시간은 다르다는 간단한 현실이 있기 때문입니다

어떤 분들은 로우가 엄폐물에 도착했음에도 하이에게 맞는 것은 불공정하다고 말합니다. 그들은 대책으로 하이가 높은 핑으로 인해 먼저 보고 쏘는 것을 보정해야 한다고 합니다. 이를 위해서는 지연 시간을 불공평하고 비대칭적인 방법으로 다뤄야 합니다.

핑이 좋지 않아 엄폐물에 도착해도 총을 맞는 것은 기분 나쁜 일입니다. 이것은 로우에게 일어나는 일이죠. 또한, 적을 보기도 전에 적에게 맞는 것도 기분 나쁜 일입니다. 이는 하이에게 일어나는 일이죠. 하지만 이런 말도 안 될 것 같은 일은 대칭적으로 분배됩니다.

한 가지 명확하게 하고 싶은 것이 있습니다. 바로 모든 온라인 게임이 Apex처럼 작동하진 않는다는 겁니다. 어떤 게임은 핑이 낮은 플레이어에게 항상 우위를 제공하지만, 저희 시스템은 그렇지 않습니다. 이는 온라인 경쟁에서 공정성에 대해 진지하게 생각한 후, 의도적으로 취한 입장입니다.

저희 시스템을 간단하게 설명하자면, 핑이 낮더라도 항상 핑이 높은 사람에 대해 이점을 주지는 않습니다. 그래서 말 안되는 상황을 간혹 겪는 것입니다(기술적인 용어입니다).

이런 일은 저희가 의도적으로 결정한 시스템의 단점이기도 합니다. 하지만 평균 지연 시간보다 더 높은 지연 시간을 가지고 있더라도 Apex 레전드를 원활하게 플레이할 수 있는 장점이 있습니다. 특히 외딴 지역이나 연결이 불안정한 지역의 플레이어에게는 아주 중요한 장점입니다. 저희는 이런 "말 안 되는 상황"을 줄이기 위해 최대한 많은 노력을 기울이고 있습니다. 하지만 이상적이지 않은 경험을 고칠 때는 여전히 모든 플레이어에게 공정한 방법으로 처리하고자 합니다.

그러므로 거의 모든 플레이어가 벽 뒤에서 총을 맞거나 코너를 돌자마자 총을 맞는 등 말이 안되는 상황을 마주하게 됩니다. 이는 플레이어 간의 지연 시간 불일치, 그리고 시스템에서 분배되는 방식이 다르기에 불가피한 상황이 되는 것입니다. 하지만 저희는 이러한 상황을 줄이기 위해 노력하고 있습니다. 모두에게 공정한 경험을 제공할 뿐만 아니라, 모두에게 즐거운 경험을 제공하고 싶기 때문입니다.

가끔 총을 쏴도 안 맞는 경우가 있습니다.

피격 판정에 대해 알아봅시다. "피격 없음", 또는 발사한 총의 피격 판정이 없다는 것은 적을 제대로 쐈다고 생각하지만, 서버는 동의하지 않았다는 뜻입니다. 여러분의 관점으로 볼 때, 튀는 피와 타격음으로 피격 판정이 있었다고 확신하지만, 실제로는 대미지가 적용되지 않습니다. Apex 레전드 같은 슈팅 게임에서는 매우 불쾌한 상황일 것입니다.

이런 상황은 여러 가지 이유로 일어날 수 있습니다. 긴 지연 시간이나 패킷 손실 때문에 서버와 컴퓨터가 약간 비동기화되는 경우가 간혹 생깁니다. 누군가를 본 곳으로 총을 쏘았지만, 실제로는 적이 지나간 곳에 쏘는 것이죠. 안타깝게도 이러한 문제는 플레이어의 세계가 바로잡히기 전까지는 알 수 없습니다.

게임의 물리 시뮬레이션에 버그가 발생하는 경우도 있습니다. 저희는 물리 피드백을 즉각 제공하기 위해 예측이라는 개념에 크게 의존합니다. 저희는 이미 무기의 탄도 수준을 알기 때문에, 서버에 계산을 시키지 않아도 총알이 어디에 적중하는지 예측할 수 있습니다. 이러한 예측으로 플레이어는 게임이 더욱더 빠릿빠릿하게 느껴집니다.

일반적으로 클라이언트와 서버가 이러한 계산에 동의하고 총알은 예측한 대로 적에게 적중합니다. 과거에는 탄도와 탄 궤적을 계산하는 데 일부 버그가 있었습니다(예를 들어 스나이퍼 라이플같이 총알 크기가 점이 아닌 모든 무기). 이런 종류의 버그는 쉽게 탐지할 수 없어, 플레이테스트에서 탄도를 시각화하는 코드로 사람들이 해당 문제를 바로 탐지하는 데 도움을 주었습니다. 안타깝게도 이러한 진단 코드는 라이브 게임에서 대역폭 문제의 이유로 구동하기 너무 무거워서 오직 내부 테스트에 의존해야만 합니다.

피격 없음이 발생할 때마다 저희는 히트 박스와 탄 궤적을 표시합니다(완전히 정확하지 않아 궤적이 조금 휠 수 있지만, 분석하기에는 충분합니다!). 이는 저희가 서버 로그를 살펴볼 때, 해당 사건이 어떻게 발생했다는 것을 알고 해결책을 찾는 데 시각적인 도움을 줍니다.

두 가지 방법으로 해결할 수 있습니다.

첫 번째는 피격 판정 문제로 이어지는 다양한 버그를 끊임없이 파고 들어가는 것입니다. 개발자들이 새로운 버그를 만드는 것을 방지하기 위한 자동 탐지 툴을 개발하고 있습니다. 저희의 지속적인 노력으로 개선해 나가겠습니다.

두 번째는 여러분과 협력하는 것입니다! 플레이어 여러분이 실제로 겪은 피격 판정 문제의 영상을 보내주시면 해결해야 할 버그가 있는지 확인하는 데 도움이 됩니다. 저희가 받은 영상이 간혹 피격 판정 문제가 아니라 실제로는 지연 시간 문제인 경우가 있습니다. 그러므로 피격 판정 문제를 신고하기 전에 성능 디스플레이를 확인해주시기 바랍니다. 하지만 위에서 말씀드렸다시피 과거에는 이런 방식으로 버그를 발견하고 해결하였습니다. 신고가 모두에게 더 나은 게임을 만드는 데 도움이 될 수 있습니다. 감사합니다!

 

로그인이 불가능한 "code:net" 같은 버그는 어떻게 합니까?

"Code:net"은 서버에서 타임아웃될 때 게임에 나타나는 일반적인 오류 메시지입니다. 이는 저희와 플레이어 양쪽 모두에 의해 발생할 수 있습니다. 사실 가장 심각한 code:net 버그의(그리고 code:leaf 등 관련된 버그) 대부분은 조사가 필요한 Respawn의 게임 지원 서비스의 문제와 가깝다는 걸 확인했습니다.

저희는 code:net 버그가 발생할 확률을 줄이기 위해 몇 가지 조치를 하고 있으며, 많은 플레이어가 지원팀에 연락한 후에 문제를 해결할 수 있습니다. 로그인할 수 없거나, code:net 메시지나 비슷한 메시지를 받는 경우 EA 도움말 사이트에서 신고해주시기 바랍니다.

Code:net은 일반적인 메시지이기 때문에 여러 가지 문제로 인해 발생합니다. 최근 몇 주간 이 문제들을 해결하는 데 성공을 거뒀지만, 아직 문제가 더 남아있습니다. 문제를 저희에게 신고하면 저희가 최선을 다해 즉시 해결하도록 하겠습니다. 여러분께서 불편하신 만큼 저희도 빠르게 해결하기 위해 노력하겠습니다.

서버 틱레이트 관련

아주 중요한 주제입니다. 저희는 이 내용을 투명하게 접근하고자 합니다. 많은 플레이어 여러분이 서버 틱레이트에 관해 질문해주셨고, 왜 다른 온라인 슈팅 게임처럼 틱레이트를 20Hz 이상으로 올리지 않는지 질문해주셨습니다.

이전에 틱레이트가 화면에 보이는 모습을 새로 고치는 주기에 영향을 준다고 설명했으므로, 충분히 받을 수 있는 질문입니다. 하지만 단순히 다른 게임의 틱레이트와 비교하는 것보다는 더 복잡한 일입니다. 그 이유를 설명해 드리겠습니다.

서버의 틱레이트는 서버가 초당 실행하는 시뮬레이션의 수를 말합니다. 이는 고정된 숫자입니다(슬로우 모션 섹션 참조). Apex는 스냅샷 기반 모델을 사용합니다. 즉, 매 틱의 마지막에 서버가 세계 상태를 저장하고 모든 클라이언트에게 복제합니다. 세계 상태에는 무기, 맵, 그리고 레전드의 디자인을 최고 품질로 유지하기 위한 많은 정보가 포함되어 있습니다.

Apex 레전드에서 승리하기 위해서는 맵 전체에 발생하는 정보를 놓치지 말아야 합니다. 사용되는 전술 능력, 활성화되는 패시브, 발동하는 얼티밋 스킬, 떨어지는 케어 패키지, 크립토의 드론 안에 들어오는 새로운 분대 등 정보는 아주 다양합니다. 저희는 플레이어가 이를 놓치게 하고 싶지 않습니다. 저희 게임 디자이너 또한 맵 전체에 적용되는 스킬과 시스템을 만들 수 있어야 합니다. 많은 게임이 매 틱마다 모든 세계 정보를 계산하지는 않습니다. 즉, 단순 수치인 "20Hz"와 "30Hz"를 두고 다른 게임과 비교하는 것은 무리가 있습니다.

그렇다면 매 틱에 정확히 무슨 일이 일어날까요? 저희는 세계 상태를 최대한 정확하게 하고 싶으므로, 서버가 매 틱에 전체 세계 상태를 저장합니다. 이 작업을 하지 않으면 서버의 CPU 부하를 줄일 수 있지만, 시뮬레이션의 정확도를 잃게 되므로 피해야 합니다.

간단히 말하면 틱레이트가 높을수록 모든 플레이어에게 주어지는 대역폭은 증가합니다. 만약 20Hz 서버에서 60Hz 서버로 변경되었다면 게임에 필요한 대역폭은 3배로 증가합니다. 현재 Apex 레전드의 경우, 게임 시작 시 대략 60kB/s가 소모됩니다. 60Hz 서버라면 180kB/s를 소모합니다. 작아 보이지만 실제로는 아주 큰 수치입니다. 그리고 저희는 필요한 대역폭을 줄일 방법을 꾸준히 모색하고 있습니다.

대역폭이 높아지는 것을 왜 신경 써야 할까요? 게임의 대역폭 요구량을 줄이는 것은 비디오 스트리밍 등의 다른 프로그램보다 훨씬 더 중요한 사안입니다. 높은 대역폭의 응용 프로그램(스트리밍, 다운로드 등)의 경우, 스트리밍의 몇 분을 미리 버퍼링하거나 스트리밍 품질을 낮추는 등 지터나 히치의 기술적 문제를 숨길 수 있습니다. 다운로드의 경우 지터링이 발생하더라도 아주 조금, 몇백 밀리 세컨드 정도의 차이를 보여 신경 쓰지 않게 됩니다.

게임은 이런 사치를 누릴 수 없습니다. 몇 50ms 주기만 건너뛰면 아주 불쾌한 경험이 됩니다. 주기를 더 건너뛰면 점점 더 큰 데이터를 보내서 따라잡아야 하므로 치명적인 악순환에 걸립니다. 이러한 경우가 발생하면 예외란 없습니다. 데이터를 받는 클라이언트의 세계가 정확하게 표현되려면 받는 세계의 상태가 완벽해야 하기 때문입니다.

위의 예시를 보면 각 틱에 포함된 정보가 다양하므로 게임 간에 틱레이트를 비교하는 것이 복잡하다는 것을 알 수 있습니다. 더 복잡하게 만드는 것이 있습니다. 틱레이트가 같더라도 서버가 수신하고 전송할 수 있는 입력의 한도가 항상 동일하지는 않습니다. 구체적으로 말하면, 대부분의 게임에서 만약 60Hz로 서버가 구동된다면 클라이언트는 오직 60Hz의 입력만 보낼 수 있다는 뜻입니다. 게임을 60fps로 구동하고 있다면 괜찮지만, 클라이언트가 120fps로 게임을 구동한다면 입력의 절반이 손실됩니다. Apex 레전드에는 이런 것이 발생하지 않습니다. 저희는 입력에 가변율이 존재하더라도 잘 처리합니다. (참고로 Apex에서는 플레이어의 초당 프레임이 높을수록 플레이어의 네트워크 대역폭 사용량도 증가합니다.)

자, 지금까지 서버의 틱레이트를 증가시키는 문제의 단점을 몇 가지 논의했습니다. 하지만 예를 들어 20Hz에서 60Hz까지 올리게 될 때 얻는 장점은 무엇이 있을까요? 아, Respawn! 그렇다면 서버가 3배 빨라지고 3배 좋아지지 않을까요? 그렇게 하세요!

저희의 확인 결과 틱레이트를 올리더라도 그다지 의미 있는 차이는 없었습니다. 이를 설명해 드리고자 합니다.

이 주장을 설명하기 위해 플레이어가 50ms의 핑, 또는 지연 시간을 겪고 있다고 가정해봅시다. 이전에 설명해 드렸듯이, 플레이어의 핑은 컴퓨터에서 서버까지 왕복하는 데 걸리는 모든 시간입니다. 따라서 지연 시간이나 하드웨어 지연(예: 디스플레이 기기가 20~50ms 지연)과 같은 다른 문제가 없다면 버튼을 누르거나 마우스를 클릭한 후 25ms면 서버가 그 입력을 받습니다.

저희 서버가 20Hz이기 때문에, 세계 상태를 50ms마다 업데이트합니다(초당 1,000ms / 초당 20틱 = 틱당 50ms). 최악의 시나리오에서는 주어진 입력이 75ms(25ms + 50ms) 후에 서버에서 처리됩니다.

75ms 지연이 실제로 어떤 의미가 있는지 확인하기 위해선 프레임레이트를 생각해야 합니다. 여기에 있는 산수가 까다로울 수 있지만, 60 fps 게임에서 각 프레임에 약 16.67ms(초당 1,000ms / 초당 60프레임 = 프레임당 16.67ms)를 사용한다는 걸 기억해주시기 바랍니다. 위의 예시와 같이, 75ms 후에 서버에서 입력을 처리하고 있으며 게임이 60 fps로 실행되는 경우, 즉, 입력과 게임에 미치는 영향 사이의 지연 시간은 대략 5 프레임(업데이트당 75ms / 프레임당 16.67ms = 약 4.5 프레임, 하프 프레임은 존재하지 않으므로 5 프레임으로 올림)이 됩니다.

위의 모든 계산을 60Hz 서버에 적용한다면, 입력과 서버 처리 사이의 최대 지연 시간은 41.67ms입니다(25ms 핑 + [1,000ms / 초당 60틱 = 틱당 16.67ms] = 41.67ms).

41.67ms는 75ms보다 확실히 낫지만, 프레임레이트를 거쳐도 큰 이득을 얻을 수 있을까요? 다시 한번 게임이 60 fps로 실행된다고 가정하겠습니다. 각 프레임은 16.67ms가 사용되어 입력과 인식하는 서버의 지연 시간은 약 3프레임에 달합니다.(업데이트당 41.67ms / 프레임당 16.67ms = 프레임당 약 2.5ms, 하프 프레임은 존재하지 않으므로 3 프레임으로 올림).

이 모든 산수를 종합하면 결과적으로 20Hz 서버는 약 5 프레임 지연, 60Hz 서버는 3 프레임 지연을 보입니다. 그러므로 대역폭과 CPU 사용량이 3배 증가하지만, 얻을 수 있는 건 최고의 시나리오 기준으로 오직 2 프레임의 지연 시간 감소뿐입니다. 장점이 있지만 크지는 않습니다. 또한 일반적인 지연 문제(엄폐물에서 총을 맞는 등), ISP 수준 문제, 버그(피격 판정, 슬로우 모션 서버 등)를 해결해주지는 못합니다.

지금까지 20Hz에서 60Hz로 상승하는 것의 장점의 예를 들었습니다. 20Hz에서 30Hz, 심지어 40Hz까지 같은 다른 수치에 대해 계산을 하더라도 얻을 수 있는 프레임레이트는 비슷한 것을 알 수 있을 겁니다. 정말로 차이를 느끼려면 틱레이트를 대폭 상승해야 합니다. 20Hz에서 60Hz로 뛰더라도 58 FPS와 60 FPS의 차이처럼 미세하게 느껴집니다. 이러한 차이가 아예 쓸모없다는 뜻이 아닙니다. 다른 효율적인 개선 사항보다 틱레이트 상향을 중요시할 가치가 충분하지 않다는 것입니다.

마무리하며

저희는 플레이어 여러분이 겪는 온라인 문제는 매우 심각하며, 큰 불편이라는 것을 통감하고 있습니다. 지연 또는 피격 판정 문제, 슬로우 모션 서버를 겪으면 아주 기분이 나쁩니다. 게임의 몰입감이 사라지고, 랭크를 올릴 때나 친구와 클러치 플레이를 할 때, 저녁에 스트레스를 풀고 싶을 때 의지가 크게 꺾이는 요소입니다.

온라인 문제를 이야기할 때 가장 어려운 점은, 시스템이나 지연 보정 및 틱레이트에 대한 문제에 저희의 입장을 설명할 때, 그저 더 나은 게임을 즐기려는 플레이어분들의 마음을 상하게 한다는 것입니다. Apex 레전드 플레이 중 지연 시간, 서버 충돌 버그, 계정 손상이나 기타 문제를 마주쳤다면, 저희가 해결할 수 없는 문제에 더 좌절하게 될 것 같습니다.

끝으로 말씀드리자면, 저희는 더 나은 게임을 만들고 싶습니다. 더 좋은 온라인 경험이 될수록 더 많은 분께서 저희 게임을 플레이할 것이고, 그러면 저희가 사랑하는 이 일을 계속할 수 있기 때문입니다.

이런 이유로 이 블로그 글을 통해 가까운 시일 내로 추구하는 다양한 개선 사항을 여러분께 공유했습니다:

  • 문제를 식별하고 더 빨리 대응할 수 있는 실시간 알림 사용
  • 문제가 있는 서버를 빠르게 제거하고 교체할 수 있도록 서버를 식별하는 툴 적용
  • 슬로우 모션 서버 해결 집중, 문제가 있는 서버를 제거하는 것에서 나아가 코드 변경 시 문제가 발생하는 것을 최소화하는 것이 목적
  • 새로운 기능들을 더 최적화하여 지연 시간 감소
  • 피격 판정 버그, 자동화된 탐지 툴을 구축하여 버그 발생을 최소화

저희가 하는 일은 이뿐만이 아니라는 것을 알아주셨으면 합니다. 저희는 서버 수준에서 ISP 수준까지 협력사와 소통하여 온라인 인프라를 개선하고 투자하고 있으며, 궁극적으로 플레이어가 신고할 문제가 적어지고 전체적으로 더 좋은 플레이 경험을 제공하는 것이 목표입니다. 향후 이러한 노력이 결실을 볼 때, 다시 게시글로 다룰 예정입니다

저희가 우려하는 문제에 대해 더 많이 소통하기 시작하면, 처리하고 있는 문제의 근본 원인에 대해 서로가 더 이해할 수 있는 기회가 생기리라 믿습니다. 그렇기 때문에 이 블로그 글을 쓰게 되었습니다. 이 글을 통해 온라인 슈팅 게임의 운영의 기술적인 측면에서 저희의 생각을 알고, 궁금증도 해소되었길 바랍니다. 계속해서 더 많은 이야기를 나누도록 하겠습니다.

긴 글을 읽어주셔서 감사합니다!

- Samy(Ricklesauceur) & Apex 레전드 팀


PlayStation 4, PlayStation 5, Xbox One, Xbox Series X|S, Nintendo Switch, PC Origin, Steam에서 Apex 레전드를 무료로 플레이하세요*.

TwitterInstagram에서 Apex 레전드를 팔로우하고, YouTube 채널을 구독하고, 포럼을 확인해 보세요.

뉴스레터를 구독하면 최신 Apex레전드 소식, 업데이트, 비하인드 콘텐츠, 특별 혜택 등을 비롯해 다른 EA 뉴스, 상품, 이벤트, 프로모션 정보를 이메일로 받아볼 수 있습니다.

해당 공지는 커뮤니티 피드백에 따라 변경될 수 있으며 라이브 서비스와 콘텐츠는 지속적으로 개선하고 진화할 것입니다. 저희는 언제나 커뮤니티의 의견을 듣도록 노력할 것입니다. EA의 온라인 서비스 업데이트에 관한 자세한 내용은 https://www.ea.com/ko-kr/service-updates를 참고하세요.

*해당 플랫폼의 계정과 플랫폼 구독(별매)이 필요할 수 있습니다. 안정적인 인터넷 연결과 EA 계정이 필요합니다. 연령 제한이 적용됩니다. 게임 내 구매 상품이 포함되어 있습니다.

관련 뉴스

더블 테이크 컬렉션 이벤트 더블 다운

Apex Legends
2024. 6. 20
미드 시즌 패치를 통해 쿼드로 분대를 조직하고, 라이프라인의 "Apex 오류 인자"를 획득하고, 1.5배가 적용된 프레스티지 챌린지로 레벨 업을 하는 등 다양한 보상을 받으세요.

Apex 레전드™: 커뮤니티 제작 여름 스티커

Apex Legends
2024. 6. 11
레전드 여러분, 기대해주세요! 오늘부터 커뮤니티에서 제작한 새로운 스티커 팩을 구매할 수 있습니다.

4년 차 스플릿 2 프로 리그: 여러분이 알아야 할 모든 것

Apex Legends
2024. 5. 29
스플릿 1 플레이오프에서 더 높이 올라가고 싶으신가요? 6월 1일부터 스플릿 2 프로 리그와 함께 열기를 이어가세요.