[언리얼 C++] 온라인 서브시스템
언리얼 엔진에서는 온라인 플랫폼 관련 다양한 서브시스템을 제공해줍니다. 이를 온라인 서브시스템이라고 합니다.
온라인 서브시스템 및 그 인터페이스는 Steam, Xbox, Live, Facebook 등의 온라인 서비스 기능을 공통된 방식으로 액세스할 수 있는 방법을 제공합니다.
여러 플랫폼에 출시하거나 여러 온라인 서비스를 지원하는 게임을 만들때, 온라인 서브시스템을 사용하면 개발자는 각 지원 서비스에 맞게 구성만 조정해주면 됩니다.
1. 디자인 철학
온라인 서브시스템은 근본적으로 다양한 온라인 서비스와 비동기 통신을 처리하도록 설계되었습니다.
네트워크 연결 속도, 서버 지연시간, 백엔드 서비스 실행 시간 모두 로컬 머신이 알 수 없으므로, 이 시스템과의 상호작용에 시간이 얼마나 걸릴지도 예측할 수 없습니다. 이를 처리하기 위해 온라인 서브시스템은 모든 원격 작업에 델리게이트를 사용하여 지원되는 비동기 기능이 사용될때마다 해당 델리게이트가 호출되도록 합니다. 요청이 완료되면 응답하는 기능을 제공하는 것은 물론, 처리 중인 요청을 쿼리합니다. 또 델리게이트는 준수할 단일 코드 패스를 제공하므로, 개발자가 성공 또는 실패 조건을 캐치하는데 커스텀 코드를 작성할 필요가 없습니다.
모듈식 서비스별 인터페이스는 지원 기능끼리 그룹으로 묶습니다. 예를 들어 친구 인터페이스는 친구 목록 관련 모든 것을 처리하고, 업적 인터페이스는 업적 나열, 검사, 획득 등을 처리합니다. 지원하는 각 온라인 서비스의 기능 그룹에 대해 인터페이스가 존재하지만, 서비스가 지원되지 않는 특정 함수에 대해서는 단순히 false가 반환될 수 있습니다.
이 디자인을 통해 개발자는 모든 온라인 서비스에 대해 동일한 코드를 작성할 수 있습니다.
하이 레벨에서 더욱 복잡한 작업은 온라인 비동기 작업 관리자를 사용하여 순차적 작업이나 다른 스레드에서 실행되는 작업을 지원합니다. 비동기 작업은 종속성을 설명하여, 관련이 없는 작업은 독립적으로 병렬 실행시키고, 순차적 작업은 순서대로 실행시킬 수 있습니다. 온라인 서브시스템 내 모든 인터페이스는 작업 일관성을 유지하기 위해 이러한 방식으로 작업을 예약합니다.
2. 기본 구조 및 사용법
[OnlineSubsystem]
DefaultPlatformService=<Default Platform Identifier>
기본 모듈인 OnlineSubsystem은 엔진에 서비스별 모듈을 정의하고 등록합니다. 초기화 도중 온라인 서브시스템은 Engine.ini 파일에 정의된 기본 온라인 서비스 모듈을 로드 시도합니다. 온라인 서비스로의 모든 액세스는 이 모듈을 통해 이루어집니다.
static IOnlineSubsystem* Get(const FName& SubsystemName = NAME_None)
서비스 모듈 로드에 성공하면, 정적 접근자 Get() 함수를 통해 각각의 온라인 서브시스템을 사용할 수 있습니다.
여기서 파라미터로 서브시스템의 이름을 넘겨 불러오는데, 파라미터를 지정하지 않은 경우 기본 온라인 서브시스템을 반환합니다.
Get() 함수에 대한 호출을 요청하면 부가 서비스를 로드하며, 잘못된 식별자나 모듈 로드 실패는 null을 반환합니다.
3. 인터페이스
인터페이스 | 기능 그룹 설명 |
Achievements | 게임의 모든 업적을 나열하고, 업적을 해제하며, 자신이 해제한 업적과 다른 사용자가 해제한 업적을 검사합니다. |
External UI | 특정 하드웨어 플랫폼 또는 온라인 서비스에 대해 내장된 유저 인터페이스를 엽니다. 경우에 따라 이 인터페이스를 통해서만 특정 핵심 기능에 액세스를 부여하는 서비스도 있습니다. |
Friends | 친구와 친구 목록 관련된 모든 것입니다. 예를 들면 친구 목록에 사용자 추가, 사용자 차단 및 해제, 최근 온라인에서 만난 플레이어 나열 등입니다. |
Leaderboard | 온라인 리더보드를 액세스합니다. 예를 들어 자기 점수 (또는 횟수) 등록, 친구 목록이나 전 세계 플레이어 점수를 확인합니다. |
Identity | 플레이어 ID 관리를 위한 온라인 인터페이스입니다. |
Online User | 사용자 관련 메타데이터를 수집합니다. |
Presence | 다른 사용자에게 자신의 온라인 상태를 표시하는 방법을 설정합니다. 예를 들어 "온라인", "자리 비움", "게임 플레이 중" 등입니다. |
Purchase | 게임 내 구매와 과거 구매 내역 검토입니다. |
Store | 게임 내 구매에 사용할 수 있는 카테고리와 특정 제안을 불러옵니다. |
Session | 온라인 게임 세션 생성, 소멸, 관리입니다. 세션 검색과 매치메이킹 시스템도 포함됩니다. |
온라인 서브시스템에 포함된 인터페이스는 위 표와 같습니다.
각각의 인터페이스에 대한 설명은 아래 글들을 참고하시기 바랍니다.
Achievements: [언리얼 C++] Achievements 인터페이스(온라인 서브시스템) (tistory.com)
External UI: [언리얼 C++] External UI 인터페이스(온라인 서브시스템) (tistory.com)
Friends: [언리얼 C++] Friends 인터페이스(온라인 서브시스템) (tistory.com)
Leaderboard: [언리얼 C++] Leaderboard 인터페이스(온라인 서브시스템) (tistory.com)
Identity: [언리얼 C++] Identity 인터페이스(온라인 서브시스템) (tistory.com)
Online User: [언리얼 C++] Online User 인터페이스(온라인 서브시스템) (tistory.com)
Presence: [언리얼 C++] Presence 인터페이스(온라인 서브시스템) (tistory.com)
Purchase: [언리얼 C++] Purchase 인터페이스(온라인 서브시스템) (tistory.com)