접기/펼치기네트워크 구성의 기본
온라인 게임에서 네트워크는 플레이어와 게임 서버를 연결한다. 서버는 게임의 중심 역할을 한다. 플레이어가 "내 캐릭터를 오른쪽으로 움직여"라고 입력하면, 그 정보가 네트워크를 통해 서버로 간다. 서버는 그걸 받아서 게임 상태를 업데이트하고, 다른 플레이어들에게도 "이 사람 캐릭터가 오른쪽으로 갔어"라고 알려준다.
이제 네트워크 구성의 주요 요소를 알아보자.
클라이언트: 이건 플레이어가 사용하는 거다. 우리가 게임을 켜는 컴퓨터나 콘솔, 핸드폰이 클라이언트다. 클라이언트는 입력을 받아서 서버로 보내고, 서버에서 온 데이터를 화면에 띄운다.
서버: 게임의 두뇌라고 생각하면 된다. 서버는 모든 플레이어의 정보를 관리하고, 게임 규칙을 적용한다. 예를 들어, 누가 총을 쐈는데 맞았는지, 데미지는 얼마인지 계산한다.
인터넷: 클라이언트와 서버를 연결하는 다리다. 이게 느리거나 불안정하면 게임에서 렉이 걸린다. ping 수치가 높아지거나 패킷 손실이 생기면 플레이에 지장이 생긴다.
접기/펼치기온라인 게임에서 중요한 네트워크 개념
네트워크 구성에서 몇 가지 중요한 용어가 있다. 이걸 이해하면 왜 게임이 끊기거나 느려지는지 알 수 있다.
지연 시간(Latency): 데이터가 클라이언트에서 서버로 가는 데 걸리는 시간이다. 이게 길면 내가 버튼 누른 게 게임에 늦게 반영된다. 보통 ping으로 확인한다. ping이 20ms면 빠르고, 200ms면 느리다고 느낀다.
대역폭(Bandwidth): 한 번에 보낼 수 있는 데이터의 양이다. 대역폭이 좁으면 데이터가 밀려서 느려진다. 예를 들어, 4K 화질 스트리밍하면서 게임하면 대역폭이 부족할 수 있다.
패킷 손실(Packet Loss): 데이터가 중간에 사라지는 거다. 서버로 "내가 점프했어"라고 보냈는데 그게 안 가면, 게임에서 내가 제자리에 있는 것처럼 보인다.
접기/펼치기실제 게임에서 네트워크 구성은 어떻게 되나?
온라인 게임은 보통 두 가지 방식으로 네트워크를 구성한다.
클라이언트-서버 모델: 대부분 게임이 이걸 쓴다. 모든 플레이어가 중앙 서버에 접속한다. 서버가 모든 걸 관리하니까 공정하고 안정적이다. 단점은 서버가 터지거나 느려지면 게임 전체가 망가진다.
P2P(피어 투 피어): 플레이어끼리 직접 연결한다. 서버가 필요 없어서 비용이 적게 들지만, 누군가 연결이 불안정하면 전체 게임이 흔들린다. 옛날 게임이나 소규모 게임에서 많이 쓴다.
예를 들어, 리그 오브 레전드는 클라이언트-서버 모델을 쓴다. 라이엇이 운영하는 서버에 접속해서 플레이한다. 반면에 예전 피파 온라인 같은 게임은 P2P 방식을 썼던 적도 있다.
접기/펼치기CAP 이론
CAP 이론은 분산 시스템에서 중요한 개념인데, 온라인 게임도 여러 서버와 클라이언트가 얽힌 분산 시스템이니까 관련이 있다. CAP는 Consistency(일관성), Availability(가용성), Partition Tolerance(분할 용인) 세 가지를 뜻한다. 이론에 따르면 이 세 가지 중 두 가지만 완벽하게 만족할 수 있고, 하나는 포기해야 한다.
Consistency(일관성): 모든 클라이언트가 같은 데이터를 동시에 본다. 예를 들어, 내가 게임에서 적을 죽였으면 모든 플레이어가 그걸 즉시 알아야 한다. 데이터가 일관되지 않으면 누군가는 내가 죽인 적이 아직 살아있다고 볼 수도 있다.
Availability(가용성): 시스템이 항상 응답한다. 네트워크가 느려도, 서버가 일부 망가져도 게임이 멈추지 않고 돌아간다. 플레이어가 "렉 걸려도 게임은 하고 싶어"라는 상황을 충족한다.
Partition Tolerance(분할 용인): 네트워크가 끊겨도 시스템이 버틴다. 서버 간 연결이 잠깐 끊기거나 클라이언트가 서버와 연결이 안 돼도 전체가 붕괴하지 않는다.
CAP 이론의 핵심은 이 셋을 다 완벽히 갖출 수 없다는 거다. 온라인 게임에서 이걸 어떻게 적용하나 보자.
MMORPG(월드 오브 워크래프트 같은 게임)는 보통 일관성과 분할 용인를 선택한다. 모든 플레이어가 같은 월드를 공유하니까 데이터 일관성이 중요하다. 대신 가용성이 조금 떨어져서 서버 점검 시간이 생기거나 접속이 느려질 수 있다.
반면, 빠른 FPS 게임은 가용성과 분할 용인을 우선한다. 게임이 멈추지 않고 계속 돌아가는 게 중요하니까, 약간의 일관성 오류(예: 순간이동처럼 보이는 렉)는 감수한다.