언리얼 인사이트에 포함된 네트워킹 인사이트(Networking Insights) 를 통해 네트워크 트래픽을 분석하고 최적화하고 디버깅할 수 있습니다. 사용자는 트레이스 정보를 기록하고 다음과 같은 기능으로 네트워크 행동을 시각화할 수 있습니다:
- 네트워크 세션이 기록되는 동안 볼 수 있는 머신을 표시하는 게임 인스턴스 제어
- 발신/수신 데이터를 시각화하는 연결 모드 제어
- 게임 도중에 전송 또는 수신되는 패킷 타임라인 및 크기를 표시하는 패킷 개요(Packet Overview) 패널
- 리플리케이트된 오브젝트, 프로퍼티, 원격 함수 호출 등의 패킷 콘텐츠를 보여주는 패킷 콘텐츠(Packet Content) 패널
- 제외 또는 포함 패킷의 총/최대/평균 크기에 대한 통계 등, 선택한 패킷의 트레이스 이벤트를 표시하는 넷 통계(Net Stats) 패널
구성
계속하기 전에 언리얼 인사이트를 실행 중인지 확인하세요.
네트워킹 인사이트 사용하기
데이터를 분석하려면 다음 명령줄 옵션을 사용하여 프로젝트 인스턴스를 시작합니다.
-NetTrace=[VerbosityLevel] -trace=net
VerbosityLevel 은 0보다 큰 값으로 설정해야 합니다. 예를 들어 게임 인스턴스가 -NetTrace=1 로 시작하는 경우 언리얼 인사이트는 그 안에서 해당 세션을 연 다음, 분석할 네트워크 트레이스 데이터를 수집하고 보고합니다.
에디터는 트레이스 데이터를 처리하는 자체 데이터 저장소를 실행합니다. 즉, 에디터에서 실행 중에 네트워크 트레이스 데이터를 수집하려면 트레이스호스트를 지정해야 합니다. 트레이스호스트를 지정하려면 다음을 사용합니다. -NetTrace=1 -tracehost=localhost -trace=net
UE_NET_TRACE_PACKET_STATSCOUNTER 및 UE_NET_TRACE_FRAME_STATSCOUNTER 매크로를 사용하여 네트워크 트레이스 데이터와 관련된 간단한 통계를 트레이스할 수 있습니다. 이러한 매크로를 통해 트레이스된 데이터는 넷 통계 카운터(NetStatsCounters) 탭에 표시됩니다.
네트워킹 인사이트 창
네트워킹 인사이트 창에서 네트워킹 세션 데이터를 볼 수 있습니다.
추가적인 명령과 팁, 다른 언리얼 인사이트 창에 대한 정보는 레퍼런스 문서를 참조하세요.
네트워킹 인사이트 창에는 연결 선택(Connection Selection) 패널(1), 패킷 개요(Packet Overview) 패널(2), 패킷 콘텐츠(Packet Content) 패널(3)과 넷 통계(Net Stats) 패널(4)이 있습니다.
패킷 개요 패널
패킷 개요 패널에는 수신 또는 전송된 모든 패킷의 크기(비트)를 보여주는 막대그래프가 표시됩니다. 이는 추가적인 조사가 필요한 대량 패킷을 식별하는 데 유용합니다. 막대를 좌클릭하여 패킷을 선택합니다.
각 패킷의 보고 크기는 압축 전 크기이므로 실제 데이터를 전송할 때에는 보고 크기보다 더 작아질 수 있습니다.
패킷 위에 마우스를 올리면 해당 정보가 표시됩니다. 여기에는 다음과 같은 정보가 포함됩니다.
- 패킷 인덱스(Packet Index)
- 시퀀스 번호(Sequence Number)
- 비트 단위의 콘텐츠 크기(Content Size)
- 사용되지 않는 비트를 포함한, 바이트 단위의 총 크기(Total Size)
- 패킷을 전송하거나 수신한 시점의 타임스탬프(Timestamp)
- 패킷의 현재 상태(Status) - 전달됨(Delivered) 또는 전달 안 됨(Undelivered)
- 패킷을 수신한 연결 상태(Connection State)
- 패킷을 전송하거나 수신한 시점의 엔진 프레임 번호(Engine Frame Number)
드롭된 패킷은 빨간색으로 표시됩니다. 여러 개의 패킷을 선택하려면 초기 패킷을 클릭하여 선택한 다음, Shift 키를 누른 상태에서 다른 패킷을 클릭합니다. 패킷 뷰에서 이벤트를 하이라이트할 수 있습니다. 그러면 특정 이벤트가 패킷에서 얼마나 많은 비트를 사용하는지 쉽게 확인할 수 있습니다. 이를 통해 어떤 이벤트가 다른 데이터와 비교하여 대역폭을 얼마나 사용하는지 빠르게 파악할 수 있습니다.
다음 중 하나를 선택해 하이라이트할 수 있습니다. +이벤트의 모든 인스턴스에 대해 집계된 비트 수 또는 +단일 이벤트가 사용하는 최대 비트 수
패킷 콘텐츠 패널
패킷 콘텐츠 패널에는 현재 선택된 패킷의 실제 콘텐츠가 표시됩니다. 패킷의 콘텐츠는 계층적 이벤트 그래프로 표시되며, 왼쪽에 0비트가 표시된 상태로 시작됩니다. 이는 각 패킷의 데이터 콘텐츠를 프로퍼티 레벨까지 조사하는 주요 툴입니다.
패킷에 포함된 데이터 번치(bunch)를 표시하는 패킷 콘텐츠 패널입니다. 여기에는 리플리케이트된 오브젝트 및 프로퍼티에 대한 정보가 포함됩니다.
첫 번째 레벨에는 패킷에 포함된 번치가 포함됩니다. 각 번치는 번치가 속한 채널에 맞춰 이름이 정해집니다. 번치를 보고할 때, 보고한 번치에 디버그 이름이 설정되어 있으면 해당하는 경우 추가적인 컨텍스트 제공을 위해 채널 이름(channelname) 대신 디버그 이름(debugname) 이 사용됩니다.
두 번째 레벨에는 보통 번치에 포함된 리플리케이트된 오브젝트가 표시됩니다. 이벤트에 NetId(NetGUID)가 할당된 경우 해당 ID도 표시됩니다.
이벤트 계층구조 밑으로 내려가면 작성한 비트 수가 포함된 리플리케이트된 프로퍼티가 표시됩니다.
이벤트 위에 마우스를 올리면 모든 이벤트 정보가 표시됩니다.
패널에는 패킷을 찾거나 특정 NetId에 속한 이벤트를 찾는 컨트롤이 있습니다.
키보드를 사용하여 패킷 콘텐츠 패널과 패킷 개요 패널을 탐색할 수 있습니다. 위, 아래 화살표 키를 사용하면 레벨 사이를 이동합니다. 왼쪽, 오른쪽 화살표 키를 사용하면 같은 레벨의 이벤트 사이를 이동합니다. CTRL 또는 CMD 키를 누른 상태로 왼쪽 또는 오른쪽 화살표 키를 누르면 패킷 사이를 이동합니다.
연결 선택 패널
패킷 개요 패널 상단에는 표시할 데이터를 사용자가 선택할 수 있는 컨트롤이 있습니다.
패킷 개요 패널의 상단에 있는 연결 드롭다운 목록입니다. 이 예시에서는 서버 게임 인스턴스에서 Player 0의 연결과 수신 데이터가 선택된 것을 볼 수 있습니다.
연결 선택 패널에서는 세 개의 드롭다운 목록을 사용할 수 있습니다.
| 드롭다운 목록 | 설명 |
|---|---|
| 게임 인스턴스(Game Instance) | 레코딩 세션 중에 관찰된 각각의 고유한 NetDriver에 생성된 게임 인스턴스를 표시합니다. 예를 들어 PIE를 사용할 때는 서버와 각 클라이언트에 별도의 인스턴스가 있습니다. |
| 연결(Connection) | 특정 연결을 선택하는 드롭다운으로, 선택된 게임 인스턴스의 세션 중에 관찰된 모든 연결을 표시합니다. |
| 연결 모드(Connection Mode) | 이 드롭다운은 수신/발신 데이터의 시각화 여부를 제어합니다. |
넷 통계 패널
넷 통계 패널에는 패킷 개요 패널에서 선택한 패킷 범위의 모든 트레이스 이벤트가 나열됩니다.
레벨을 기준으로 그룹화된 이벤트가 나열된 넷 통계 패널
선택한 범위에 따라 데이터를 집계하는 방식 외에, 활성 열에 있는 값의 오름차순/내림차순으로 목록을 정렬할 수도 있습니다. 목록의 아무 곳이나 우클릭하여 정렬 순서를 변경하거나 열을 활성화 또는 비활성화할 수 있습니다. 다음과 같은 열이 제공됩니다.
- 타입
- 레벨
- 인스턴스 수
- 총 포함 크기(비트)
- 최대 포함 크기(비트)
- 총 제외 크기
- 최대 제외 크기
이벤트에 이름 필터를 적용하려면 '넷 이벤트 또는 그룹 검색(search net events or groups)' 필드를 사용합니다. 사용자는 다음과 같은 이벤트 타입에 따라 이벤트를 그룹화할 수 있습니다.
| 그룹 이름 | 설명 |
|---|---|
| 레벨(Level) | 각 레벨에 대해 하나의 그룹을 생성합니다. |
| 플랫(Flat) | 단일 그룹을 생성합니다. 모든 넷 이벤트를 포함합니다. |
| 이름(Name) | 하나의 문자에 대해 하나의 그룹을 생성합니다. |
레벨로 그룹화하면 같은 이름이 여러 레벨에 나타나므로 사용자가 데이터를 이해하기가 더욱 쉬워집니다. 다음 테이블에 이러한 레벨에 대해 설명되어 있습니다.
| 레벨 | 설명 | |
|---|---|---|
| 0 | 일반적으로 채널 이름으로 모든 번치를 표시하는 채널 정보입니다. | |
| 1 | 리플리케이트된 오브젝트(액터)로, 이 레벨에서 대부분의 이벤트는 시리얼라이즈된 오브젝트를 표시합니다. | |
| 2 | 프로퍼티 리플리케이션에서 또는 RPC에서 시작된 이벤트를 보고합니다. | |
| 3 | 프로퍼티가 시리얼라이즈될 때 이벤트를 보고합니다. | |
| 4 | 프로퍼티, 배열 콘텐츠 등이 시리얼라이즈될 때 추가적인 이벤트를 보고합니다. |
넷 통계 패널에는 선택 범위에 데이터가 없는 이벤트 타입을 필터로 걸러내는 !0 토글이 있습니다.
넷 통계 카운터
넷 통계 카운터(NetStatsCounters) 탭에서는 선택한 패킷 또는 패킷 범위에 대해 리플리케이션 시스템에 관련된 통계 카운터를 확인할 수 있습니다.
다음과 같은 두 가지 통계 카테고리가 있습니다.
-
프레임 통계(FrameStats): 전체 프레임에 대한 통계 카운터입니다. 일반적으로 모든 연결 간에 공유되는 작업에 대한 네트워킹 관련 통계 카운터를 보고하는 데 사용됩니다. 예를 들면, 이 프레임에서 현재 업데이트되고 있는 오브젝트 수 등이 있습니다.
-
패킷 통계(PacketStats): 각 특정 패킷 관련 통계 카운터입니다. 예를 들면, 시리얼라이즈되도록 예약된 오브젝트 수와 실제로 패킷에 포함된 오브젝트 수 등이 있습니다.
예시 데이터
네트워크 패킷 콘텐츠 트레이싱 매크로에 대한 내용은 언리얼 인사이트 레퍼런스에서 확인할 수 있습니다.
네트워킹 인사이트가 시각화하는 데이터를 더 잘 이해할 수 있도록 다음 예시를 살펴보겠습니다.
리플리케이트된 오브젝트
새 액터인 ReplicationGraphDebugActor, NetGUID 10의 초기 리플리케이션입니다.
번치에 새 액터가 포함되기 전엔, NetGUID를 비롯한, 새 액터에서 익스포트된 모든 레퍼런스를 포함하는 NetGUID 번치가 있습니다.
RPC
ClientAckGoodMove라는 이름의 이 RPC는 NetGUID가 14인 PlayerPawn_C를 타기팅합니다.
GUID를 매핑해야 합니다.
스플릿 번치
첫 번째 파트와 함께 스플릿 번치 보고 전송 시 생성되는 이벤트 데이터입니다. 스플릿 번치 수신 시에는 파트가 먼저 보고되고, 모든 파트가 수신되면 최종 파트와 함께 이벤트가 보고됩니다.
이는 스플릿 발신 번치입니다. 번치 안의 이벤트는 번치보다 큽니다.
다음 몇 개의 패킷은 다음과 같은 모습을 보입니다.
서브오브젝트(SubObject)
이는 서브오브젝트 예시입니다. 여기서 BotPawn_C 이후의 두 번째 액터는 같은 번치를 공유합니다.