Published on

[Network Gaming 1] 락스텝의 공포: 물리 동기화라는 허상과 멀티플레이어의 잔혹사

Authors
  • Name
    Logan Kim
    Twitter

내 나이(85년생)쯤 된 사람이라면 대부분 스타크래프트를 민속놀이 취급한다. 스타크래프트가 탄생한 나라는 미국이지만, 예전에 아는 미국인들이 스타 좀 한다고 하길래 일꾼 두 마리 빼주고 능욕하면서 가지고 논 기억이 있다. 그래봐야 난 공방 최약체였다. 스타 실력을 말하려는 건 아니고, 대한민국의 민속놀이 스타크래프트를 보면 네트워크 게이밍의 발전 양상을 확인할 수 있다.

스타크래프트를 플레이하던 사람들은 게임 좀 하다가 상대방이 불리하면 '디스(Disconnect)' 걸고 튀는 걸 여러 번 봤을 것이다. 이게 사실 네트워크 플레이의 좌절 중 하나다. 흔히 **락스텝(Lockstep)**이라고 불리는 기법의 한계다.

1. 락스텝(Lockstep)이 뭐지?

스타크래프트가 출시되던 1998년도. 당시에는 인터넷을 전용회선으로 쓰는 것 자체가 진귀한 일이었다. 대한민국은 인터넷의 발달과 스타크래프트가 같이 발달했는데, 하나로통신이나 두루넷 같은 케이블 기반 전용회선이 막 보급되던 시절이었다. 당시에 네트워크는 끽해야 56kbps 전화 모뎀 수준이었는데, 케이블 전용회선이 나오니 인터넷은 늘 연결되어 있고 엄마한테 1분당 30원씩 올라오는 전화요금 때문에 처맞을 일이 없게 된 것이다. 물론 다 경험담이다.

그런데 왜 이것과 락스텝이 연관되냐면, 그만큼 당시에는 네트워크 실시간 통신에 대한 노하우와 인프라가 전혀 없던 시절이었기 때문이다. 이건 당시 외계인급 개발 능력을 가졌던 블리자드도 마찬가지였다. 스타크래프트를 개발하며 네트워크 플레이를 구현하고 싶었던 이들은 아주 이상적인 생각을 했다.

"모든 클라이언트가 동일한 입력(Input)만을 주고받고, 각자의 기기에서 동일한 시뮬레이션을 돌려 결과를 맞추자."

56kbps의 느려터진 전화 모뎀(참고로 이 속도는 스마트폰 데이터 다 썼을 때 주는 3Mbps보다 약 53배 느리다)으로 트래픽을 아끼기엔 가장 이상적으로 보였다.

그런데 이게 지금 상식으로 얼마나 말도 안 되는 일인가. 광랜, 5G 같은 초고속 인터넷이 천지빼까리로 깔린 현재도 인터넷의 끊김 현상은 매우 흔하다. 하물며 전화 모뎀 통신은 중간에 엄마가 수화기만 들어도 신호가 꼬여서 셧다운된다. 이런 불안정한 환경에서 이렇게 이상적인 방법론을 적용했으니 잘 될 리가 없다.

동기화를 하고 있는 모든 유저의 네트워크가 이상적으로 딱딱 맞물려 동작해야 제대로 실행되기 때문에, 한 명만 핑이 튀거나 연결이 불안정해지면 모두의 화면이 멈춘다. 이게 바로 스타크래프트에서 빡친다고 디스 걸고 나간다는 그 화면(Waiting for player...)이다. 끔찍하게도 그 현상은 리마스터 버전이 나온 2026년 현재에도 재현되고 있다. 리마스터는 껍데기 그래픽만 세련되게 갈아엎었을 뿐, 밑바닥 시스템은 똑같기 때문이다.

2. 2D라서 다행이다: 부동소수점의 저주

스타크래프트 1이 그나마 락스텝으로 돌아갈 수 있었던 이유는 이 게임이 2D 타일 기반의 고정 소수점(Fixed-point) 연산을 썼기 때문이다.

정수 연산 기반이라면 클라이언트끼리 연산 결과가 어긋날 일이 없다. 하지만 시대가 흘러 게임이 3D로 넘어가고, 수치 계산에 **'부동소수점(Floating-point)'**이 도입되면서 락스텝은 더 이상 존재해서는 안 되는 기술이 되었다. 게임상의 3D 부동소수점 좌표는 55.1 같은 한 자리 수준이 아니라 소수점 아래 10자리 이상 내려간다.

그런데 그걸 같이 게임을 플레이하는 모든 플레이어가 완벽하게 동일한 싱크로 시뮬레이션 하는 건 불가능하다고 봐야 한다. CPU 제조사들은 x86라는 스펙만 맞출 뿐, 똑같은 수식을 계산해도 인텔(Intel) CPU와 AMD CPU가 내놓는 소수점 끝자리 결과가 다르다. 심지어 컴파일러 최적화 옵션이나, 프레임 레이트(FPS)의 미세한 차이에 의해서도 결과값이 미세하게 틀어진다. 결국 락스텝은 각자의 컴퓨터에서 서로 다른 결과가 벌어지는 **평행우주(Desync)**를 만들어낸다.

3. 물리 엔진(Physics)이라는 폭탄

여기에 유니티나 언리얼 같은 현대 3D 엔진의 '물리 엔진(PhysX 등)'이 끼어들면 상황은 미쳐 날뛰게 된다. 많이 언급하면 TMI가 되지만, 물리 엔진은 본질적으로 **비결정론적(Non-Deterministic)**이다.

쉽게 말해 가챠 같은 것이다. 상자 100개를 까도 SSR이 나온다는 보장이 없듯, 똑같은 공을 똑같은 힘으로 던져도 내 컴퓨터에서는 바위를 맞고 왼쪽으로 튀고 상대 컴퓨터에서는 오른쪽으로 튄다. 클라이언트마다 결과가 다르게 나오는 3D 환경에서 **"입력만 맞추면 결과는 알아서 똑같이 나오겠지"**라는 락스텝의 순진한 사상은 더 이상 작동할 수 없었다.

###4. 민주주의의 실패와 독재자(Dedicated Server)의 강림 결국 클라이언트들의 연산 결과를 도저히 믿을 수 없게 된 시대가 왔다. 클라이언트들끼리 "내 캐릭터가 살아있다", "아니다 죽었다"라고 싸우는 꼴을 볼 수 없게 된 시스템 아키텍트들은 결국 특단의 조치를 내리게 된다.

"니들끼리 합의(락스텝)하지 마. 니들 클라이언트 연산은 전부 가짜(Fake)야."

모든 판결을 독점하는 단 하나의 절대적 진실(Single Source of Truth), 즉 **'데디케이티드 서버(Dedicated Server)'**라는 독재자를 세운 것이다. 이제 유저는 입력을 서버로 바치고, 서버가 연산한 물리와 좌표의 '결과'만을 맹목적으로 수신해야 하는 시대로 접어들었다.

그리고 이러한 중앙 통제형 아키텍처의 확립은, 수천 명이 하나의 세계에 모이는 MMORPG라는 장르가 탄생하게 된 근본적인 배경이 되었다.