온라인 멀티플레이는 생각보다 복잡하다.
공정성과 가성비를 모두 챙기기 위한 게임사들의 똥꼬쇼
엊그제인가, 자려고 누워서 쇼츠를 보다가 우연히 요즘 뜨는 인디 게임인 “메차 카멜레온”의 쇼츠를 봤다.
이 게임 자체를 칭찬하는 내용이었는데, 이 쇼츠에서 이 게임이 P2P 기반으로 멀티플레이를 구현해서 서버비를 상당 부분 아꼈다는 이야기가 있었다.
영상이 끝나고, P2P 기반으로 멀티플레이를 구현하면 어떤 게 장점이고, 어떤 게 단점인지 생각해봤다.
물론 피어 투 피어의 기본적인 내용(뭐, 서버비가 안든다, 이론상 지연이 낮을 수 있다 등의 장점이나 호스트가 꼭 필요하다 등의 내용은 알고 있지만… 조금 더 깊게 파고 싶었다.)
그래서 자려고 누웠다가 잠시 폰으로 뒤적뒤적하면서 좀 찾아봤다.
P2P에 대한 내용 뿐 아니라 온라인 게임에서 전체적으로 어떻게 멀티플레이를 구현하는 지에 대해서.
요츰 내가 종종 친구들과 하는 “엘든링: 밤의 통치자”도 스팀으로 초대해야 하는 다소 독특한? 방식을 쓰는 거 같아서 더 찾아봤다.
결국 핵심은 “누가 진실을 정하는가”
멀티플레이 구조를 다룬 글들을 몇 개 읽어봤는데, 다들 결국 같은 지점으로 수렴하고 있었다.
게임 상태의 최종 진실을 누가 갖느냐
내 캐릭터가 총알에 맞았는지, 두 명이 동시에 아이템을 주웠을 때 누가 갖는지: 이걸 최종적으로 판정하는 놈이 있어야 게임이 성립한다는 얘기다.
이 판정 권한을 어디에 두느냐로 크게 두 갈래로 나뉜다.
- 클라이언트-서버: 중앙에 서버가 하나 있고, 모든 플레이어(클라이언트)가 붙는다. 판정은 오직 서버가 한다. 요즘 상용 온라인 게임 대부분
- P2P (Peer-to-Peer): 중앙 서버 없이 플레이어끼리 직접 연결. 판정을 각자 나눠 갖거나, 한 명이 임시 권위자를 맡음. 서버비가 없는 대신 인원이 늘수록 연결 수가 폭발하고(N명이면 N×(N-1)/2), 치팅 방어가 어렵다
여기서 내가 오해하고 있던 게 하나 있었다.
“방장 컴퓨터가 서버” 방식은 사실 P2P 가 아니라 클라이언트-서버의 한 변종이다. 방장 PC 가 곧 서버 역할을 하는 거니까, 결국 그 안에 중앙이 있는 셈. 순수 P2P 는 아예 중앙이 없고 모두가 서로 이야기하는 구조.
이거 모르는 사람 은근 많을 것 같다. 나도 어제까지 몰랐다.
서버는 또 3종류
클라이언트-서버라고 다 같은 서버가 아니라, “서버” 라는 역할을 물리적으로 어디에 두느냐로 또 나뉜다.
리슨 서버 — 방장이 곧 서버
방을 만든 호스트의 PC 가 게임 클라이언트랑 서버를 동시에 돌린다. 호스트는 직접 플레이하면서 다른 유저의 접속을 받고 판정 권한도 갖는다.
- 마인크래프트 LAN
- 옛날 스타/워크 방 파기
- 대부분의 캐주얼 협동 인디 게임
이게 아마 메차 카멜레온이 채택하고 있는 방식일 확률이 높다. “P2P 라 서버비를 아꼈다” 는 표현은 사실 이 리슨 서버 방식을 뭉뚱그려 말한 거라고 봐야 한다.
장점은 확실하다. 서버비 0, 구현 단순. 인디 개발자가 특히 애용하는 이유다.
근데 단점도 만만치 않다.
- 호스트 어드밴티지 — 호스트는 자기 PC 가 서버라 지연시간이 사실상 0. 판정에서 유리해진다
- 호스트 마이그레이션 — 호스트가 나가면 게임이 통째로 터지거나, 다른 유저에게 권한을 넘기는 복잡한 로직이 필요하다
- 치팅 — 판정 권한이 개인 PC 에 있어서 메모리 조작 같은 게 상대적으로 쉽다
- 인원 상한 — 호스트의 업로드 속도가 최대 접속 인원을 결정한다
옛날 스타에서 방장이 나가도 다른 유저가 자연스럽게 방장이 되던 게 저 호스트 마이그레이션이었네 싶다. 그거 진짜 잘 만들어놨다.
전용 서버 — 아무도 안 하는 별도 머신
아무도 플레이하지 않는 별도 서버가 게임 로직만 돌리고, 호스트 포함 모두가 그냥 클라이언트로 붙는다. 이 경우 “방장” 은 서버가 아니라 그냥 방 설정/강퇴 권한만 가진 유저.
- 배그
- 오버워치
- 롤
- 발로란트
경쟁/랭크가 걸리는 게임은 사실상 이거 아니면 안 된다고 봐야 한다. 호스트 어드밴티지가 있으면 밸런스가 무너지니까.
당연히 서버 비용과 인프라 관리 부담이 만만치 않다. 인디에서 이 방식을 채택하기가 어려운 이유.
릴레이 서버 — 판정과는 상관없이 그냥 통로
이건 판정 권한이랑은 아예 다른 계층의 개념이다. 그냥 네트워크 통로.
요즘 유저 대부분이 공유기 뒤(NAT 안)에 있어서 서로 직접 연결이 잘 안 되는 경우가 많다. 그래서 중계 서버가 패킷을 대신 넘겨주는 역할.
- Steam Datagram Relay
- Photon
- Unity Relay
핵심은 이때도 게임 판정은 여전히 호스트 PC 가 하고, 릴레이 서버는 그냥 트래픽을 전달만 한다는 것. 권한과 통로는 완전히 다른 층이다.
NAT 라는 현실의 벽
“그냥 상대 IP 로 연결하면 되지 뭐” 가 잘 안 되는 이유가 이거다.
가정용 인터넷은 거의 다 공유기 뒤에 있고, 공유기는 외부에서 들어오는 연결을 기본적으로 막는다(NAT). 그래서 실무에서는 두 가지 기법을 쓴다.
- NAT 홀펀칭 — 중간 서버의 도움으로 양쪽이 동시에 서로에게 패킷을 쏴서 구멍을 뚫는다. 성공하면 진짜 P2P 직결
- 릴레이 폴백 — 홀펀칭이 실패하면 (엄격한 NAT 라든가) 그냥 중계 서버로 우회
즉 요즘 “P2P 게임” 이라고 해도 실제로는 중계 서버 인프라 없이는 성립이 어렵다는 거. 완전 무료 P2P 는 판타지에 가깝다.
매치메이킹은 또 별도 계층
여기가 나한테 제일 헷갈렸던 부분이었다.
“방을 만들고 찾는 것” 이랑 “실제 게임 트래픽이 오가는 것” 은 완전히 다른 계층이다.
- 매치메이킹 서버 — 어떤 방들이 있는지 목록을 관리하고, 플레이어를 방에 배정한다. 이건 리슨 서버 게임이라도 거의 항상 중앙 서버가 필요하다. 방 목록을 누군가는 들고 있어야 하니까
- 게임 세션 — 매칭이 끝난 뒤 실제 플레이가 벌어지는 연결. 여기가 리슨/전용/릴레이로 갈리는 지점
그래서 리슨 서버 게임도 사실은 하이브리드 구조인 셈이다. 매치메이킹은 중앙, 게임은 호스트 PC.
그래서 메차 카멜레온과 엘든링 밤의 통치자
메차 카멜레온 은 확인해보니 진짜로 개발자가 “전용 서버 대신 P2P 를 골랐다” 고 밝혔다. 정확히는:
- 방을 만들 때 지역/서버 이름/최대 인원 설정 → 방 목록 매칭
- 실제 게임 세션은 호스트 PC 가 서버 역할 (리슨 서버)
- 게임 안정성이 호스트의 PC 성능 + 인터넷에 100% 의존
- 그래서 게임 커뮤니티에서도 “호스트와 물리적으로 멀면 핑 튄다” 가 반복해서 지적되는 문제
정황 추측이 아니라 실제 구조가 딱 리슨 서버. 인디에서 서버비 아끼는 정석 조합이다.
엘든링: 밤의 통치자 도 의외로 실제 매치메이킹은 FromSoftware 자체 서버 가 담당한다. 스팀은 그냥 편의성 측면에서 따로 엘든링 자체가 친구 목록을 관리하지 않으니까 넣어둔 느낌이다.
- 매치메이킹: FromSoftware 서버
- 실제 게임 세션: P2P host-authoritative — 한 명이 호스트, 나머지는 그 사람에게 붙는 리슨 서버 방식
- 서버는 매치메이킹 + 계정 인증 + 세션 관리 + 진행도 저장만 담당, 게임 트래픽은 안 지나감
이게 좀 흥미로운 게, 매치메이킹 리전이 Japan / Rest of World 딱 두 개 뿐이다. 한국/유럽/북미가 다 같은 풀에 들어감. 그래서 랜덤 매칭 걸리면 대륙 간 매칭이 자주 걸리고, 핑이 150~300ms 나오는 게 흔한 문제라고 한다.
FromSoftware 시리즈 특유의 방식인 것 같은데 — 매치메이킹만 중앙 서버로 하고 실제 세션은 P2P 리슨 서버. 서버 비용을 크게 줄이는 대신 유저 경험에서 지연을 감수하는 트레이드오프.
정리
세 계층을 따로 놓고 보면 훨씬 명확해진다.
| 계층 | 하는 일 | 어디에 있나 |
|---|---|---|
| 매치메이킹 | 방 목록/플레이어 배정 | 거의 항상 중앙 서버 |
| 판정 권한 | 게임 상태의 최종 진실 | 리슨=호스트 PC / 전용=별도 서버 / P2P=분산 |
| 네트워크 통로 | 패킷 전달 | 직결(홀펀칭) 또는 릴레이 |
이걸 조합해서 게임 성격에 맞춰 고르는 거 같다.
- 협동/캐주얼 → 리슨 서버 + 릴레이 폴백 (인디 기본 조합)
- 경쟁/랭크 → 전용 서버 (사실상 필수)
- 하이브리드 → 매치는 중앙, 게임은 리슨 (스팀 초대 방식)
마치며
자기 전에 뒤적거리다 시작한 거였는데, 계층을 나눠서 보니까 그동안 너무 애매하게 겉으로만 알고 있었다.
“방장 = 서버” 를 그냥 P2P 라고 부르는 사람들이 많은데 사실은 클라이언트-서버의 한 변종이었다는 것, 매치메이킹과 게임 세션이 완전 다른 계층이라는 것 두 개는 이번에 아예 새롭게 알게 되었다.
암튼. 사실 쓸 거 없어서 정리해봤다.
마침.