게임 보안: 랙에 관한 모든 것
by 신영진(YoungJin Shin), codewiz at gmail.com, @codemaru, http://www.jiniya.net
#0
잘나가는 게임에서 가장 민감한 이슈를 하나 꼽으라면 랙이다. 모든 게이머들이 가장 싫어하는 단어 중에 하나고, PC를 업그레이드하는 가장 큰 이유 중에 하나가 랙이다. 그렇다면 도대체 그 랙(lag)이란 무엇일까? 랙이란 단어 의미 그대로 지연을 나타낸다. 게임상에서 발생하는 그 모든 지연에 대해서 우리는 랙이라고 이야기한다.
요즘 가장 핫한 게임을 꼽으라면 단연 디아3를 빼놓을 수 없다. 처음 아시아섭이 혼잡해서 접속이 원활하지 않아서 북미섭에서 노멀을 클리어하면서 난 블리자드 장인 정신의 정수 그 자체를 맛보았다. 엔딩을 보고는 이제껏 단 한 차례도 보지 않았던 크레딧을 무려 5분이 넘게 봤다. 그 정도로 감동적인 게임이었고, 그 정도로 누가 만들었는지 궁금했다. 웃긴건 엔딩 크레딧을 5분 넘게 봤는데 안 끝나서 닫았다. 우리 회사의 한 직원은 15분을 봤는데도 끝나지 않아서 닫았다고 한다. 참고로 모든 엔딩 크레딧을 보는데는 대략 18분 정도가 소요된다. 역시 크레딧도 블리자드 스케일 ㅋㅋㅋ~
랙으로 이런 화면을 접하게 된다면 모든 게이머는 뚜껑이 열리는 기분을 느낀다.
그런 초대작 게임도 랙 이슈는 피해가지 못했다. 디아3는 사실 랙도 블리자드 스케일이다. 주로 서버 랙이라고 불리는 것들인데 이런 상황을 말한다. 내가 기술을 사용하고 2초 정도 있다가 실제로 기술이 발동된다거나, 내가 피통을 보고 적절한 시점에 힐링포션을 먹었음에도 랙 때문에 죽는다던가, 골드 위를 지나가고 2초 있다가 골드가 먹어진다거나 하는 상황을 말한다. 물론 그렇다고 클라이언트 랙이 전혀 없는 것도 아니다. 사양이 충분히 좋지 않은 환경에서는 몹이 대량으로 갑자기 출몰하는 지역이라던가 물리적인 시츄에이션이 겹치는 상황에서는 게임 화면이 프리징되는 경우도 종종있다. 경매장 랙은 말할 필요도 없겠다. 이런 랙은 정말 게임의 재미를 천만분의 일로 반감시키는 효과가 있다. 실제로 집에서 디아를 하다가 이런 연유로 챔피언 몹에게 한 세 번 눕고 나니 할맛이 나질 않아서 이 글을 쓰고 있기도 하다. ㅋㅋㅋ~
#1
이쯤이면 랙이 뭔지는 충분이 이해했을 것 같다. 그렇다면 다음으로 이런 랙의 원인에 대해서 알아보도록 하자. 도대체 이런 빌어먹을 랙은 어디에서 오는 것일까? 도대체!!!
가장 흔한 원인은 말 그대로 네트워크 지연 때문이다. 온라인 게임은 대부분 네트웍을 전제로 게임이 진행된다. 응당 서버/클라이언트가 있게 되고 이 사이에 통신 속도가 존재한다. 게이머들은 흔히 이를두고 핑(ping)이라 표현한다. 이 핑이 일정 수준 이상으로 높으면 지연이 발생하고 있다는 것을 직접적으로 말해준다. 지연 속도가 특정 수치 이상이 되면 불일치가 발생한다. 게임 클라이언트에서는 공격 모션이 나왔음에도 실제로 공격 대상에는 피해 수치가 적용되지 않는것과 같은 상황이 발생하는 것이다. 이게 점점 심해지면 어느 순간 자신도 모르게 멀미가 나오는 것을 느낄 수 있다.
이런 온라인 게임의 네트워크 품질은 비단 자신의 인터넷 회선에만 영향을 받는 것은 아니다. P2P 방식으로 게이머들끼리 네트웍을 형성해서 진행되는 게임의 경우에는 다른 게이머의 네트워크 회선 속도에 자신도 같이 영향을 받는다. 빛의 속도에 근접하면 전혀 다른 세상이 펼쳐지는 것처럼, 핑이 일정 수준 이상으로 높아지면 개발자들이 전혀 예측하지 못했던 새로운 문제들이 발생하기도 한다. 이런 버그들을 악용해서 일부 게이머들은 랜선을 뽑았다 다시 연결하는 태핑이나 특정 패킷을 특정 주소로 무한대로 전송하는 누킹, 자신의 PC에 랙을 의도적으로 유발시키는 랙핵과 같은 방법을 사용해서 추가적인 이득을 얻기도 한다.
랙의 또 다른 요인은 게임 서버에 존재한다. 최근 온라인 게임의 추세는 클라이언트는 뷰어 역할만 하고 게임 서버에서 모든 게임 상태를 모델링하는 방식으로 진화하고 있다. 왜일까? 당연히 해킹을 막기 위함이다. 디아3에서 간단한 조작으로 화면에 표시되는 골드 값을 변경할 수 있을지 몰라도 실제 그 표시되는 데이터로 경매장을 이용할 순 없는 것과 동일한 이치다. 실제 데이터는 서버에 모두 저장돼 있고 그 값을 토대로 계산이 진행되기 때문이다. 이렇게 서버가 복잡해지다보니 서버의 상태 이상이 고스란히 랙으로 전달된다. 내가 속해 있는 게임 서버의 상태 이상으로 모델링 처리 속도가 지연되면 그 모든 영향을 내가 그대로 받는다는 말이다. 최근에 블리자드는 디아3에서 짧은 간격으로 방을 자주 생성하는 것을 막겠다고 공지를 했다. 방을 자주 생성하면 서버에 상태 이상이 발생하게 되고 그게 해당 서버에 속한 다른 게이머들에게 피해를 주기 때문에 그같은 조치를 취했다고 생각할 수 있다. 이런 점들을 본다면 이런 종류의 랙에 대해서 게이머가 할 수 있는 것은 하나도 없다. 그저 손가락 빨면서 게임 개발사에서 서버를 안정화 시키기를 기다리는 수 밖에는 없다. 디아3 랙이 지금 답이 없는 상태와 같은 이치다.
랙을 유발하는 마지막 이유는 모든 게이머가 잘 알고 있듯이 컴퓨터 사양에 있다. 컴퓨터 사양이 해당 게임을 구동할 수 있을 정도로 충분히 빠르지 않다면 필연적으로 심각한 랙이 발생한다. 이 경우에는 당연히 업그레이드 말고는 답이 없다. 물론 게임의 그래픽 옵션 사양을 낮추고, 해상도를 낮추는 방법을 통해서 어느 정도의 가용성을 확보할 수 있기도 하지만 실질적으로 쾌적한 게임을 즐기기 위해서는 컴퓨터 업그레이드가 유일한 답이다.
#2
그렇다면 이렇게 게임의 재미를 반감시키고, 유저들의 원성을 사며, 동접을 저하시키고, 게임의 수익 창출을 방해하는 랙을 게임사는 도대체 왜 방치하는 것일까? 왜? 모든 게임마다 모든 게이머들은 랙 때문에 불평 불만을 하는 것일까? 원인이 명확하면 그냥 고치면 되는거 아닐까? 하지만 이 문제를 해결하는 일은 생각처럼 쉽진 않다.
일단 회선 문제. 여기에 대해서 게임사에서 해줄 수 있는 것은 아무것도 없다. 우리 나라의 경우 회선이 아주 좋은 상태지만 해외의 경우에 그렇지 않은 경우도 많다. 정말 희한한 곳들이 많이 있다. 업로드/다운로드 트래픽이 제한된 곳, 인터넷인데 인터넷이 아니라 인트라넷인 경우, 심지어는 업데이트 패치를 제대로 받지 못해 수동패치를 제공해야 하는 경우도 적지 않다. 뭐 국내라고 마냥 좋은 것만은 아니다. 공유기에 공유기에 공유기에 공유기를 쓰는 환경이라던가. 회선 자체가 불량인 경우라던가. 악성 코드에 감염되서 핑이 불안한 경우라던가. 각종 시츄에이션이 다 있다. 하지만 게이머들은 충분한 기술적인 지식이 없기 때문에 자신의 이러한 인터넷 상태에 대해서 잘 알지 못한다. 그저 게임이 되지 않는다고, 핑이 튄다는 이야기를 한다.
다음으로 서버 랙. 이 경우는 게임 개발사에서 해결을 해야 하는 문제다. 또한 어느 정도 분명한 원인을 가지고 있는 문제이기도 하다. 하지만 이것 또한 정말 쉽지 않다. 왜냐하면 99.98%의 서버랙 이슈는 사용자가 미치도록 몰리고, 게이머가 개발자가 전혀 예측하지 않은 형태로 플레이를 하면서 발생하기 때문이다. 라이브 환경에서만 문제가 발생하기 때문에 해결이 쉽지 않다는 말이다. 더욱이 요즘 게임 서버는 단순히 게임 서버 하나만이 아니라 우리가 상상할 수 없을 정도로 복잡한 구조로 다양한 서버들이 엮여 있기 때문에 랙이 발생해도 도대체 어떤 부분에서 무엇 때문에 지연이 되는지 찾는 일이 백사장에서 바늘 찾기만큼이나 어렵다. 이 문제를 안드로메다로 데려가는 마지막 이유는 게임이 일단 상용화에 들어가고 나면 게임 개발자가 멋대로 변경할 수 있는 것들이 극도로 제한된다는 점이다. 즉, 거의 대부분의 경우에 크리티컬한 이슈가 아니라면 서버 개발자는 이러지도 저러지도 못하는 상황에 처할 수 밖에 없다. 그래서 CBT를 하고 OBT를 하는데, 안타깝게도 요즘에는 그 마저도 아주 짧게 가져가는 추세다. 그래서 이런 이슈가 더 많이 부각되기도 하는 것 같다.
끝으로 클라이언트 랙을 살펴보자. 이건 기본적으로 클라이언트 리소스가 크기가 정해지는 순간 개발자의 역량으로 할 수 있는 일은 상당히 제한된다. 요즘 게임은 워낙 규모가 크기도 하고, 그런 규모만큼이나 외부 라이브러리를 많이 사용하기 때문이다. 개발자의 열정으로 최적화를 시키던 시대는 쫌 지났다는 말이다. 사실 클라이언트 랙으로 사용자들이 욕을 하는 이유는 다른 곳에 있다. 바로 최소 사양과 권장 사양이다. 대부분의 게임사에서 권장 사양을 최소 사양으로 공지하는 경우가 많다. 그렇다보니 게이머들은 진짜 그게 권장 사양인줄 알고 자기 PC는 권장 사양보다 좋은데 랙이 발생한다고 징징되는 것이다. 사실 거의 대부분의 경우에 권장 사양은 실질적인 의미의 최소 사양이라고 생각하는 편이 정신 건강에 좋다.
디아블로3 권장사양. 귀가 막히고 코가 막힌다.
우리집은 저거보다 훨씬 좋음에도 모든 옵션을 최소로 해야 그나마 랙이 들하다.
클라이언트 랙의 또 다른 이유는 서드파티 제품에 있다. XIGNCODE와 같은 외부 보안 제품도 그런 것들 중에 하나다. 이런 랙 이슈가 게임보안 제품 개발을 어렵게 만드는 이유 중에 하나이기도 하다. 어쨌든 이런 외부 보안 제품도 구동 비용이 0은 아니기 때문에 랙에 영향을 주고 사양에 따라서 미치는 영향이 훨씬 더 커지기도 한다. 안타깝지만 여기에 대해서도 게임 클라이언트 개발자가 해줄 수 있는 일은 사실상 없다. 서드파티 제품 개발자가 할 수 있는 부분이기 때문이다.
게임 게시판을 모니터링 하다보면 많은 사용자들이 발적화를 운운하며 게임 개발자의 역량을 평가하는 글을 올리는 것을 볼 수 있다. 안타까운 마음에 여기에 몇 글자 덧붙이자면 대부분의 개발자는 거의 비슷한 성능의 코드를 작성한다. 적당히 뛰어난 개발자 A와 그저 그런 개발자 B가 작성한 코드에서 성능 차이는 사실 크지 않다는 말이다. 대부분의 드라마틱한 성능 개선은 개발자의 피땀어린 코딩보다는 문제를 바라보는 시각을 고치는 경우에 만들어진다. 또 그런 문제를 바라보는 시각을 고치는 일은 보통 프로그래머보다는 전산학자들이 하는 일이기도 하다. 그러니 발적화 운운하면서 너무 개발자를 욕하지 말자. 그들은 항상 최선을 다해서 자신이 아는 범위 안에서 가장 빠른 코드를 작성하는 사람들이다.
#3
지금까지 주구장창 어렵다는 이야기만 했는데 사실상 이 문제를 힉스 입자를 발견하는 것과 동급으로 만드는 본질적인 이유는 다른 곳에 있다. 바로 게임 개발자, 운영자, QA, 서드파티 제품 개발자, 운영자, QA 모두 랙을 모른다는 것이다. 거의 대부분의 경우에 그 모든 사람들은 게이머가 말하는 랙을 전혀 이해도 하지 못한다. 왜 그럴까? 서로 체감하는 시간의 기준이 다르기 때문이다. 게이머들은 우리가 상상하는 것보다 훨씬 더 민감하다는 말이다.
예전에 블리자드의 스타크래프트 개발자가 한국에 와서는 임요환 선수가 마린으로 럴커 잡는 것을 보고는 저런 식으로 플레이를 할줄은 상상도 못했다는 이야기를 했다. 그도 그럴것이 럴커는 마린의 상성 유닛이었기 때문이다. 임요환 선수 정도되면 어떤 것을 느끼냐면 럴커의 촉수가 평소보다 빨리 다가오는지 늦게 다가오는지 스팀팩을 쓴 다음 활성화가 어느 정도에 되는지를 느낀다. 물론 직접 물어본 거는 아니니 이걸로 태클걸진 말도록 하자 ㅋㅋ~ 일반 게이머 중에서도 잘하는 게이머들은 이런 아주 마이크로한 부분에 대해서 굉장히 민감하게 반응한다. FPS 게임이라면 총기를 교환하는 속도, 탄환이 발사되는 속도, 줌 속도, MMO 게임에서는 특정 기술이 발동하는 모션의 속도, 자신이 설치한 구조물들이 활성화되는 속도 등등 전혀 게임을 잘하는 사람이 아니라면 알 수 없는 부분에 대해서 불평을 한다. 이게 어려운 점이다. 왜냐하면 게임을 그 정도로 잘하지 않고서는 백날 죽었다 깨어나도 그 속도의 차이를 알 수 없기 때문이다.
QA 팀에서 백날 랙 테스트를 해도 문제 없다고 하는 이유가 바로 여기 있다. QA 팀에는 실제 유저가 말하는 랙을 체감할 수 있을만큼 그 게임을 잘하는 플레이어가 없기 때문이다. QA 팀에서 봤을 때는 총기 교체 속도가 원래 만큼이나 충분히 빠르기 때문이다. 안타까운 현실이 아닐 수 없다. 이런 점들을 보완하기 위해서 우리같은 게임관련 서드파티 업체들은 항상 채용할 때 물어보곤 한다. 게임 잘 하세요? 좋아하는 온라인 게임 있으세요? 실제로 우리 회사에는 FPS 게임을 제법 잘하는 QA 직원이 한 명 있는데, 그 직원은 다른 직원보다 해당 분야의 게임에 대한 랙이나 핵을 찾는데 훨씬 더 뛰어난 역량을 보여준다. 실제로 게임사나 서드파티나 랙이란 문제에 대해서 진지한 접근을 하고 싶다면 랙을 이해할 수 있을만큼 뛰어난 게이머를 채용해야 한다. 그렇지 않고서는 백날 테스트 해봐야 도로아미타불이다.
#4
이 글을 쓰던 당시엔 블소가 출시하기 전이었다. 최근에 블소 OBT가 진행됐고, 얼마전에 유료화를 단행했다. 하지만 그런 초핫한 게임인 블소 조차도 랙 이슈는 피해가질 못했다. 게시판을 봐도 블소 하는 사람들 이야기를 들어보아도 랙 이야기는 떠나질 않는다. 어쩌면 랙은 성공한 게임에 따르는 승자의 저주 같은건지도 모르겠다. 일단 사람이 몰려야 발생하니 말이다.
캐릭터는 슈퍼 갑 블소~ 하앍~
Read more: http://www.jiniya.net/wp/archives/7303#ixzz3NCV816li
'대학 생활 > 게임 보안' 카테고리의 다른 글
메이플스토리 사례를 통해 살펴보는 서버사이드 봇/핵 탐지 시스템 (0) | 2016.05.29 |
---|---|
게임 엔진 소스 (0) | 2015.02.07 |
게임 보안: 허들 넘기… (0) | 2014.12.28 |
게임 보안: 커플링에 관한 오해들… (0) | 2014.12.28 |
끝나지 않은 전쟁: 논클라이언트 봇 (0) | 2014.12.28 |