Private Board 개발일지로그인

Eos 스팀 스토브

Steam · STOVE · EOS 멀티플레이 및 계정 구조

1. 목표

  • 배포 플랫폼: Steam / STOVE
  • 가능한 한 동일한 게임 바이너리 및 코드베이스 사용
  • 멀티플레이 공통 계층으로 Epic Online Services(EOS) 사용
  • Dedicated Server 운영하지 않음
  • 방장이 Listen Server 역할
  • 경쟁/승패 중심 게임이 아니므로 강한 Anti-Cheat 및 서버 권위 검증은 우선순위에서 제외
  • 자체 계정 서버 및 자체 사용자 DB를 운영하지 않는 방향
  • 사용자에게 Epic Games 계정 로그인을 요구하지 않는 구성 지향


2. 전체 구조

             Game.exe

                │

       ┌────────┴────────┐

       │                 │

   Steam 배포         STOVE 배포

       │                 │

 Steam 플랫폼         STOVE 플랫폼

   모듈/DLL             모듈/DLL

       │                 │

       └────────┬────────┘

                │

               EOS

                │

       ┌────────┼────────┐

       │        │        │

     Lobby    Session    P2P

                │

         Listen Server

                │

       ┌────────┴────────┐

     Client            Client

실제 멀티플레이 로직은 EOS를 통해 공통화한다.

Steam과 STOVE는 가능한 한 플랫폼 초기화, 플랫폼 사용자 정보 획득 등 플랫폼 종속 기능만 담당한다.


3. 플랫폼 코드 분리

플랫폼별 기능은 게임 본체와 분리하는 구조를 사용한다.

Game.exe


IPlatform

 ├─ Init()

 ├─ GetUserId()

 ├─ GetNickname()

 ├─ GetAuthToken()

 └─ Shutdown()


구현체

 ├─ PlatformSteam.dll

 └─ PlatformStove.dll

Steam 배포

Game.exe

PlatformSteam.dll

Steamworks Runtime

EOS Runtime

공통 게임 데이터

STOVE 배포

Game.exe

PlatformStove.dll

STOVE PC SDK Runtime

EOS Runtime

공통 게임 데이터

가능하면 Game.exe 자체는 동일하게 유지하고 배포 패키징 단계에서 플랫폼 DLL 및 런타임만 변경한다.

단, 유지보수나 SDK 제약 때문에 이 방식이 불필요하게 복잡해질 경우에는 동일 코드베이스에서 Steam/STOVE 빌드를 각각 생성하는 방식도 허용한다.


4. EOS의 역할

EOS는 스토어와 독립적인 공통 온라인 서비스 계층으로 사용한다.

주요 사용 대상:

  • Lobby
  • Session
  • P2P 네트워킹
  • 플레이어 식별(PUID)
  • 최소한의 영구 프로필 데이터
  • 필요할 경우 Achievements / Stats

Steam 또는 STOVE 자체의 멀티플레이 시스템에 게임 구조를 종속시키지 않는다.


5. 네트워크 구조

Dedicated Server는 운영하지 않는다.

방을 생성한 플레이어가 Listen Server가 된다.

EOS Lobby

    │

    ▼

Host Player

Listen Server

    │

 ┌──┴─────────┐

 │            │

Client      Client

장점:

  • Dedicated Server 비용 없음
  • 별도 서버 인프라 최소화
  • 운영 복잡도 감소
  • Steam/STOVE 공통 멀티플레이 구현 가능
  • 소규모 협동/비경쟁 게임에 적합

호스트 조작 및 클라이언트 치팅에 대한 강력한 방어는 목표로 하지 않는다.


6. Steam ↔ STOVE 크로스플레이

목표 구조:

Steam Player ─┐

              │

              ├─ EOS Lobby / P2P

              │

STOVE Player ─┘

플랫폼이 달라도 동일한 EOS Lobby/Session에 참가할 수 있도록 구성한다.

따라서 게임 플레이 계층에서는 상대방이 Steam 사용자인지 STOVE 사용자인지가 중요하지 않도록 설계한다.

플랫폼 정보가 UI 등에 필요한 경우에만 별도 메타데이터로 취급한다.


7. 사용자 계정 정책

게임 자체에서 복잡한 사용자 계정 시스템은 만들지 않는다.

필요한 것은:

  • EOS 내부 사용자 식별자
  • 닉네임
  • 프로필 이미지 ID

이메일, 비밀번호, 실명 등의 사용자 개인정보는 게임에서 관리하지 않는다.

EOS의 PUID와 같은 내부 식별자는 온라인 시스템 동작에만 사용하고 일반 사용자에게 노출할 필요가 없다.


8. 닉네임

최초 기본 닉네임은 실행 플랫폼의 닉네임을 사용한다.

Steam 실행

→ Steam 닉네임


STOVE 실행

→ STOVE 닉네임

게임 내에서 사용자가 닉네임을 수정할 수 있다.

수정한 경우 이후에는 게임에서 지정한 닉네임을 우선 사용한다.

개념적으로:

저장된 게임 닉네임 있음

    ↓ YES

저장된 닉네임 사용


    ↓ NO


플랫폼 닉네임 사용


9. 프로필 이미지

사용자가 임의 이미지를 업로드하는 기능은 제공하지 않는다.

게임에 여러 개의 프로필 이미지 프리셋을 포함하고 사용자가 그중 하나를 선택한다.

EOS에는 이미지 자체나 파일 경로가 아니라 문자열 ID만 저장한다.

예:

avatar_01

avatar_02

avatar_cat

avatar_robot

클라이언트가 ID를 실제 리소스에 매핑한다.

avatar_cat

    ↓

게임 내부 Avatar Registry

    ↓

실제 프로필 이미지 Asset

따라서 이미지 파일의 이름, 포맷 또는 실제 경로가 변경되어도 기존 사용자 데이터에는 영향을 주지 않는다.


10. EOS에 저장할 영구 프로필

현재 요구사항에서는 사용자별 영구 데이터가 매우 작다.

예:

{

  "nickname": "PlayerName",

  "avatarId": "avatar_cat"

}

핵심 영구 프로필 데이터:

항목

형식

설명

nickname

String

게임에서 사용할 닉네임

avatarId

String

프로필 이미지 프리셋 ID

EOS 내부 PUID는 별도로 EOS 사용자 식별에 사용한다.


11. 아이템 데이터

아이템 정보는 계정에 저장하지 않는다.

따라서 사용자 영구 프로필에는 다음과 같은 데이터를 넣지 않는다.

  • 인벤토리
  • 보유 아이템
  • 장착 아이템
  • 아이템 수량
  • 아이템 소유권
  • 계정 귀속 아이템 정보

게임의 아이템 시스템과 EOS 사용자 프로필 저장 시스템을 분리한다.


12. 추후 선택적으로 사용할 EOS 기능

현재 필수는 아니지만 필요해질 경우 다음 기능을 별도로 추가할 수 있다.

Achievements

게임 업적을 추가할 경우 EOS Achievements 사용 검토.

Stats

필요할 경우 다음과 같은 단순 누적 통계를 저장할 수 있다.

총 플레이 시간

게임 실행 횟수

특정 행동 수행 횟수

현재 게임 구조상 랭킹이나 경쟁 기록은 필수가 아니다.


13. 최종 목표 구조

                    Game.exe

                       │

                 IPlatform

                 /       \

                /         \

     PlatformSteam      PlatformStove

            │               │

            └───────┬───────┘

                    │

                   EOS

                    │

       ┌────────────┼────────────┐

       │            │            │

      PUID        Lobby         P2P

       │                         │

       │                  Listen Server

       │

 Player Profile

       │

 ┌─────┴─────┐

 │           │

Nickname   AvatarId

핵심 원칙

스토어는 배포 및 플랫폼 진입점, EOS는 공통 온라인 계층, 게임은 플랫폼 독립적으로 구성한다.

Steam과 STOVE의 차이는 가능한 한 플랫폼 모듈 내부에 격리하고, Lobby/P2P/Listen Server 및 게임 플레이 코드는 공통으로 유지한다.

사용자 영구 데이터는 최소화하여 현재 기준으로 nickname + avatarId만 저장한다.