언리얼 페스트 서울 2026

03 · Day 1 13:40–14:30

〈소닉 레이싱 크로스월드〉: EOS를 활용한 크로스플레이 구현

측정했기 때문에 망설이지 않았다. 단계적 테스트로 정량 데이터를 쌓아둬서, 발매 직전의 치명적 이슈도 설정 변경 하나로 즉시 판단하고 대응할 수 있었다.

#unreal-engine#eos#crossplay#networking#qa

약 26분 · 6개 중 3번째

세션 개요

측정했기 때문에 망설이지 않았다

단계적 테스트로 정량 데이터를 쌓아둔 팀이, 발매 직전의 치명적 이슈를 설정 변경 하나로 넘긴 기록입니다.

시리즈 최초로 크로스플레이에 대응한 레이싱 게임을 Epic Online Services(EOS)위에 올린 과정을 공개한 세션입니다. 기술 자랑이 아니라 “경험이 없는 영역을 어떻게 실적으로 바꿨는가”가 축입니다. 팀은 자기가 할 수 없는 일을 먼저 표로 그려 과제를 뽑고, 참가 인원과 지역을 단계적으로 넓히는 테스트로 정량 데이터를 쌓았습니다. 그 데이터가 있었기 때문에 발매 직전에 원인 불명의 통신 에러가 터졌을 때도 “무엇을 잃고 무엇을 얻는지”를 계산해 하루 만에 결단할 수 있었습니다.

측정했기 때문에 망설이지 않았다. 데이터를 계측하고 리스크를 정량화해뒀기에 즉각적인 의사결정이 가능했다.

— 이 세션의 한 줄 결론

이 문서가 원문에 더한 것

발표는 EOS를 이미 아는 청중을 전제로 진행됐습니다. 그래서 이 문서에는 EOS의 서비스 구성, Lobbies와 Sessions의 차이, P2P가 연결을 맺는 순서, 릴레이 모드의 호환성 제약, 스레드 어피니티 API를 에픽게임즈 공식 문서로 확인해 “기초 다지기” 블록으로 덧붙였습니다. 발표를 듣지 않은 사람도 각 판단의 근거를 따라갈 수 있게 하는 것이 목적입니다.

전제

어떤 게임이고, 누가 만들었나

기술 선택의 실질적 근거가 여기서 나옵니다.

한 바퀴를 돌 때마다 트래블 링을 통해 코스가 다른 차원으로 갈아치워지는 레이싱 게임입니다. 아케이드 게임에 가까운 빠른 템포의 플레이 필을 중시하며, 온라인은 최대 12인 대전, 프렌드와는 최대 4인 스쿼드[1]로 함께 달립니다. 그리고 이번 작품이 시리즈 최초의 크로스플레이 대응작[2]입니다.

사진 · 자료

12인이 같은 트랙에 들어오는 게임

〈소닉 레이싱 크로스월드〉 인게임 스크린샷 — 수면 위 코스를 익스트림 기어로 질주하는 장면
플랫폼을 섞어 12명이 동시에 달리는 것이 이 게임의 온라인 요건입니다. 지연 차가 큰 참가자들이 같은 코스에서 서로 부딪히는 종목이라, 뒤에 나오는 예측 거동 조정이 곧 게임성 문제가 됩니다.출처: Epic Online Services — SEGA delivers global crossplay in Sonic Racing: CrossWorlds · © SEGA · 인용

콘솔 팀과 아케이드 팀이 융합된 구성

팀배경
콘솔 게임 개발팀소닉 시리즈 개발 경험
아케이드 팀레이싱·음악 게임 등 아케이드 타이틀 중심 개발

발표에서는 체감상 두 팀이 비슷한 비중으로 섞인 구성이라고 설명했습니다.

중요한 것은 EOS 도입과 온라인 콘텐츠 개발을 아케이드 팀이 중심이 되어 시작[3]했다는 점입니다. 에픽게임즈가 공개한 개발팀 인터뷰에도 같은 맥락이 있습니다 — 이 스튜디오는 레이싱 장르에서 동기화 제어와 실시간 통신에 최적화된 자체 P2P 기반 네트워킹 시스템을 오랫동안 다듬어 왔고, 온라인 기능이 붙은 아케이드 게임을 20년 넘게 운영하며 쌓인 기반 기술이 지금 엔지니어들에게 계승되어 있다고 밝혔습니다.

이 사실 하나가 뒤에 나오는 모든 선택을 설명합니다. “무엇이 가장 좋은 기술인가”가 아니라 “우리 팀이 이미 무엇을 할 수 있는가”가 판단 기준이었습니다.

1단계

가장 먼저 한 일은 “할 수 있는 것과 없는 것” 표 그리기

해법을 찾기 전에 갭을 가시화했습니다.

개발팀이 착수 직후에 한 일은 구현이 아니라 과제 추출이었습니다. 게임에 요구되는 요건을 나열하고, 각 요건에 대해 팀이 가진 지견을 표의 맨 오른쪽 열에 △(일부 지견은 있으나 불충분) 와 ×(지견 없음) 로 표기해 갭을 그림으로 만들었습니다.

팀이 갖고 있지 않았던 것왜 문제인가
크로스플레이 지원 경험플랫폼별 계정 체계·인증·인증 요건이 전부 다릅니다. 통신만 붙이면 되는 문제가 아닙니다
12인 규모 동시 접속 경험풀 메시 P2P에서 참가자 수가 늘면 연결 수는 제곱으로 늘어납니다
고지연 환경 온라인 서비스 운영 경험기존 실적은 일본·아시아 네트워크 환경에 최적화된 것이었습니다

이 갭에서 3가지 기술 과제가 도출됩니다.

과제 1 — 통신 안정성

12인 크로스플레이 환경

플랫폼이 섞인 12인 세션이 끊기지 않고 유지되어야 합니다.

과제 2 — 동기화 시스템

지연 차가 큰 환경

참가자 간 지연 격차가 커도 위화감이 적어야 합니다.

과제 3 — 통신 기반

월드와이드 운영

전 세계 규모를 출시 이후에도 지탱할 수 있어야 합니다.

네 번째 과제 — 동작 실적 부족

기술 과제 3가지만큼 중요한 과제가 하나 더 있었습니다. “동작 실적이 부족하다.” 제품으로 세상에 내놓으려면 이 과제를 해소하는 것도 매우 중요했습니다. 이 네 번째 과제가 이후 3단계 테스트 계획의 직접적인 동기입니다.

2단계

EOS를 선택한 3가지 이유

세 이유 모두 “우리 팀 사정”에서 나옵니다.

#이유왜 이 팀에 맞았나
1크로스플랫폼 대응 SDK바로 동작하는 SDK가 준비되어 있어 이른 단계에 플레이어블 롬을 만들고 검증을 반복할 수 있습니다. 12인 크로스플레이 통신 안정성(과제 1)을 확보하는 데 직접 유리한 조건입니다
2P2P 네트워크 API팀이 클라이언트 간 실시간 통신에 이미 지견이 있었습니다. P2P 기반 API는 기존 구현과 궁합이 좋아 개발 효율을 올릴 수 있다고 판단했습니다
3서버 스케일러빌리티포트나이트처럼 전 세계 규모를 지탱하는 실적을 가진 서버 기반. 출시 이후 운영까지 감안한 선택입니다

이미 실적이 있는 통신 기반을 쓰면, 팀은 “구현 과제 해결”에만 집중할 수 있게 된다.

— 채택의 핵심 논리

에픽게임즈가 공개한 개발팀 인터뷰의 표현도 정확히 같습니다. EOS의 API가 팀이 전통적으로 개발해온 P2P 통신을 지원하고, 방화벽과 NAT를 적절히 고려해 최적의 연결 방법을 자동으로 결정하며, 코어 온라인 기능이 들어있는 언리얼 엔진 5를 쓰고 있었기 때문에 EOS 통합이 효율적이었다고 밝혔습니다. 네트워킹을 EOS에 맡기고 기술 구현 세부가 아니라 게임 품질 개선에만 집중할 수 있다고 판단한 것입니다.

기초 다지기

EOS는 하나의 서비스가 아니라 인터페이스 묶음이다

EOS는 크게 EOS Game Services와 EOS Epic Account Services로 나뉩니다. 이 사례가 쓰는 쪽은 대부분 Game Services입니다. 공식 문서 기준으로 이 사례와 맞물리는 인터페이스는 다음과 같습니다.

  • Platform — 다른 모든 인터페이스의 핸들을 얻는 진입점입니다. EOS를 쓰려면 반드시 통합해야 합니다.
  • Connect — 플레이어를 Game Services에 로그인시킵니다. Epic Games 계정이 없어도 됩니다. Steam·PlayStation 등 외부 아이덴티티 프로바이더의 토큰으로 로그인해 Product User ID(PUID)를 받습니다.
  • Auth — Epic Account Services 쪽 인증입니다. 소셜 오버레이나 Epic 친구 목록을 쓰려면 이쪽이 필요하고, 이 경우 외부 프로바이더로 Game Services에 직접 로그인하는 경로는 쓸 수 없습니다.
  • Lobby / Sessions — 모임과 매치를 관리합니다. 뒤에서 따로 비교합니다.
  • P2P (NAT P2P) — 클라이언트 간 직접 통신. 이 사례의 레이스 중 통신이 여기 올라갑니다.
  • Player Data Storage / Title Storage — 플레이어별·타이틀 공용 파일 저장. Sanctions — 제재 정보 조회와 세션 참가 차단.

즉 “EOS를 도입한다”는 말은 이 목록에서 필요한 인터페이스만 골라 붙인다는 뜻입니다. 이 사례가 실제로 손댄 것은 아이덴티티(Connect), 모임(Lobby), 실시간 통신(P2P), 그리고 초기화 옵션(Platform)입니다.

기초 다지기

스토어를 넘는 계정 연결이 실제로 요구하는 것

크로스플레이의 어려움은 통신이 아니라 “같은 사람인지 어떻게 아는가”입니다. EOS 공식 문서는 이렇게 정리합니다. 플레이어는 하나 이상의 외부 계정을 Product User ID(PUID)에 연결할 수 있고, PUID는 같은 조직 안의 각 제품마다 고유합니다. 서로 다른 플랫폼에서 시작한 두 계정이 같은 저장 데이터를 보려면, 두 계정 모두를 Epic Games 계정 같은 공통 아이덴티티 프로바이더(또는 자사 계정 시스템)에 연결해야 합니다.

문서가 권장하는 흐름은 이렇습니다 — 먼저 EOS_Connect_Login을 시도하고, “유저 없음” 응답으로 받은 EOS_ContinuanceToken을 보관합니다. 다른 플랫폼에서 플레이한 적이 있다면 그 계정 자격 증명으로 다시 로그인시키고, 성공한 뒤 EOS_Connect_LinkAccount를 호출해 두 외부 계정을 하나의 PUID에 묶습니다. 계정을 새로 만들 때는 EOS_Connect_CreateUser를 씁니다.

혼동하기 쉬운 지점이 하나 있습니다. EOS_Auth_LinkAccount는 외부 플랫폼 계정을 Epic Games 계정에 연결하고, EOS_Connect_LinkAccount는 플랫폼 계정을 PUID에 연결합니다. 크로스플레이를 붙일 때 실제로 필요한 것은 대개 후자입니다.

짚어둘 점

크로스플레이는 코드만으로 끝나지 않는다 — 인증 요건

EOS 공식 문서는 일부 콘솔 플랫폼 제공자가 크로스플레이를 끄는 설정을 제공하며, 그 설정을 따르는 것이 인증(certification) 요건의 일부라고 명시합니다. 플레이어가 크로스플레이를 거부했다면, 그 플레이어는 같은 플랫폼 멤버만 있는 로비/세션에만 들어가야 합니다.

여기서 “플랫폼”은 설치된 기기가 아니라 플레이어가 인증한 온라인 서비스를 가리킵니다 — Xbox 플레이어는 모두 XBL, PlayStation 플레이어는 모두 PSN으로 취급됩니다. 백엔드는 인증 토큰으로 각 멤버의 플랫폼을 식별해 EOS_LobbyDetails_MemberInfo의 Platform 필드로 노출하고, 허용되지 않은 플랫폼의 참가를 EOS_Lobby_JoinLobby 단계에서 막습니다. 다만 제약이 걸려 있지 않은 로비에서는 백엔드가 강제할 수 없으므로, 호스트/서버 쪽에서 추가 검증을 넣어야 한다는 것이 문서의 권고입니다.

더 깊이

콘솔용 EOS SDK는 다운로드 자체가 승인제다

공식 문서 기준으로 콘솔용 EOS SDK는 플랫폼 홀더와 에픽게임즈 양쪽의 승인을 받은 개발자만 내려받을 수 있습니다. 여기서 플랫폼 홀더는 Microsoft(Xbox One, Xbox Series), Sony(PlayStation 4, PlayStation 5), Nintendo(Switch, Switch 2)입니다. 플랫폼 홀더 승인을 먼저 받고, 그 다음 에픽게임즈 승인을 신청하는 순서입니다.

즉 “SDK가 준비되어 있어 바로 검증을 시작할 수 있다”는 이 세션의 첫 번째 채택 이유는 이미 콘솔 개발 승인을 통과한 스튜디오에서만 곧바로 성립합니다. 신규 팀이 같은 판단을 그대로 복사할 수는 없는 조건입니다.

3단계

3단계 온라인 테스트 계획

“동작 실적 부족”이라는 네 번째 과제에 대한 직접적인 답.

참가 인원 · 대응 플랫폼 · 대상 지역을 단계적으로 확대하는 계획을 세웠습니다. 각 단계의 목적은 “잘 되는지 보는 것”이 아니라 다음 단계의 문제를 미리 드러내는 것입니다.

Step 1 — Internal Play Test

오피스 환경 중심으로 개발 거점에서 품질을 확인합니다. 에픽게임즈가 공개한 개발팀 인터뷰에 따르면 국내·사내에서 시작해 일본·유럽·미국 오피스를 잇는 테스트까지 진행했습니다.

Step 2 — CNT (Closed Network Test)

고객이 자기 환경에서 처음 플레이하는 단계. 매치메이킹이 상시 1만 5천 명 규모를 지탱하는 것을 기대치로 잡은 중규모 테스트입니다.

Step 3 — ONT (Open Network Test)

크로스플레이를 포함한 대규모 테스트. 발표에서는 이 단계를 “발매 전 최종 조정을 수행하는 가장 중요한 이벤트”로 규정했습니다.

도해

테스트에서 발매까지 — 실제 일정

내부

오피스 → 일본·유럽·미국 거점

고객

CNT 2일
ONT 4일

제품

발매

2025년 →

내부 테스트고객 테스트발매
공식 발표 기준 일정입니다. CNT는 2025-02-22부터 02-24까지 연 2일, ONT는 2025-08-29부터 09-02까지 연 4일(공식 표기는 모두 GMT+8), 발매는 2025-09-25였습니다. CNT와 ONT 사이의 약 6개월이 아래 세 가지 기술 과제를 처리한 구간입니다.

기초 다지기

단계적 부하 테스트의 숫자는 실제로 무엇을 재는가

“다운로드 4만 3천, 플레이 100만 회” 같은 숫자는 홍보용 지표로 보이지만, 네트워크 테스트에서 이 숫자들의 용도는 다릅니다. 동시 접속 규모는 매치메이킹 풀이 실제로 성립하는지 (12인 로비가 대기 없이 차는지)를 결정하고, 플레이 세션 수는 연결 성공/실패 표본 수를 결정합니다. 표본이 적으면 “특정 NAT 환경에서만 터지는 버그” 같은 저빈도 문제가 애초에 관측되지 않습니다.

에픽게임즈가 공개한 개발팀 인터뷰는 CNT에서 실제로 수집한 항목을 명시합니다 — 유저 간 레이턴시, 패킷 로스, 릴레이 서버를 경유한 연결의 비율, 그리고 설문으로 받은 플레이어 피드백입니다. 이 세 가지가 뒤의 세 가지 결정에 각각 대응합니다: 레이턴시는 예측 거동 파라미터, 패킷 로스는 송수신 처리 방식, 릴레이 경유 비율은 Force Relays 전환의 리스크 평가입니다.

즉 마지막에 “설정 하나 바꿔서 해결했다”가 가능했던 이유는 바꾸려는 그 설정의 영향 범위를 이미 숫자로 갖고 있었기 때문입니다. 측정 항목이 먼저 정해져 있었던 것이 핵심입니다.

4단계

EOS를 어떻게 조합했고, 무엇을 미리 준비했나

로비는 EOS 서비스에, 레이스 중 통신은 풀 메시 P2P에.

영역채택 방식설계상의 고려
온라인 로비EOS Lobbies[4]분당 레이트 제한이 존재하므로, 이를 고려하면서 게임 진행에 꼭 필요한 동기화만 수행
레이스 중 통신풀 메시 P2P게임상 중요도에 따라 동기화 내용을 조정

기초 다지기

Lobbies와 Sessions는 무엇이 다른가

EOS는 멀티플레이용 모임 서비스를 두 가지 제공합니다. 공식 문서의 비교를 그대로 옮기면 차이는 대체로 “연결을 EOS가 유지해주는가”로 요약됩니다.

Lobbies

상시 연결 + 내장 기능

  • 플레이어가 WebSocket으로 로비에 상시 연결됩니다. 갱신 정보를 얻으려고 매번 HTTP를 치지 않아도 서로 동기 상태가 유지됩니다
  • 참가 시 자동 등록, 이탈 시 자동 해제
  • 보이스 채팅 통합, 호스트 마이그레이션, 강제 퇴장(kick)이 내장
  • 게임 서버에 접속하지 않아도 메인 메뉴에서 옵션을 고를 수 있습니다
  • 인증된 플레이어만 참가할 수 있습니다

Sessions

요청 단위 + 직접 관리

  • 상시 연결이 없습니다. 플레이어 등록 같은 호출마다 새 HTTP 요청이 필요합니다
  • 세션 갱신을 게임이 직접 밀어 넣어 각 플레이어의 원격 뷰를 맞춰야 합니다
  • 참가/이탈 시 등록·해제를 게임이 직접 해야 정원 관리가 정확해집니다
  • 보이스·호스트 마이그레이션·킥 내장 기능 없음
  • 데디케이티드 서버를 쓴다면 Sessions를 반드시 써야 합니다 — 데디케이티드 서버는 로비를 쓸 수 없습니다

이 게임은 데디케이티드 서버 없이 P2P로 레이스를 돌리고, 매치 성립과 멤버 동기화만 서비스에 맡기는 구조입니다. 보이스·호스트 마이그레이션·상시 연결이 필요한 쪽이 Lobbies이므로 선택이 자연스럽게 정리됩니다.

짚어둘 점

“분당 레이트 제한”의 실제 숫자

발표가 “1분당 레이트 제한을 고려해 필요한 동기화만 했다”고 말한 부분은 EOS 공식 문서의 로비 사용 제한 표에 근거가 있습니다. 대표적인 값은 다음과 같습니다.

항목제한
로비 생성 / 참가 / 초대 / 검색각 분당 30회
로비 데이터 읽기분당 100회
로비 속성 갱신 / 멤버 속성 갱신각 분당 100회
로비 설정 변경 / 킥 / 오너 승격각 분당 30회
로비 최대 인원64명
동시 참가 가능한 로비 수유저당 16개
문자열 속성 길이1000자

Sessions 쪽도 유사합니다 — 세션 검색은 유저당 분당 30회로 안내되어 있습니다.

여기서 중요한 것은 “멤버 속성 갱신이 분당 100회”라는 점입니다. 60fps 게임에서 프레임마다 로비 속성을 갱신하면 1초 만에 한도를 넘습니다. 그래서 레이스 중 상태는 로비가 아니라 P2P로 흐르고, 로비는 매치 성립과 멤버 구성 같은 저빈도 정보만 담당하는 분담이 강제됩니다. 발표의 “필요한 동기화만 수행”은 취향이 아니라 이 한도의 결과입니다.

사전 준비 3가지 — “개선을 계속한다”를 전제로

  1. 넷코드 설계 — 지연 상황을 3단계로 나눠 조정 가능하게 만들어 뒀습니다. 플레이 중 불안감이 적은 동기화 조정이 가능하도록 하는 것이 목표였습니다.
  2. 플랫폼 대응 — 복수의 프레임레이트가 존재하는 것을 전제로 설계·구현했습니다. 구체적으로 30fps와 60fps 구현을 분리했습니다.
  3. 에픽게임즈와의 연계 — CNT 참가 예정 인원을 사전 공유하고, 테스트 기간 중 모니터링 협력을 요청했습니다. 개발팀 인터뷰에도 “예상 플레이어 수를 에픽과 공유해 서버 스케일링과 모니터링 지원을 받았다”고 기록되어 있습니다.

세 항목 모두 “나중에 바꿀 수 있게 만들어두는” 준비입니다. 결과를 미리 맞히려는 준비가 아니라, 실측 결과가 나온 뒤 빠르게 반응하기 위한 준비라는 점이 이 세션의 성격을 보여줍니다.

5단계

CNT — 성공했지만 그대로 ONT로 가지 못했다

연 2일간의 첫 고객 환경 테스트.

2025년 2월[5]에 연 2일간 실시했습니다. 결과는 기대치를 넘었습니다.

항목결과출처
누적 다운로드4만 3천개발팀 공개 인터뷰
누적 온라인 플레이100만 회개발팀 공개 인터뷰
매치메이킹 기대치상시 약 1만 5천 명 — 실제 결과가 이 기대치를 상회개발팀 공개 인터뷰
설문 결과응답자 95%가 “네트워크가 안정적이었다”고 답변개발팀 공개 인터뷰
플레이 지역세계 50개국 이상[6]세션 발표

숫자보다 중요했던 것

개발팀은 측정 결과가 과거 아케이드 타이틀의 온라인 운영 데이터에서 세운 예측과 일치했다는 점을 성과로 꼽았습니다. 예측이 맞았다는 확인은 이후 판단에 그 예측 모델을 계속 써도 된다는 뜻이고, 마지막 Force Relays 결단의 근거가 여기서 만들어집니다.

한편 운영 쪽 반성도 이 단계에서 나옵니다. 개발 스태프는 기간 중 교대제로 24시간 감시[7]를 실시했고, 경험 많은 인원이 맡았음에도 체력 면에서 예상 이상의 부담이 발생했습니다.

〈소닉 레이싱 크로스월드〉 야간 도시 코스 인게임 스크린샷CNT 구간
〈소닉 레이싱 크로스월드〉 다수의 차량이 뒤엉킨 레이스 인게임 스크린샷ONT 구간
두 장 모두 에픽게임즈가 개발팀 인터뷰의 테스트 문항 구간에 함께 실은 인게임 스크린샷입니다. 테스트 결과를 보여주는 그래프가 아니라, 같은 게임이 두 단계에서 어떤 밀도로 돌아갔는지에 대한 참고 이미지입니다.출처: Epic Online Services — SEGA delivers global crossplay in Sonic Racing: CrossWorlds · © SEGA · 인용

성과는 충분했지만, 이대로 순조롭게 ONT로 가지는 못했다. 극복해야 할 과제가 몇 가지 드러났다.

— CNT 직후의 상황

과제 1

고지연 환경에서 예측 정확도가 떨어진다

CNT 실측이 예측 모델의 한계를 드러낸 지점.

기초 다지기

예측 거동(Prediction)이 왜 필요한가

네트워크 대전에서 상대의 위치를 “도착한 패킷대로만” 그리면, 패킷 간격만큼 상대가 순간이동하거나 멈춰 보입니다. 그래서 실시간 게임은 다음 위치를 미리 계산해 먼저 그리고, 이후 실제 데이터가 도착하면 그 차이를 보정합니다. 이 게임은 수신한 플레이어 조작과 예측 처리를 함께 써서 온라인 플레이어의 거동을 재현합니다.

핵심은 트레이드오프입니다. 개발팀 인터뷰의 표현이 정확합니다 — “예측을 강하게 하면 더 높은 지연에 대응할 수 있지만, 상대의 실제 거동과의 차이도 커진다.” 그래서 예측 강도를 하나로 고정할 수 없고, 저지연·중지연·고지연 세 구간으로 나눠 조정하는 설계가 나옵니다. 앞서 사전 준비 1번의 “지연 상황 3단계”가 바로 이것입니다.

사진 · 자료

예측 경로를 그린 뒤, 도착한 데이터로 부드럽게 끌어당긴다

예측 경로와 수신 위치를 블렌딩해 보정하는 과정을 설명한 2단 다이어그램
왼쪽(1)은 자체 예측 알고리즘이 상대 차량의 미래 위치(파란 점)를 계산해 경로를 만드는 단계입니다. 오른쪽(2)은 새로 수신한 위치가 “실제 상태보다 앞서 있다”고 보고, 기존 예측 경로와 새 데이터를 블렌딩해 현재 표시 위치를 연속적으로 보정하는 단계입니다. 상대가 멈추거나 튀지 않고 계속 움직이는 것처럼 보이게 만드는 것이 목적입니다.출처: Epic Online Services — SEGA delivers global crossplay in Sonic Racing: CrossWorlds · © SEGA · 인용

문제

  • 이 구조는 네트워크 지연의 영향을 직접 받으므로 고지연 환경에서는 추가 조정이 필수입니다.
  • CNT 계측 데이터를 분석한 결과 예상보다 약 100ms 큰 지연[8]이 발생하고 있음을 확인했습니다.
  • ONT는 훨씬 다양한 네트워크 환경에서의 참가가 예상되므로, 그대로 두면 게임 체험이 저하될 수 있었습니다.

대응

  • CNT 실측 데이터를 근거로 예측 거동 파라미터를 재조정하고, 플레이테스트를 반복하며 최적화했습니다.
  • 상대방이 멈춘 것처럼 보이지 않고 계속 움직이는 것처럼 보이게 만들어 UX를 개선했습니다.

발표가 여기서 재확인한 것은 결과가 아니라 전제입니다 — “조정하기 쉬운 설계”로 미리 만들어둔 덕분에 실측 결과 기반의 신속한 개선이 가능했습니다. 파라미터가 코드에 박혀 있었다면 100ms는 재설계 사안이 됩니다.

과제 2

서로 다른 프레임레이트가 만나면 패킷 처리가 따라가지 못한다

크로스플랫폼에서만 나타나는 종류의 문제.

이 게임은 플랫폼 스펙에 따라 30fps 또는 60fps로 동작합니다. 크로스플랫폼 검증에서 서로 다른 프레임레이트 환경이 혼재하자 패킷 처리가 따라가지 못하는 문제가 발생했고, 특히 한쪽 프레임레이트 환경에서 다른 프레임레이트 환경으로 송수신할 때 현저하게 나타났습니다. 결과는 예측 정확도 저하 + 통신 에러였습니다.

기초 다지기

왜 프레임레이트에 통신을 묶으면 깨지는가

송수신을 게임 프레임에 태우면 전송 빈도가 곧 프레임레이트가 됩니다. 60fps 클라이언트는 초당 60번 보내고, 30fps 클라이언트는 초당 30번 처리합니다. 개발팀 인터뷰의 설명이 그대로 이 상황입니다 — “게임 프레임레이트를 기준으로 패킷을 주고받으면, 프레임레이트가 낮은 쪽이 패킷 처리를 따라가지 못한다.”

여기에 12인 풀 메시가 곱해집니다. 각 클라이언트가 나머지 11명과 직접 연결을 유지하므로 수신량은 인원 수에 비례합니다. 30fps 쪽은 프레임당 처리해야 할 패킷이 두 배로 쌓이고, 밀린 패킷은 결국 버려지거나 늦게 반영되어 예측 보정의 입력 자체를 망칩니다. 과제 1과 과제 2가 별개 문제가 아니라 같은 곳에서 만나는 이유입니다.

도해

송수신을 게임 프레임에서 떼어낸다

이전 — 통신 빈도 = 게임 프레임레이트

게임 틱(30/60)패킷 송수신예측 보정

이후 — 통신 빈도를 독립 제어

게임 틱(30/60)독립 통신 레이트패킷 송수신예측 보정
개발팀 인터뷰는 이 해법을 “패킷 처리 레이트를 게임 프레임레이트와 독립적으로 조정해 문제를 해결했고, 차량 예측 거동과 함께 처리했다”고 설명합니다.

결과는 통신 스루풋 향상과 패킷 처리 안정화였습니다.

여기서 나온 교훈

실시간 통신에서는 통신 빈도를 올리는 것만이 답이 아니라, 처리 부하의 밸런스를 고려한 최적화가 중요합니다. 저스펙 쪽 처리 여력이 상한이라면, 빈도를 올리는 개선은 그 상한에서 역효과가 됩니다.

과제 3

특정 플랫폼에서 EOS 스레드와 게임 처리가 부하를 다툰다

프로파일을 봐야 보이는 종류의 문제.

특정 플랫폼 내에서 통신 에러율이 증가하는 현상이 있었습니다. CPU 프로파일을 확인한 결과, EOS 관련 스레드와 게임 처리 사이에 부하 경합이 발생하고 있음을 발견했습니다. 대응은 EOS 관련 스레드의 어피니티 마스크를 조정해 부하를 분산하는 것이었고, 결과적으로 통신 에러율이 개선됐습니다.[9]

기초 다지기

EOS SDK의 스레드 어피니티는 공식 조정 지점이다

EOS 공식 문서는 이렇게 설명합니다 — “EOS SDK는 스레드를 특정 CPU 코어 집합에 바인딩한다. 이를 스레드 어피니티라고 한다. 플랫폼마다 기본 어피니티가 있고, 이는 데드락을 방지하는 데 도움이 된다.” 그리고 다른 어피니티를 쓰고 싶다면 SDK 초기화 시점에 기본값을 덮어쓸 수 있다고 명시합니다.

EOS_Initialize_ThreadAffinity ThreadAffinity = {};
ThreadAffinity.ApiVersion  = EOS_INITIALIZE_THREADAFFINITY_API_LATEST;
ThreadAffinity.NetworkWork = MyNetworkAffinity;    // IO가 아닌 네트워크 관리 스레드
ThreadAffinity.P2PIo       = MyP2PIoAffinity;      // P2P 트래픽 IO
ThreadAffinity.WebSocketIo = MyWebSocketAffinity;  // 로비 상시 연결 등
ThreadAffinity.StorageIo   = MyStorageIoAffinity;  // 스토리지 장치 접근
ThreadAffinity.HttpRequestIo = MyHttpRequestIoAffinity;

EOS_InitializeOptions SDKOptions = {};
SDKOptions.ApiVersion             = EOS_INITIALIZE_API_LATEST;
SDKOptions.OverrideThreadAffinity = &ThreadAffinity;  // nullptr이면 플랫폼 기본값
EOS_Initialize(&SDKOptions);

구조체가 카테고리를 이렇게 쪼개 놓은 것 자체가 이 조정의 의도를 보여줍니다. NetworkWork(IO가 아닌 네트워크 관리), P2PIo(P2P 트래픽 IO), WebSocketIo, StorageIo, HttpRequestIo, RTCIo, CryptographyWork가 각각 별도 마스크를 받습니다. 즉 “P2P IO만 게임 스레드가 붐비는 코어에서 떼어낸다”는 식의 국소적 조정이 가능합니다. 각 값을 0으로 두면 플랫폼별 기본값이 쓰입니다.

짚어둘 점

어피니티를 건드릴 때의 두 가지 함정

첫째, 기본값이 데드락 방지를 위해 정해져 있다는 문서의 표현을 가볍게 넘기면 안 됩니다. 임의로 좁게 몰아넣으면 통신 에러 대신 정지(hang)를 얻을 수 있습니다.

둘째, 이 구조체는 SDK 버전에 따라 멤버가 늘어납니다. 릴리스 노트 기준으로 EOS SDK 1.16.4에서 콘솔 전용으로 EmbeddedOverlayMainThread와 EmbeddedOverlayWorkerThreads가 추가됐고, 이는 브레이킹 체인지로 공지됐습니다. 이미 EOS_Initialize_ThreadAffinity를 쓰고 있던 게임은 업그레이드 시 새 멤버를 반드시 초기화해야 합니다. 어피니티 튜닝은 SDK 업데이트마다 재확인이 필요한 영역입니다.

발표가 이 항목에서 강조한 것은 개선 폭이 아니라 “EOS에 이런 조정 수단이 준비되어 있다”는 사실이었습니다. 서드파티 통신 기반을 쓰면서도 플랫폼별 성능 문제에 손을 넣을 여지가 있는지가 채택 가능성을 좌우합니다.

6단계

ONT 결과

동기화 처리 재검토 · 통신 부하 경감 · 게임 처리 부하 최적화를 끝낸 뒤.

항목결과출처
기간연 4일 (2025-08-29 ~ 09-02)공식 발표 · 개발팀 인터뷰
누적 다운로드100만개발팀 공개 인터뷰
누적 플레이1000만 회개발팀 공개 인터뷰
대응 플랫폼PS5 · Xbox Series X|S · Nintendo Switch · PC (Steam / Epic Games)공식 발표
플레이 지역세계 200개 이상의 국가·지역[10]세션 발표

CNT 대비 다운로드 약 23배, 플레이 약 10배 규모입니다. 감시 대응은 계속 실시했으며, 이번에는 CNT 경험을 통해 예상한 대로 운용할 수 있었습니다.

그리고 이번에도 이대로 순조롭게 제품 출시로 이어지지는 않았다.

— ONT 직후의 상황

7단계

최종 조정 — Allow Relays에서 Force Relays로

발매 직전, 원인 불명의 통신 에러를 설정 하나로 답한 지점.

문제 — 원인 특정 실패

  • ONT 계측 데이터 분석 결과 일부 고객에게서 통신 에러가 빈발하는 경향이 발견됐습니다.
  • 개발팀 내부 검증으로는 원인 특정에 실패했습니다. 오피스 네트워크에서는 재현이 되지 않았습니다.
  • 이대로 아무것도 하지 않고 발매하면 고객의 게임 체험을 손상시킬 리스크가 높은 상태였습니다.

원인 규명 — 일반 가정 회선에서 재현 테스트

해법은 특별한 도구가 아니라 환경의 다양성이었습니다. 재택 근무 사원들을 동원해[11] 일반 인터넷 회선에서 추가 테스트를 실시했고, 이 테스트가 주효해서 문제를 발견했습니다.

원인

NAT Type이 동적으로 전환되는 환경이 존재했고, EOS의 동작 모드가 Allow Relays인 경우 P2P 또는 LAN 경로의 접속 확립에 예상 이상의 시간이 소요되어 게임 상에서 에러로 처리되는 케이스가 있었습니다.

기초 다지기

EOS P2P는 어떤 순서로 연결을 맺는가

공식 문서 기준으로 사설 IP는 홈 네트워크 밖의 피어에서 도달할 수 없으므로, EOS SDK는 ICE로 NAT 트래버설을 수행합니다. STUN으로 내부망 게임 클라이언트의 공개 IP를 알아내 시그널링 채널을 통해 피어와 공유하고, 그래도 방화벽이 지나치게 제한적이면 TURN 릴레이를 씁니다. 릴레이는 한쪽이 보낸 데이터를 서버가 받아 다른 쪽으로 전달하는 방식이므로 추가 지연이 붙고, 그 크기는 양쪽이 서버에서 얼마나 가까운지에 달려 있습니다.

도해

연결 시도의 사다리와 그 대가

시도 방법

특성

같은 네트워크 내 직접 연결

가장 낮은 지연

LAN

STUN 기반 직접 P2P

공개 IP·포트 확인 필요

STUN / ICE

릴레이 경유

지연 추가, IP 은닉

TURN

지연 유리중간지연 불리 / 확실
Allow Relays는 이 사다리를 위에서부터 순서대로 시도합니다. 그래서 “직접 연결이 될 것 같은데 안 되는” 환경에서는 판정과 시행에 시간이 소모됩니다. NAT Type이 시도 중간에 바뀌면 이 판정이 더 길어질 수 있습니다.

공식 문서는 릴레이 연결이 성립하려면 플레이어의 방화벽이 UDP 패킷을 허용해야 한다고 명시합니다. 대부분의 방화벽은 UDP를 허용하지만, 제한적인 환경에서는 UDP가 차단되거나 특정 포트 허용이 필요할 수 있고 그 경우 릴레이도 실패합니다.

세 가지 릴레이 모드

모드API 값동작
No RelaysEOS_RC_NoRelays릴레이를 절대 쓰지 않습니다. 제한적인 NAT를 가진 플레이어는 연결하지 못할 수 있습니다
Allow Relays (기본값)EOS_RC_AllowRelays직접 연결을 먼저 시도하고, 실패한 뒤에 릴레이를 시도합니다. 변경하지 않으면 이 값입니다
Force RelaysEOS_RC_ForceRelays릴레이만 사용합니다. 모든 연결에 지연이 추가되지만, 피어 간에 IP 주소가 노출되지 않습니다

공식 문서 표기 그대로입니다. 판정 단계를 건너뛴다는 것이 이 사례에서 결정적이었습니다.

EOS_P2P_SetRelayControlOptions Options = {};
Options.ApiVersion   = EOS_P2P_SETRELAYCONTROL_API_LATEST;
Options.RelayControl = EOS_RC_ForceRelays;   // 기본값은 EOS_RC_AllowRelays

EOS_P2P_SetRelayControl(P2PHandle, &Options);

공식 API 문서의 주의사항: 이 설정은 기존 연결에 즉시 적용되지 않습니다. 다만 연결이 재협상을 필요로 하는 경우에는 기존 연결에도 적용될 수 있습니다.

짚어둘 점

릴레이 모드는 클라이언트끼리 호환되어야 한다

공식 API 문서는 서로 다른 설정을 가진 클라이언트 간 호환성 표를 함께 제공합니다. 여기서 호환되지 않는 조합의 연결은 “일부 상황에서 성공할 수도 있지만, 일관되게 실패할 것으로 취급해야 한다”고 명시합니다.

NoRelaysAllowRelays (기본)ForceRelays
NoRelays호환호환비호환
AllowRelays (기본)호환호환호환
ForceRelays비호환호환호환

ForceRelays와 NoRelays 조합만 비호환입니다. 기본값(AllowRelays)은 세 모드 모두와 호환되므로, 전체를 ForceRelays로 밀어도 구버전 클라이언트가 NoRelays를 쓰지 않는 한 매칭이 깨지지 않습니다.

이 표가 “발매 직전에 전환해도 안전한가”에 대한 기술적 근거입니다. 만약 이 게임이 어딘가에서 NoRelays를 쓰고 있었다면 전면 전환은 매칭을 쪼개는 결정이 됩니다. 또 하나 유의할 점은 공식 문서가 Xbox를 예외로 명시한다는 것입니다 — Xbox를 제외한 각 게임 클라이언트 플랫폼에서 세 가지 릴레이 모드를 쓸 수 있고, Xbox의 P2P 요건은 별도 문서를 봐야 합니다.

Force Relays로 변경 — 판단 근거 3가지

#근거내용
1효과 측정실제 동작 검증에서 최대 10% 정도 에러율이 저하[12]되는 것을 확인했습니다
2리스크 평가기존 테스트에서 릴레이 서버 이용률과 고객 만족도를 사전 계측해뒀기에, 전환해도 리스크가 낮다고 판단했습니다
3즉시 대응 가능발매가 임박한 상황에서 EOS 설정 변경만으로 즉시 대응이 가능하다는 점을 재확인했습니다

이 판단이 포기한 것

Force Relays는 모든 연결이 릴레이를 경유하므로, 직접 연결이 잘 되던 플레이어도 추가 지연을 부담합니다. 개발팀 인터뷰도 이 점을 명시합니다 — “지연 최적화와의 트레이드오프가 따르지만, EOS SDK의 동작 모드를 유연하게 전환할 수 있는 것이 큰 이점이라고 생각한다.” 즉 이것은 “더 나은 설정으로 바꾼” 것이 아니라 연결 실패를 지연으로 교환한 결정입니다.

그리고 이 교환이 가능했던 이유가 근거 2입니다. 릴레이 이용률과 그 조건에서의 만족도를 이미 숫자로 갖고 있었기 때문에, “전원 릴레이”가 만족도를 어디까지 떨어뜨리는지 추정할 수 있었습니다. 측정이 없었다면 이 결정은 발매 직전의 도박이 됩니다.

결과

출시 이후

크로스플랫폼 동시 발매 + 크로스플레이 실현.

사진 · 자료

플랫폼을 섞은 12인 레이스가 실제로 성립한 상태

〈소닉 레이싱 크로스월드〉 사막 코스에서 여러 차량이 아이템 효과와 함께 경쟁하는 인게임 스크린샷
발표자는 크로스플레이 동시 런칭이 근래에 드문 사례였던 점도 있어 큰 반향이 있었다고 전했습니다.출처: Epic Online Services — SEGA delivers global crossplay in Sonic Racing: CrossWorlds · © SEGA · 인용
항목결과
발매2025-09-25, 크로스플랫폼 동시 발매 + 크로스플레이 실현
Metascore크리틱 82점 / 유저 스코어 9.0
Steam 평가압도적으로 긍정적[13]
판매100만 장 돌파
크로스플레이 실사용2인 스쿼드의 약 26%가 서로 다른 플랫폼에서 플레이
이후 전개Switch 2판 발매로 모든 콘솔 플랫폼에서 플레이 가능

Metascore·유저 스코어·판매량·26% 수치는 모두 에픽게임즈가 공개한 개발팀 인터뷰에 명시된 값입니다.

마지막 26%가 이 프로젝트의 실질적인 성과 지표입니다. 크로스플레이는 켜두기만 하면 되는 기능이 아니라 실제로 쓰이는지가 투자 회수의 기준인데, 2인 팀의 4분의 1 이상이 플랫폼을 넘어 함께 플레이했다는 것은 이 기능이 유휴 기능이 아니었다는 증거입니다.

Q&A

질의응답에서 나온 실무 정보

발표 본문에 없던 구현 디테일이 여기서 몇 개 나옵니다.

P2P를 쓰면 치트·해킹 리스크는 어떻게 다루나

  • P2P만으로는 판정이 불가능합니다. AWS를 사용한 별도 서버[14]가 있어서 이쪽에서 이상을 감지하고 사후 대응하는 방식입니다.
  • 치트 행위는 실제로 존재하며, 운영 측에서 경고 또는 최악의 경우 밴 대응을 합니다.
  • “P2P에 리스크가 있느냐”에 대한 답은 “있다”는 것이 발표자의 정리였습니다.

더 깊이

EOS가 이 영역에 제공하는 것 — Sanctions와 Anti-Cheat

공식 문서 기준으로 EOS에는 제재를 다루는 Sanctions Interface가 있어, 세션 참가 시 제재 상태를 조회해 차단하는 흐름을 만들 수 있습니다. 별도로 Easy Anti-Cheat도 EOS 서비스군에 포함되지만, 문서는 Easy Anti-Cheat이 Windows·macOS·ChromeOS·Linux 64비트만 지원한다고 명시합니다. 콘솔이 주력인 크로스플레이 타이틀이 자체 서버에서 사후 탐지하는 구조를 택하는 것은 이 제약과 정합적입니다.

저스펙 플랫폼까지 대응할 때 어려웠던 점

  • 가장 큰 것은 스펙 차였습니다. 이번 작품은 Switch 1부터 PC까지 폭넓게 대응했습니다.
  • 저스펙 플랫폼에서도 같은 게임 체험을 어떻게 제공할지가 핵심 — 통신 빈도를 낮추는 등의 트레이드오프에서 게임 체험과의 밸런스에 특히 주의했습니다.
  • 보정 알고리즘 자체는 기본적으로 동일하고, 게임 프레임레이트 30 / 60 두 패턴을 기준으로 보간 횟수 같은 세부를 조정했습니다. 저스펙 쪽은 계산량이 그대로 부하로 되돌아오기 때문에 솎아내며 세밀하게 맞췄습니다.

EOS를 써보고 특히 좋았던 점

아케이드 팀이 네이티브 구현을 해왔기에 넷코드는 기본적으로 C++로 구현되어 있습니다. EOS는 C++에서도 사용하기 쉬운 API/SDK이므로, 기존에 독자적으로 구현해둔 부분에 조합해 넣기 쉬웠다는 것이 답이었습니다. 그래서 예측 알고리즘 같은 독자 처리와 EOS를 조합하는 것이 수월했고, 독자 구현을 유지하는 팀에게 이 점이 메리트라고 정리했습니다.

공식 문서 기준으로도 EOS 인터페이스는 C와 C#으로 제공되며, 언리얼 엔진이나 유니티용 플러그인은 인터페이스를 직접 쓰는 것에 대한 선택적 대안입니다. 자체 넷코드를 가진 팀이 플러그인을 우회해 SDK를 직접 호출하는 구성이 공식적으로 지원되는 경로입니다.

EOS 외의 대안은 검토했나

  • 자사 제작과 타사 서비스 이용이라는 대안도 당연히 있었습니다.
  • 다만 앞서 정리한 3가지 기술 과제 해소에 이 팀이 가장 적합했던 것이 EOS였고, P2P 기반 구현이 아케이드 팀에게 익숙한 영역이라 비교적 만들기 쉬웠던 점이 컸습니다.
  • 새로운 기술이라는 사실 자체는 변하지 않으므로, 개선 계획을 사전에 세우고 실적으로 불안을 해소해가는 사이클로 만든 것이 채택의 또 다른 큰 요인이었습니다.

반성

발표자가 스스로 꼽은 미숙한 지점

성공 사례 발표에서 이 부분이 가장 재사용 가치가 높습니다.

잘한 것

  • 설정 변경만으로 Force Relays 전환이 가능한 EOS의 유연성이 막판 대응에 결정적으로 도움이 됐습니다
  • 최종 조정 자체는 예상 밖이었지만, 개선을 전제로 한 설계 판단이 신속한 조정을 가능하게 했습니다
  • 데이터를 계측하고 리스크를 정량화해뒀기에 즉각적인 의사결정이 가능했습니다

반성한 것

  • 글로벌 네트워크의 다양성에 대해 아직 미숙했다. 설계 단계나 테스트에 충분히 반영하지 못했다는 것이 솔직한 평가였습니다
  • 테스트와 품질 확인이 인력에 의존할 수밖에 없었다. 자동화 추진 등 사람에 의존하지 않는 구조 만들기가 부족했습니다

두 반성이 같은 뿌리입니다. NAT 전환 환경을 사내에서 재현할 수 없었기 때문에 사람을 동원했고, 24시간 감시도 사람으로 메웠습니다. 네트워크 다양성을 설계에 넣지 못한 결과가 인력 의존으로 나타난 구조입니다.

발표자의 마무리는 세 줄로 정리됩니다 — EOS 활용과 에픽게임즈의 서포트가 기술 과제 해소에 크게 기여했고, 단계적 테스트로 과제 발견과 개선을 반복하는 사이클을 확립했으며, 무엇보다 데이터를 정량화하고 사실에 기반해 판단함으로써 신속하게 의사결정하며 개발을 전진시킬 수 있었다는 것입니다.

정리

이 세션에서 가져갈 것

기술 선택은 “무엇이 좋은가”가 아니라 “우리 팀이 무엇을 할 수 있는가”에서 나온다

아케이드 팀이 P2P에 익숙했다는 사실이 EOS 채택의 실질적 근거였습니다. 할 수 있는 것 / 없는 것을 표로 먼저 그린 것이 전체 의사결정의 출발점이었고, 3가지 기술 과제도 그 표의 빈칸에서 나왔습니다.

정량 데이터는 위기 상황에서 판단 속도로 되돌아온다

릴레이 서버 이용률과 만족도를 평소에 측정해뒀기 때문에, 발매 직전 대규모 설정 변경을 즉시 결단할 수 있었습니다. 측정 항목을 미리 정해두는 것 자체가 리스크 관리입니다 — 사후에 없는 데이터는 만들 수 없습니다.

“조정하기 쉬운 설계”가 실측 기반 개선의 전제 조건이다

예측 파라미터를 저·중·고지연 3구간으로 나눠 나중에 조정할 수 있게 설계해둔 것이 100ms 지연 문제를 빠르게 흡수했습니다. 같은 값이 코드에 상수로 박혀 있었다면 같은 발견이 재설계 일정이 됩니다.

서드파티 통신 기반을 고를 때는 “손을 넣을 여지”를 함께 본다

릴레이 모드 전환과 스레드 어피니티 마스크 조정은 둘 다 EOS가 공식적으로 열어둔 조정 지점이었습니다. 통신을 외부에 맡기면서도 플랫폼별 성능 문제에 개입할 수 있는지가, 문제가 터진 뒤의 선택지 개수를 결정합니다.

재현되지 않는 버그는 환경의 다양성으로 잡는다 — 다만 그 방식은 확장되지 않는다

오피스에서 재현되지 않던 NAT 전환 문제는 일반 가정 회선 재현 테스트로 잡혔습니다. 효과는 분명했지만 24시간 교대 감시와 인력 동원 재현 테스트를 발표자 본인이 반성 지점으로 꼽았다는 점이 함께 기록될 부분입니다.

크로스플레이는 통신 문제가 아니라 아이덴티티 + 인증 요건 문제다

발표의 초점은 통신이었지만, 공식 문서를 보면 실제 작업량은 PUID 계정 연결과 플랫폼별 크로스플레이 옵트아웃 준수(인증 요건)에 상당 부분 걸려 있습니다. 도입을 검토한다면 이쪽을 별도 일정으로 잡아야 합니다.

참고 자료

이 문서의 사실 확인에 사용한 자료

세션 내용과 대조한 1차 자료입니다.

핵심 1차 자료 · 에픽게임즈 공식

SEGA delivers global crossplay in Sonic Racing: CrossWorlds with Epic Online Services

에픽게임즈가 공개한 개발팀 Q&A. EOS 채택 3가지 이유, 단계적 테스트 구성, CNT의 4만 3천 다운로드·100만 플레이·1만 5천 명 기대치·설문 95%, ONT의 100만 다운로드·1000만 플레이, 예측 강도 3구간 조정, 패킷 처리 레이트의 프레임레이트 독립화, NAT 전환에 따른 ForceRelays 전환, Metascore 82·유저 9.0·100만 장·26% 크로스 플랫폼 스쿼드가 모두 여기 있습니다.

EOS 공식 문서

P2P Interface Reference — Relay Control

ICE/STUN/TURN 기반 NAT 트래버설 순서, Allow / No / Force Relays 세 모드의 정의, 릴레이 지연이 양쪽의 서버 근접도에 달려 있다는 서술, 릴레이에 UDP 허용이 필요하다는 조건, Xbox가 예외라는 명시.

EOS API 레퍼런스

EOS_ERelayControl · EOS_P2P_SetRelayControl

세 모드의 열거형 값과 서로 다른 설정을 가진 클라이언트 간 호환성 표(ForceRelays ↔ NoRelays 비호환), 그리고 설정 변경이 기존 연결에 즉시 적용되지 않는다는 주의사항.

EOS 공식 문서

Lobbies and Sessions Introduction

Lobbies의 WebSocket 상시 연결·자동 등록·보이스·호스트 마이그레이션·킥 내장, Sessions의 요청 단위 갱신과 수동 등록, 데디케이티드 서버는 Sessions를 써야 한다는 제약, 버킷 ID로 검색 성능을 개선하는 방법.

EOS 공식 문서

Modify a Lobby · 로비 사용 제한

로비 수정 API와 분당 요청 한도(생성·참가·초대·검색 30회, 데이터 읽기·속성 갱신 100회), 최대 인원 64명, 유저당 동시 로비 16개 등. 발표의 “분당 레이트 제한” 근거.

EOS 공식 문서

Connect Interface Reference

Product User ID(PUID)의 정의와 제품 단위 스코프, 외부 계정 연결(EOS_Connect_LinkAccount)과 ContinuanceToken 흐름, 크로스플랫폼 저장 데이터를 위해 공통 아이덴티티 프로바이더가 필요하다는 서술.

EOS 공식 문서

Crossplay Restrictions

콘솔 플랫폼 제공자의 크로스플레이 비활성 설정을 따르는 것이 인증 요건이라는 명시, “플랫폼”은 인증한 온라인 서비스를 뜻한다는 정의, 로비 멤버 플랫폼 식별과 호스트 측 추가 검증 권고.

EOS 공식 문서

EOS SDK Conventions and Limitations — Thread Affinity

EOS SDK가 스레드를 특정 코어에 바인딩하며 기본값이 데드락 방지에 기여한다는 서술, EOS_Initialize_ThreadAffinity로 카테고리별 마스크를 덮어쓰는 예시 코드.

EOS 릴리스 노트

EOS SDK Release Notes — 콘솔 전용 스레드 어피니티 브레이킹 체인지

EOS SDK 1.16.4에서 EmbeddedOverlayMainThread / EmbeddedOverlayWorkerThreads가 콘솔 전용으로 추가되고, 기존 사용자는 업그레이드 시 반드시 초기화해야 한다는 브레이킹 체인지 공지.

EOS 공식 문서

EOS Get Started Reference — 콘솔 SDK 접근

콘솔용 EOS SDK가 플랫폼 홀더(Microsoft·Sony·Nintendo)와 에픽게임즈 양쪽 승인을 받은 개발자에게만 제공된다는 조건.

SEGA 공식

Sonic Racing: CrossWorlds — Closed / Open Network Test 안내

CNT 실시 기간(2025-02-22 08:00 ~ 02-24 08:00, GMT+8)과 ONT 실시 기간(2025-08-29 12:00 ~ 09-02 12:00, UTC+8), ONT 대응 플랫폼(PS5·Switch·Xbox Series X|S·Steam·Epic Games), 온라인 최대 12인과 크로스플레이 지원 표기.

세션 정보

언리얼 페스트 서울 2026 — Day 1 Track 2 세션 페이지

공식 세션 목차에 “ForceRelays 모드 전환을 통한 최종 조정”이 명시되어 있어, 발표에서 다룬 최종 조정의 대상을 확정하는 근거가 됩니다.

후속 확인용

에픽 라운지 — 세션 다시보기 / 언리얼 엔진 코리아 유튜브

아래 각주에서 “슬라이드 대조 필요”로 남긴 항목(플레이 지역 수, 지연 수치, 에러율 개선 폭, 재현 테스트 인원)은 세션 영상이 공개되면 확인할 수 있습니다.

부록

각주

발표에서 언급됐지만 공개 자료로 확정하지 못한 항목입니다.

각주

  1. 최대 4인 스쿼드 — 온라인 최대 12인은 SEGA 공식 사이트와 스토어 표기로 확인됩니다. 스쿼드 정원은 공식 자료에서 단일 수치로 명시된 것을 찾지 못했습니다. Steam 스토어 설명은 Race Park 모드를 “2~4인 팀”으로, 에픽게임즈의 개발팀 Q&A는 분석 대상을 “2인 스쿼드”로 언급합니다. “최대 4인”이라는 표현 자체는 미확인입니다. ↩
  2. 시리즈 최초 크로스플레이 — 이 작품이 크로스플레이를 지원하는 것은 공식 확인됩니다. 다만 “소닉 레이싱 시리즈 최초”라는 서열 표현은 공식 자료에서 확인하지 못했습니다. 에픽게임즈의 개발팀 Q&A는 “PC와 콘솔 간 크로스 플랫폼 멀티플레이 경험을 제공한 또 하나의 마일스톤”이라고만 표현합니다. ↩
  3. 팀 구성 비율과 “아케이드 팀이 EOS 도입을 시작” — 개발팀이 아케이드 개발 기반을 계승했다는 점은 에픽게임즈의 개발팀 Q&A로 확인됩니다(레이싱 장르에서 자체 P2P 기반 네트워킹을 다듬어 왔고, 온라인 아케이드 운영 경험이 20년 이상 계승되어 있다는 서술). 다만 콘솔 팀과 아케이드 팀의 약 1:1 비율, 그리고 EOS 도입 착수 주체가 아케이드 팀이었다는 조직 내부 서술은 공식 자료로 확인되지 않습니다. ↩
  4. 온라인 로비에 EOS Lobbies를 사용 — 에픽게임즈의 개발팀 Q&A는 P2P 통신과 릴레이 모드만 명시하며, Lobbies 인터페이스 채택 여부는 언급하지 않습니다. 발표 내용을 옮긴 것이며, 본문에 인용한 분당 레이트 제한 수치는 EOS 공식 로비 문서에서 확인한 값입니다. ↩
  5. CNT 실시 일자 — 발표 기준으로는 2025년 2월 하순으로 언급됐습니다. SEGA 공식 CNT 안내 페이지는 2025-02-22 08:00부터 2025-02-24 08:00(GMT+8)까지로 표기하며, 이는 “연 2일”이라는 발표 내용과 일치합니다. 본문은 공식 일자를 따랐습니다. ↩
  6. CNT 플레이 지역 “세계 50개국 이상” — 에픽게임즈의 개발팀 Q&A는 다운로드 수와 플레이 세션 수를 명시하지만 국가 수는 언급하지 않습니다. 슬라이드에만 존재하는 수치로 보이며 미확인입니다. ↩
  7. 기간 중 교대제 24시간 감시 — 에픽게임즈의 개발팀 Q&A는 CNT 기간 중 에픽으로부터 모니터링 지원을 받았다는 사실은 확인해주지만, 개발팀 내부의 24시간 교대 감시 체제와 그 부담에 대한 서술은 공식 자료에 없습니다. ↩
  8. “예상보다 약 100ms 큰 지연” — 에픽게임즈의 개발팀 Q&A는 CNT에서 유저 간 레이턴시를 측정했고 그 데이터로 예측 강도를 저·중·고 3구간으로 조정했다는 사실까지 확인해줍니다. 그러나 구체적인 100ms라는 편차 값과 발표 현장에서 언급된 “최대 300ms” 수치는 공개 자료에서 확인되지 않습니다. ↩
  9. 어피니티 마스크 조정으로 통신 에러율 개선 — EOS_Initialize_ThreadAffinity로 카테고리별 어피니티를 덮어쓸 수 있다는 것은 EOS 공식 문서로 확인됩니다. 다만 이 게임이 실제로 어떤 플랫폼에서 어떤 마스크를 적용했고 에러율이 얼마나 개선됐는지는 공개되지 않았습니다. 발표에서도 수치는 제시되지 않았습니다. ↩
  10. ONT 플레이 지역 “200개 이상의 국가·지역” — 에픽게임즈의 개발팀 Q&A는 ONT의 다운로드 100만·플레이 1000만을 명시하지만 국가·지역 수는 언급하지 않습니다. 미확인입니다. ↩
  11. 재현 테스트 동원 인원 “사내 300명” — 에픽게임즈의 개발팀 Q&A는 “원격 근무 사원들이 일반 인터넷 회선으로 추가 테스트를 수행했다”고만 서술하며 인원 수는 밝히지 않습니다. 300명이라는 규모는 발표에서 언급된 값이며 공개 자료로 확인되지 않습니다. ↩
  12. “최대 10% 정도 에러율 저하” — ForceRelays로 전환했다는 사실과 그 이유(NAT 타입 전환 환경에서의 접속 문제), 그리고 지연 최적화와의 트레이드오프는 에픽게임즈의 개발팀 Q&A로 확인됩니다. 그러나 개선 폭 10%라는 수치는 공개 자료에 없습니다. ↩
  13. Steam 평가 — 에픽게임즈의 개발팀 Q&A는 “Steam 리뷰가 압도적으로 긍정적(overwhelmingly positive)이었다”고만 서술합니다. 발표에서 언급된 “95% 긍정”이라는 구체적 비율은 확인되지 않으며, Steam 스토어의 리뷰 비율은 시점에 따라 변동하는 값이므로 본문에는 공식 표현만 남겼습니다. ↩
  14. AWS 기반 별도 서버에서의 치트 사후 탐지 — Q&A에서 발표자가 답한 내용이며, 공개된 공식 자료에서는 확인되지 않습니다. 서버가 감시·사후 제재만 담당하는지, 아니면 통신 경로 중간에서 검증까지 수행하는지도 발표에서 명확히 언급되지 않았습니다. 답변의 맥락상 전자(감시·사후 대응)에 가깝습니다. ↩