> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 게임 서버를 디버깅하기 위해 직접 연결

> RDP 또는 SSH를 통해 PlayFab 멀티플레이어 서버 VM에 직접 연결하여 Windows 및 Linux에서 게임 서버 상태를 디버깅하고, 프로파일러를 연결하거나, 실시간 로그를 볼 수 있습니다.

PlayFab Multiplayer Servers 문제 해결의 경우 먼저 [LocalMultiplayerAgent](https://github.com/PlayFab/LocalMultiplayerAgent)로 시작해야 하지만, 직접 연결해야 할 상황이 있을 수 있습니다. 예를 들어:

* **환경 차이:** 게임 서버의 동작이 로컬 환경과 라이브 서비스 사이에서 다를 수 있습니다.
* **서버 상태:** 서버가 비정상으로 플래그가 지정되었는지 조사하기 위해 직접 연결해야 할 수 있습니다.
* **프로파일러/디버거 직접 연결:** 직접 연결을 통해 코드를 프로파일링하는 것이 더 간단할 수 있습니다.
* **실시간 로그 분석:** [멀티플레이어 서버 로그 아카이빙 및 검색](/services/playfab/multiplayer/servers/archiving-and-retrieving-multiplayer-server-logs)의 지침을 따르면 서버가 종료될 때 로그를 받을 수 있습니다. 실시간 로그를 보려면 직접 연결하는 것이 좋습니다.

게임 서버를 호스팅하는 VM(Windows 또는 Linux)에 연결하려면 playfab.com 웹 애플리케이션의 "Connect" 버튼을 사용하여 원격 데스크톱(RDP)/SSH 자격 증명을 얻을 수 있습니다. Multiplayer Build의 "Virtual Machines" 페이지에서 이 버튼을 볼 수 있습니다. [CreateRemoteUser](https://learn.microsoft.com/en-us/rest/api/playfab/multiplayer/multiplayer-server/create-remote-user) API 호출에서도 자격 증명을 얻을 수 있습니다.

VM에 연결하는 즉시 운영 체제 콘솔을 사용하여 게임 서버를 모니터링할 수 있습니다. MPS 서비스는 Docker 컨테이너를 사용하여 게임 서버 프로세스를 스핀업합니다. Docker CLI 명령을 실행하려면 Windows에서는 관리자 PowerShell이 필요하고 Linux에서는 \_\_sudo su -\_\_가 필요합니다.

<Info>
  이는 고급 Docker 컨테이너 디버깅 지침입니다. 이러한 지침을 사용하면 게임 서버가 손상될 수 있습니다. 프로덕션 게임 서버를 실행하는 컨테이너에서 이러한 명령을 사용하는 것은 권장하지 않습니다. 컨테이너를 디버깅하는 동안 보는 동작이나 정보에 의존하지 않도록 강력히 권고합니다. 공개적으로 문서화된 API와 동작만 지원되며, 기타 사항은 예고 없이 변경될 수 있습니다.
</Info>

## Windows와 Linux 모두를 위한 지침

#### Docker 컨테이너를 시작하려면 어떻게 해야 하나요?

Linux 또는 Windows에서 개발하는지 여부와 상관없이 Docker 컨테이너의 기본 사항에 익숙해져야 합니다.

docker "Get Started" 가이드는 [여기(외부 링크)](https://docs.docker.com/get-started/)에서 볼 수 있습니다. Windows 컨테이너에 대한 자세한 내용은 [Windows and containers](https://learn.microsoft.com/en-us/virtualization/windowscontainers/about/)를 참조하세요.

#### VM에 RDP/SSH로 들어간 후 Docker 컨테이너에서 실행 중인 게임 서버 목록을 어떻게 볼 수 있나요?

\_\_docker ps\_\_를 사용합니다. 컨테이너 이름 및 해시와 VM 포트에서 Docker 컨테이너 포트로의 포트 매핑을 볼 수 있습니다.

#### 게임 서버에서 사용하는 포트를 어떻게 볼 수 있나요?

이 정보는 \_\_docker ps\_\_에 나열됩니다.

```
980d7e80457265230a0bf   "/bin/sh -c ./cppLin…"   About a minute ago   Up About a minute   0.0.0.0:30000->3600/tcp, 0.0.0.0:30001->3601/udp  great_archimedes
```

* `0.0.0.0:30000->3600/tcp`는 VM의 포트 30000이 TCP용 컨테이너의 3600에 매핑됨을 나타냅니다.
* `0.0.0.0:30001->3601/udp`는 VM의 포트 30001이 UDP용 컨테이너의 3601에 매핑됨을 나타냅니다.

자세한 내용은 [Docker networking](https://docs.docker.com/network/)을 참조하세요.

<Note>
  Windows와 Linux 모두에서 Docker 컨테이너는 "playfab" Docker 네트워크의 일부입니다. PlayFab 네트워크에 대한 정보를 보려면 `docker inspect network playfab`을 사용하세요.
</Note>

#### 컨테이너의 런타임 세부 정보를 어떻게 볼 수 있나요?

docker ps를 실행하여 컨테이너 이름을 가져온 후 \_\_docker inspect \<ContainerName>\_\_을 실행할 수 있습니다. 컨테이너 상태, 호스트 VM의 볼륨 바인딩, 포트 바인딩, 컨테이너에 전달된 환경 변수 등 많은 정보를 볼 수 있습니다.

#### 게임 서버의 로그를 어떻게 얻을 수 있나요?

**docker logs \<nameOrHash>** 명령을 사용할 수 있습니다. 이 로그에는 앱이 표준 출력/표준 오류 스트림으로 보내는 모든 내용이 포함됩니다. 이 로그는 기존 컨테이너에만 존재한다는 점을 명심하세요. 게임 서버가 크래시되면 VM의 모니터링 프로세스가 컨테이너를 삭제하고 새 컨테이너를 만듭니다.

게임 서버 내에서 로깅하려면 GSDK를 사용하는 것이 더 나은 방법입니다. 자세한 내용은 [GSDK를 사용한 로깅](/services/playfab/multiplayer/servers/integrating-game-servers-with-gsdk#logging-with-the-gsdk)과 종료된 게임 서버의 로그에 액세스하는 방법에 대한 [멀티플레이어 서버 로그 아카이빙 및 검색](/services/playfab/multiplayer/servers/archiving-and-retrieving-multiplayer-server-logs)을 참조하세요.

### 실행 중인 컨테이너 "내부"에 연결하여 무슨 일이 일어나는지 확인할 수 있나요?

Windows에서는 docker exec -it \<nameOrHash> PowerShell을, Linux에서는 docker exec -it \<nameOrHash> bash를 실행할 수 있습니다. 여기서 컨테이너의 명령줄 프로세스에 액세스하여 문제를 디버깅/진단하기 위한 네이티브 명령을 실행할 수 있습니다.

이 명령이 Linux에서 작동하려면 기본 컨테이너에 Bash 셸이 설치되어 있어야 합니다. 그렇지 않은 경우 \_\_docker exec -it \<nameOrHash> sh\_\_를 실행하여 Bourne 셸을 사용할 수 있습니다.

#### 컨테이너에서 열려 있는 포트를 어떻게 볼 수 있나요?

컨테이너 "내부"에 연결되면 컨테이너 내부에 명령줄 프로세스가 있을 때 Windows에서는 **netstat -ano**, Linux에서는 \_\_netstat -tulpn\_\_을 사용할 수 있습니다(이전 지침 참조).

이 명령이 Linux에서 작동하지 않는 경우 \_\_apt update && apt install net-tools\_\_로 netstat을 설치해 보세요. Linux에서는 VM 내부에서 \_\_nestatst -tulpn\_\_을 사용하여 실제로 포트가 열려 있는지 확인할 수 있습니다. VM 포트가 컨테이너 포트와 다르다는 점을 기억하세요. 컨테이너에 대한 이 포트 매핑은 \_\_docker ps\_\_로 볼 수 있습니다.

## Linux 관련 지침

#### 컨테이너에 대한 진단 정보를 어떻게 볼 수 있나요?

\_\_apt install procps\_\_를 설치한 다음 다음을 실행할 수 있습니다.

* 현재 실행 중인 프로세스에 대해서는 **ps -aux**(컨테이너의 메인 프로세스가 PID 1을 갖는지 확인. 이 프로세스가 종료되면 컨테이너도 사라집니다.)
* 실시간 프로세스 정보에 대해서는 **top**

#### TCP 및 UDP 패킷을 어떻게 모니터링할 수 있나요?

* [TCPdump(외부 링크)](https://www.tcpdump.org/) 유틸리티와 같은 도구 사용을 고려하세요.
* 설치하려면 \_\_apt update && apt install tcpdump\_\_를 실행하세요. 특정 포트에 사용하려면 TCP의 경우 \_\_tcpdump port 7777\_\_을, UDP의 경우 \_\_tcpdump udp port 7778\_\_을 실행하세요.

tcpdump는 VM 내부와 컨테이너 내부 모두에서 사용할 수 있습니다. 그러나 VM 포트와 컨테이너 포트 사이에 포트 매핑이 있으므로 올바른 포트 값을 모니터링하는지 확인하세요.

## Windows 관련 지침

#### 자산 패키지에 있어야 하는 필수 DLL을 어떻게 확인할 수 있나요?

지침은 [필요한 DLL 확인](/services/playfab/multiplayer/servers/determining-required-dlls)을 참조하세요. 이 문서는 하나 이상의 DLL이 누락되어 게임 서버가 시작되지 않는 경우에도 유용합니다.

#### LocalMultiplayerAgent가 크래시되고 오류 메시지 없이 Docker 컨테이너를 다시 시작합니다. 도와주세요!

크래시가 발생하면 `Container [ContainerId] exited with exit code 1`과 유사한 출력이 표시됩니다. 예:

```
info: PlayfabMultiplayerAgent[0]
      Waiting for heartbeats from the game server.....
info: PlayfabMultiplayerAgent[0]
      Container 4179fa451214251a45d1a8e8338203a9ff05dc6ec1231c50e1f81f5508b3e1c8 exited with exit code 1.
info: PlayfabMultiplayerAgent[0]
      Collecting logs for container 4179fa451214251a45d1a8e8338203a9ff05dc6ec1231c50e1f81f5508b3e1c8.
info: PlayfabMultiplayerAgent[0]
      Copying log file C:\ProgramData\Docker\containers\4179fa451214251a45d1a8e8338203a9ff05dc6ec1231c50e1f81f5508b3e1c8\4179fa451214251a45d1a8e8338203a9ff05dc6ec1231c50e1f81f5508b3e1c8-json.log for container 4179fa451214251a45d1a8e8338203a9ff05dc6ec1231c50e1f81f5508b3e1c8 to D:\playfab\PlayFabVmAgentOutput\2020-09-29T01-42-01\GameLogs\032e7357-1956-4a60-9682-ca462cc3ea12\PF_ConsoleLogs.txt.
info: PlayfabMultiplayerAgent[0]
      Deleting container 4179fa451214251a45d1a8e8338203a9ff05dc6ec1231c50e1f81f5508b3e1c8.
```

**디버깅 단계**

* PF\_ConsoleLogs.txt에서 유용한 오류 메시지가 있는지 확인합니다.
* .zip 자산 패키지에 게임에 필요한 모든 DLL이 포함되어 있는지 확인합니다. 지침은 [필요한 DLL 확인](/services/playfab/multiplayer/servers/determining-required-dlls)을 참조하세요.
* Docker 오류에 대한 유용한 정보가 있는지 Windows 이벤트 로그를 확인합니다.

#### LocalMultiplayerAgent에서 하트비트를 받지 못하고 있습니다.

이전 시도에서 남은 컨테이너가 있을 수 있습니다. \_\_docker ps -a\_\_를 사용하여 모든 컨테이너를 확인하고 \_\_docker rm -f \<containerNameOrTag>\_\_를 사용하여 삭제할 수 있습니다.

#### Windows에서 TCP 및 UDP 패킷을 어떻게 모니터링할 수 있나요?

[Wireshark(외부 링크)](https://www.wireshark.org/) 유틸리티와 같은 도구 사용을 고려하세요.

#### Visual Studio를 사용하여 배포된 멀티플레이어 서버를 어떻게 디버깅할 수 있나요?

지침은 [Visual Studio를 사용하여 서버 디버깅](/services/playfab/multiplayer/servers/allocating-game-servers-and-configuring-vs-debugging-tools#debugging-a-deployed-multiplayer-server)을 참조하세요.

## 관련 항목

* [게임 서버 로컬 디버깅](/services/playfab/multiplayer/servers/locally-debugging-game-servers-and-integration-with-playfab)


## Related topics

- [게임 서버 할당 및 Visual Studio 디버거 연결](/ko/services/playfab/multiplayer/servers/allocating-game-servers-and-configuring-vs-debugging-tools.md)
- [GSDK 프로젝트 테스트 및 디버깅](/ko/services/playfab/multiplayer/servers/server-sdks/unreal-gsdk/third-person-mp-example-project-local-deployment-and-debugging.md)
- [게임 서버 로컬 디버깅 및 PlayFab과의 통합](/ko/services/playfab/multiplayer/servers/locally-debugging-game-servers-and-integration-with-playfab.md)
- [LocalMultiplayerAgent를 사용하여 프로세스 기반 게임 서버 디버깅](/ko/services/playfab/multiplayer/servers/LocalMultiplayerAgent/run-process-based-gameserver.md)
- [Visual Studio에서 원격 Windows 디바이스의 PC 프로젝트 디버깅하기](/ko/tools/tools-pc/visualstudio/gr-vs-debugging-with-visualstudio-remote-windows.md)
