unreal 5기

251119 언리얼엔진 본캠프 70일차 NetConnection

parkjinnam 2025. 11. 19. 20:31

NetConnection??

지난 시간에는 NetMode에 대해서 살펴보았다 그 설명을 하면서 자세하게 알기 위해서는 NetConnection과 NetDriver에 대해서 공부할 필요가 있다고도 했었다. 오늘은 NetConnection에 대해서 알아보고자 한다.

 

NetConnection이란 서버와 특정 클라이언트 사이를 연결하는 통신이라 할 수 있다. 예컨대 다른 PC와의 연결이 발생하면 그에 대응하는 UNetConnection 객체도 생성된다. 서버에 클라이언트가 접속하면 서버에는 ClientConnection 객체가 추가되며 반대로 클라이언트에는 ServerConnection 객체가 생성된다. 이렇게 되면 두 PC는 UNetConnection 객체를 통해서 통신하게 되며 나중에 설명할 UNetDriver가 이 UNetConnection 객체를 소유하고 관리하게 된다. 서버 PC에 생성된 UNetDriver는 접속한 클라이언트의 수만큼 UNetConnection을 관리한다. 클라이언트 PC에 생성된 UNetDriver는 SeverConnection 단 하나만을 관리한다.

 

서버니 클라이언트니 어디에 생성되고 어디에서 관리하고 복잡하다 하나하나 차례대로 살펴보도록 하자.

 

NecConnection의 주요 역할과 기능

UNetConnection은 단순히 데이터를 보내는 것 외에도 네트워크의 안정성을 위해 많은 일을 수행한다. 

 

1. 패킷 전송 및 수신

데이터를 비트 스트림으로 변환하여 소켓을 통해 실제로 전송한다. 반대로 들어오는 패킷을 받아 엔진이 이해할 수 있는 데이터로 변환한다.

 

2. 채널 관리

언리얼은 데이터를 효율적으로 관리하기 위해 채널이라는 개념을 사용하는데 UNecConnection은 여러 개의 채널을 소유하고 관리한다. 데이터가 들어오면 어느 채널인지 판단하고 분류해준다.

 

3. 흐름 제어

네트워크 대역폭이 꽉 차지 않도록 데이터 전송량을 조절한다. 너무 많은 데이터를 한 번에 보내면 패킷 유실이 발생하기 때문에 이를 관리한다.

 

4. 신뢰성 관리

중요한 데이터가 상대방에게 확실하게 도달했는지 확인하고 도달하지 못했다면 재전송 처리를 한다.

 

계층 구조

UNetDriver(전체적인 네트워크 시스템을 관장) -> UNetConnection(특정 목적지로 가는 연결) -> UChannel(개별적인 데이터 묶음)

 

주요 클래스

UNetConnection은 추상 클래스이며 실제로는 상황에 따라 다른 파생 클래스가 사용된다.

 

UIpConnection : 인터넷 프로토콜 기반의 연결로서 실제 온라인 게임에서 가장 많이 사용되는 클래스이다. UDP소켓을 사용하여 통신한다.

 

USimulatedClientNetConnection : 에디터에서 데디케이티드 서버 모드로 플레이할 때, 로컬 플레이어가 서버와 통신하는 것처럼 흉내 내는 가짜 연결이다. 실제 패킷을 보내지 않고 메모리상에서 바로 전달한다.

 

요약하자면 UNetConnection은 서버와 클라이언트 간의 1:1 통신 라인으로서 패킷전송, 흐름제어, 신뢰성 보장을 담당한다. PlayerController를 통해 접근해 핑이나 네트워크 상태를 모니터링할 수 있으며 실제 데이터는 하위 계층인 채널을 통해 이동하게 된다.