Skip to main content

ThirdPersonMP 예제 프로젝트 로컬 배포 및 디버깅

이 가이드의 목적은 로컬 컴퓨터에서 MPS 호환 방식으로 게임 서버를 실행하여 PlayFab에 업로드하기 전에 서버를 테스트 및 디버깅할 수 있도록 하는 것입니다.

목표

  • ThirdPersonMP+GSDK 프로젝트의 로컬 배포 옵션을 테스트합니다.
  • LocalMultiplayerAgent를 사용하여 실행 시 서버가 제대로 실행되는지 확인합니다.
  • 서버 인스턴스에 디버거를 연결할 수 있는지 확인합니다.

요구 사항

표기법

{depot}은 Git 프로젝트를 다운로드하는 위치의 전체 Windows 경로를 나타냅니다. C:\depot, S:\depot, Z:\gitrepos 또는 편리한 드라이브와 경로 등 원하는 어느 곳이든 될 수 있습니다. 일반적으로 (특히 Unreal의 경우) {depot} 경로가 가능한 한 짧은 것이 권장됩니다. 저자의 경우 {depot}은 M:\depot\GSDK로 해결됩니다. 예를 들어 위의 요구 사항 목록에서 다음 중 일부 또는 전부를 갖게 될 것입니다.
  • {depot}/ThirdPersonMP
  • {depot}/MpsAgent
  • [선택 사항] {depot}/gsdk [이는 이전에 ThirdPersonMP에 설치된 PlayFab Unreal GSDK 플러그인을 포함합니다]
  • [선택 사항] {depot}/UnrealMarketplacePlugin [이는 이 가이드에 필요하지 않지만 대부분의 PlayFab 기능에 필요한 PlayFab Unreal Marketplace 플러그인을 포함합니다]
이 모든 것이 동일한 위치에 있을 필요는 없지만, 그렇게 하는 것이 유용할 가능성이 크며, 정리를 위해 이 가이드에서는 그렇게 할 것을 권장합니다.

지침

로컬 실행, 컨테이너 없음

먼저 LocalMultiplayerAgent가 서버 프로젝트를 실행하도록 구성해야 합니다. 첫 번째 반복은 격리 없이 로컬 PC에서 직접 프로세스를 실행합니다. Explorer에서 파일을 찾아 엽니다: {depot}\MpsAgent\LocalMultiplayerAgent\MultiplayerSettings.json. 이 가이드에 중요한 부분이 있는 이 파일의 축약 버전은 다음과 같습니다 [참고: json의 경로에서 이스케이프된 \‘s - 이는 json 파일이므로 모든 \‘s를 \\로 이스케이프해야 합니다]:
이 가이드의 목적을 위해 위의 ...로 가려진 json 파일의 부분은 프로젝트 기본값을 사용합니다. 중요한 필드의 목적과 값은 다음과 같습니다.
  • RunContainer: 이 가이드에서는 항상 false입니다. 이를 true로 설정하려면 Docker가 필요합니다.
    • true인 경우 ProcessStartParameters/StartGameCommand는 무시되고 대신 ContainerStartParameters/StartGameCommand가 사용됩니다.
    • true인 경우 모든 것이 로컬 컴퓨터 컨텍스트가 아닌 docker 컨테이너에서 빌드되고 실행됩니다.
    • 이 가이드는 서버 프로세스를 더 쉽게 디버깅할 수 있도록 RunContainer가 false인 시나리오를 다룹니다.
    • 이를 true로 설정하려면 Shipping Server 빌드, 추가 Docker for Windows가 필요합니다.
  • OutputFolder: "<Local absolute path that will be used to store the required output artifacts>"
    • 이 위치는 완전히 정의되어야 하며 유효한 디렉터리가 이 위치에 있어야 합니다.
  • AssetDetails/LocalFilePath: {PATH-TO-ZIP}
    • 이 위치는 완전히 정의되어야 하며 이 위치에 유효한 zip 파일이 있어야 합니다.
    • 이 zip 파일에는 완전히 구성된 “Shipping Server” 빌드가 포함되어야 합니다.
  • PortMappingsList:
    • 이는 Game Manager에서 포트를 정의하는 LocalMultiplayerAgent 동등물입니다.
    • GSDK 플러그인은 gameport라는 이름의 포트를 찾도록 하드 코딩되어 있습니다.
    • GSDK 플러그인 SetDefaultServerHostPort 메서드는 이 포트에 맞게 내부 Unreal 서버 호스팅 포트를 내부적으로 재정의합니다.
    • GSDK 플러그인은 LocalMultiplayerAgent를 사용할 때 PortMappingsList에 구성된 gameport라는 이름의 포트만 사용합니다.
    • 이 json을 사용하면 MPS에서 이 포트 번호를 로컬로 테스트하고 GSDK 플러그인이 제대로 수신하도록 할 수 있습니다.
  • ContainerStartParameters/StartGameCommand: RunContainer가 false인 동안에는 사용되지 않습니다.
    • RunContainer==true인 경우 ProcessStartParameters/StartGameCommand를 대체합니다.
    • 이 경로는 docker 컨테이너 내의 내부 경로이며, AssetDetails/MountPath와 AssetDetails/LocalFilePath로 정의된 zip 파일 내부의 내부 경로-to-exe의 합이 됩니다.
    • 이 예제에서는 다음이 될 수 있습니다: C:\\Assets\\ThirdPersonMPServer.exe -log
  • ProcessStartParameters/StartGameCommand: 이 명령은 사실상 exe에 대한 경로와 게임 서버를 시작하는 데 사용되는 명령줄 매개 변수가 됩니다.
    • -log는 게임 서버가 실행 로그를 저장하도록 지시하는 Unreal 명령입니다.
    • {PATH-TO-EXE}는 두 가지 선택 중 하나가 될 수 있습니다:
      • 게임 서버(development 게임 서버 포함)에 대한 exe의 절대 경로와 서버에 대한 명령줄 매개 변수
        • 이 선택은 zip 파일의 내용을 무시하고 대신 어느 위치에서든 임의의 exe를 실행합니다.
        • 이는 development 빌드를 디버깅하기 위해 로컬 컴퓨터에서만 작동하는 로컬 디버그 옵션입니다: zip 파일이 MPS에 업로드할 준비가 되었는지 확인하는 데 도움이 되지 않습니다.
        • 이 선택은 VS 디버거를 연결하는 데 적합한 development 서버를 테스트할 때 사용해야 합니다.
        • 이 예제에서는 다음이 될 수 있습니다: {depot}\\ThirdPersonMP\\Binaries\\Win64\\ThirdPersonMPServer.exe -log
        • 저자의 경우 이는 다음과 같습니다: M:\\depot\\GSDK\\ThirdPersonMPGSDK\\Binaries\\Win64\\ThirdPersonMPServer.exe -log
      • 서버를 실행하기 위해 zip 파일의 상대 경로를 나타내는 상대 경로
        • 이는 MPS 클라우드 인스턴스에서 작동하는 방식을 반영하는 표준 워크플로입니다.
        • 이 선택은 shipping 서버를 테스트할 때 사용해야 하며 zip이 MPS에 업로드할 준비가 되었는지 확인하는 데 도움이 됩니다.
        • 이 예제에서는 다음이 될 수 있습니다: ThirdPersonMPServer.exe -log
zip 파일을 만들고 이러한 모든 줄을 적절한 값으로 설정한 후에는 LocalMultiplayerAgent를 다시 빌드하고 서버를 디버깅할 준비를 할 수 있습니다.

서버 디버깅

Visual Studio에서 “Start New Instance” 명령(때때로 F5에 바인딩됨)으로 LocalMultiplayerAgent를 실행하거나 {depot}\LocalMultiplayerAgent\bin\{configuration}\netcoreapp3.1로 이동하여 “LocalMultiplayerAgent.exe”를 두 번 클릭할 수 있습니다. 또한 cmd 창 내에서 이를 실행하여 디버그 로그 정보를 관찰하거나 캡처할 수 있습니다. LocalMultiplayerAgent.exe를 실행하면 게임 서버가 시작됩니다. 일반적으로 이를 위해 Task Manager를 열어두는 것이 좋습니다. Task Manager의 Details 탭에서 게임 서버 프로세스 ID를 찾을 수 있습니다. Task Manager에서 ThirdPersonMPServer 프로세스가 실행되는 것을 확인하면 Visual Studio로 돌아가 Debug 드롭다운 -> Attach to Process를 선택할 수 있습니다. 팝업 창에서 프로세스 이름 ThirdPersonMPServer를 검색한 다음 Task Manager에서 확인된 적절한 프로세스 ID를 선택할 수 있습니다. 이 시점에서 게임 서버로 일반적인 디버깅을 수행할 수 있어야 합니다. 참고: Unreal은 서버를 빌드하는 여러 빌드 구성과 여러 방법을 제공합니다. 최상의 결과를 얻으려면 “Development Server” 구성을 사용하고 Visual Studio에서 직접 빌드된 출력을 사용하세요. Shipping 빌드 또는 Development Editor의 빌드는 다른 상황에 대해 더 잘 작동할 수 있지만, Visual Studio에서 직접 빌드된 “Development Server” 구성은 Visual Studio에서 연결하고 디버깅하기가 더 쉽습니다.

문제 해결

Task Manager에 ThirdPersonMPServer 인스턴스가 여러 개

여러 인스턴스가 나열되어 있는 경우(일반적으로 3개 이상), Task Manager를 사용하여 이전 시도에서 남은 인스턴스를 강제로 닫아야 할 수 있습니다.

LocalMultiplayerAgent가 ThirdPersonMPServer 인스턴스 두 개를 시작

LocalMultiplayerAgent가 여러 인스턴스를 _시작_하는 경우 상대적으로 메모리 사용량이 많은 프로세스 ID를 찾아보세요. 게임 서버의 일부 구성은 쌍으로 실행되는 두 개의 실행 파일을 생성합니다. 메모리 사용량이 높은 것에 연결해야 합니다.

다음 단계

이제 서버를 클라우드에 배포할 준비가 되었습니다. 또는 기본 Unreal GSDK 플러그인 가이드로 돌아갈 수 있습니다.
마지막 수정일 2026년 8월 25일