EOS란?

EOS(Epic Online Services) P2P 네트워크 정리
EOS P2P Interface란
EOS는 기본적으로 P2P(Peer-to-Peer) 연결을 지원하는 네트워크 서비스다. Mirror의 EOS Transport도 이 P2P Interface를 기반으로 동작한다. 서버를 직접 두지 않고도 플레이어끼리 연결할 수 있게 해주는 게 핵심 목적이다
1. NAT Punchthrough (홀펀칭)
두 클라이언트가 각자 방화벽/공유기 뒤에 있어도 직접 연결을 시도하는 방식이다. 대부분의 홈 네트워크 환경에서는 성공하지만, 대칭형 NAT(symmetric NAT) 환경에서는 실패 확률이 높다
2. Relay Server (릴레이)
홀펀칭이 실패하면 Epic의 릴레이 서버를 거쳐 우회 연결한다. 약간의 레이턴시 증가는 있지만 연결 성공률을 보장해주는 안전장치 역할이다
3. Relay Control 설정
연결 방식을 세 가지 모드로 제어할 수 있다
NoRelays— 릴레이 사용 안 함 (특정 네트워크 환경에서 연결 자체가 실패할 수 있음)AllowRelays— 홀펀칭 실패 시 릴레이로 자동 전환ForceRelays— 무조건 릴레이만 사용
일반적인 상황에서는 AllowRelays가 가장 무난한 선택이라고 한다
디버깅 시 확인 포인트 (Windows 기준)
프로젝트를 Windows 단일 타겟으로 좁히면서 확인해야 할 부분도 단순해졌다.
- 연결 타입 로그 확인:
EOS_P2P_AddNotifyPeerConnectionEstablished콜백에서ConnectionType이DirectConnection인지Relayed인지 체크 - NAT 환경 확인: 대칭형 NAT면 홀펀칭이 자주 실패하므로 릴레이 전환 여부를 로그로 반드시 확인
- Relay Control 설정값 점검: 너무 제한적인
NoRelays로 되어있으면 특정 네트워크에서 아예 연결이 안 될 수 있음
인증/세션 관련 기능
네트워크 연결 자체는 아니지만 함께 알아두면 좋은 EOS 기능들:
- EOS Connect: Epic Account 없이도 익명/디바이스 ID 기반 로그인이 가능해서 크로스플레이 대응에 유용
- Lobby / Sessions Interface: 매치메이킹, 방 생성/검색 기능. 연결 자체보다는 룸 관리 영역
Lobby 인원 제한
EOS 문서 찾아보다가 Lobby Interface에 인원 제한(기본 64명)이 있다는 걸 보고 처음엔 "어? 동시접속 제한인가?" 싶었는데, 찾아보니 완전히 다른 얘기였다
여기서 말하는 Lobby는 실제로 캐릭터가 움직이는 인게임 공간이 아니라 매치메이킹 대기실 개념이다.
파티 초대, 준비 상태 체크, 맵/모드 선택 같은 걸 주고받는 방일 뿐이고,
실제 P2P 플레이 인원이나 EOS 전체 동시접속자 수랑은 무관하다.
즉 "로비 방 하나의 정원이 64명"이라는 뜻이지 서버 전체 동시접속이 막힌다는 게 아니다.
대규모 게임 아닌이상 근처에도 갈 일 없는 숫자라 사실상 신경 안 써도 되는 제약.
EOS 장단점
장점
- 완전 무료, 매출 수수료 안 뗌. 성공해서 유저 늘어나도 추가 비용 없음
- 엔진/스토어 상관없이 붙일 수 있음 (Unity, 언리얼, 스팀, 자체 런처 다 가능)
- Epic Account 없이도 EOS Connect로 익명/디바이스 로그인 가능 → 스토어 종속 없는 진짜 크로스플레이
- P2P 홀펀칭 + 릴레이 인프라까지 무료로 제공
단점
- Lobby/Voice 등 인터페이스별로 세부 제한 존재 (위에서 설명한 정원 제한 같은 것들)
- 세밀한 매치메이킹(SBMM, MMR 기반)은 자체 구현해야 함. Sessions API는 단순 속성 검색 수준
- Epic 생태계 의존도가 있어서 서비스 정책 변경에 영향받을 수 있음
정리
EOS P2P는 서버 없이도 홀펀칭 + 릴레이 조합으로 안정적인 연결을 시도해준다는 게 가장 큰 장점이고, 무엇보다 규모가 커져도 과금 걱정이 없다는 게 Photon 같은 서비스랑 제일 크게 갈리는 지점이다. 스팀은 스팀 생태계 안에서는 강력하지만 그 밖으로 나가면 한계가 있고, Photon은 진입은 쉬운데 CCU 제한 때문에 나중에 비용이 붙을 수 있다.
문제는 이제 추가로 작업해야할 게 많다는 것..


![[Unity] 제네릭과 가변성(variance)](https://data.develog.develrocket.com/upload/develog/gmumdev/1791297148427-udtfz5/_____.png)
