
NetWork여러 명이 진행하는 멀티플레이를 제작하기 위해서는 네트워크 환경이 필요하다. 네트워크는 어떻게 구축되는지, 사용되는 툴과 Unity에서 활용하는 방법까지 알아보자.
컴퓨터 네트워크는 둘 이상의 컴퓨터와 이들의 연결, 해당 연결을 통한 데이터의 통신을 통칭한다. 연결 방식이나 연결 대수와는 상관없이 연결만 된다면 이 환경을 네트워크 환경이라고 부른다.
Network Topology네트워크가 연결, 배치되어있는 형태를 의미한다. 연결 방식에 따라 데이터의 흐름, 전송 속도 등이 상이하며 상황에 따라 적합한 토폴로지를 적용시켜야할 필요가 있다. 한 서버가 마비되었을 때 다른 연결의 차단 여부 또한 토폴로지를 통해 정할 수 있다.

네트워크의 과정을 구분하기 쉽도록 개념적으로 나눠놓은 프레임워크로 OSI 7계층, TCP/IP 4계층이 존재한다.
OSI 7계층계층 별로 특정 기능을 담당하며 복잡한 네트워크 구조를 단계로 나누어 문제해결을 용이하게 하며, 하드웨어/소프트웨어 간 호환성을 보장해준다.

Physical Layer
컴퓨터와 물리적으로 연결되는 장비들이 속하는 단계로 케이블, 모뎀, 허브 등이 여기에 속한다.
Data-Link Layer
동일한 네트워크 내에서 발생하는 컴퓨터들 간의 통신을 담당하며, 물리 계층에서 받은 데이터를 분할한 패킷(프레임)에 고유한 식별자(MAC 주소)를 부여하는 단계이다.
Network Layer
다른 네트워크로의 통신을 담당하며, 다른 네트워크로 도달하기 위한 주소(IP 주소)를 정의한다.
Transport Layer
본격적인 데이터 전송을 담당하며, 신뢰성 있는 데이터 전송을 위해 오류검사/복구/흐름 제어 등의 기능을 제공한다.
Session Layer
통신의 시작, 종료 및 관리 절차 등을 정의하는 계층으로 해당 단계 이상에서 송수신하는 데이터의 단위를 메세지라고 칭한다.
Presentation Layer
데이터의 형식을 다루는 계층으로 데이터의 인코딩/디코딩/압축/암호화를 위한 소프트웨어가 사용된다. Unity에서 데이터 암호화, 압축 라이브러리 기술이 적용되는 계층이다.
Application Layer
웹 브라우저, 메신저, 파일 전송 프로그램 등 일상에서 사용하는 다양한 어플리케이션에서 최종적으로 데이터를 송/수신하게 되는 단계로 통신 프로그램간의 인터페이스를 제공한다. Application → HTTP 요청/응답과 Photon API를 적용하는 계층이다.
TCP/IP 4계층OSI 7계층 모델이 이론을 위한 모델이라면 TCP/IP 4 계층은 실제 네트워크 설계 및 구현에 많이 사용된다. 두 모델의 계층들이 서로 대응되며, 각 모델의 목적에 따라 사용할 수 있어야한다.
Packet네트워크 내에서의 데이터 전송은 두 모델의 계층을 통해 이루어진다. 이때 전송하는 데이터를 일정한 크기로 나눈 것을 패킷이라고 하며, 데이터 전송을 패킷을 전송하고, 받은 패킷을 조립하여 데이터로 표현하는 과정으로 나타낼 수 있다.
Unity에서는 PhotonView 또는 networkTransform 등을 통해 패킷을 주고 받는다.
인터넷에서 특정 장치를 식별하기 위한 주소로 IPv4/IPv6로 구성된다. 전송될 데이터의 경로 지정 용도로 사용되며 서브넷 마스크를 이용해 구분한다.
DNS(Domain Name System)도메인은 인터넷에서 사람이 웹사이트를 찾기 위한 주소이며, 컴퓨터가 웹사이트로 접속하기 위해 도메인을 IP주소로 변경하는 시스템이 DNS이다.
TCP(Transmission Control Protocol)연결 지향 프로토콜의 TCP는 3-Way Handshake를 통한 연결로 데이터가 전송 과정에서 유실되면 재전송 및 흐름 제어로 데이터 유실을 방지한다. 패킷 번호 관리로 순서를 보장하며 웹, 파일전송, 로그인 등의 정확한 전송이 필요할 때 적합하다.
UDP(User Datagram Protocol)비연결 지향 프로토콜의 UDP는 연결 설정 없이 빠른 전송을 초점을 맞추기 때문에 데이터가 유실되어도 재전송하지 않으나 그만큼 실시간으로 빠르게 데이터를 송수신한다. 영상 스트리밍, 게임 내의 실시간 데이터 동기화에 적합하다.
게임 서버는 서버-클라이언트 역할 지정에 따라 나누어진다. 호스트는 게임 내 전반적인 동기화 및 데이터 관리에 관여하며 어떤 데이터를 동기화하느냐에 따라 서버의 모델을 지정해야한다.
클라우드 기반으로 AWS EC2, PlayFab, Photon Fusion Dedicated Mode등과도 연동이 가능하다.
Unity 사용 예시 : Netcode for GameObjects + Decicated Build(Unity에서 서버 전용으로 빌드된 애플리케이션)
Unity 사용 예시 : Unity LAN 게임
Unity 사용 예시 : UNET, Mirror 기반 커스텀 구현
Unity 내 네트워크 구성 흐름매치 메이킹 → 룸 입장 → 객체 생성 → RPC → 데이터 동기화
Photon Unity Networking(Pun2)Photon에서 출시한 멀티 플레이어 게임용 유니티 패키지. 유니티를 기반으로 멀티 플레이 구현을 위한 여러 기능이 제공되며 매치 메이킹 기반으로 설계되었다.
PhotonNetWork.Instantiate("Player", spawnPoint.position, Quaternion.identity);
TCP : Photon PUN의 RPC 전송은 기본적으로 TCP이다.
UDP : Fusion에서는 UDP 기반으로 빠른 실시간 전송에 사용된다.