[Unity] Network

Lingtea_luv·2025년 7월 10일
0

Unity

목록 보기
28/30
post-thumbnail

NetWork


여러 명이 진행하는 멀티플레이를 제작하기 위해서는 네트워크 환경이 필요하다. 네트워크는 어떻게 구축되는지, 사용되는 툴과 Unity에서 활용하는 방법까지 알아보자.

네트워크의 정의 및 구조

컴퓨터 네트워크는 둘 이상의 컴퓨터와 이들의 연결, 해당 연결을 통한 데이터의 통신을 통칭한다. 연결 방식이나 연결 대수와는 상관없이 연결만 된다면 이 환경을 네트워크 환경이라고 부른다.

네트워크 구성 요소

  • 호스트 : 종단장치, 네트워크를 이용하는 주체(PC, Mobile)
  • 네트워크 인터페이스 : 어떤 식으로 연결되어있는지, 연결 방식(LAN, WiFi)
  • 스위치, 라우터 : 네트워크 공유기
  • 게이트 웨이 : 서로 다른 프로토콜(IPv4 ↔ IPv6)을 변환하여 연결
  • 방화벽 : 허가되지 않는 네트워크의 진입을 확인(DDoS 방어, 포트 접근 제한 등)
  • 서버 : 데이터의 처리 및 분배의 역할

Network Topology

네트워크가 연결, 배치되어있는 형태를 의미한다. 연결 방식에 따라 데이터의 흐름, 전송 속도 등이 상이하며 상황에 따라 적합한 토폴로지를 적용시켜야할 필요가 있다. 한 서버가 마비되었을 때 다른 연결의 차단 여부 또한 토폴로지를 통해 정할 수 있다.

  • Star : 중앙 제어 장치에 호스트를 직접 연결한 형태. 비용은 비싸지만 한쪽에 문제가 생겨도 다른 쪽에 문제가 생기지 않아 LAN에 많이 사용된다.
  • Bus : 중앙 회선을 통해 모든 장치가 데이터를 송수신하는 구조. 단순한 구조로 비용이 저렴하지만 중앙 회선에 문제가 생기면 전체가 중단되거나, 각 장치의 데이터가 충돌될 가능성이 있다.
  • Ring : 원형으로 배치되어 있는 형태. 순차적으로 데이터가 전달되며 한쪽에 문제가 생기면 다른 쪽에도 문제가 생긴다. 게임에서는 Bus/Ring가 거의 사용되지 않아 이론적 구조로 참고된다.
  • Tree : 수직 계층형 네트워크 형태. 하나의 루트 장치에서 여러 네트워크로 분리되어 계층별 관리가 용이하지만 설계가 복잡하고 루트 장치 에러의 취약하다.
  • Mesh : 모든 장치가 서로 연결된 형태. 빠르고 안정적이지만 연결 수가 많은 만큼 비용이 크기에 상황에 따라 부분적으로만 연결한다. P2P 방식의 게임에서 유사하게 작용한다.

네트워크 계층

네트워크의 과정을 구분하기 쉽도록 개념적으로 나눠놓은 프레임워크로 OSI 7계층, TCP/IP 4계층이 존재한다.

  • OSI 7계층 : 국제 표준 기구에서 개발한 모델로, 네트워크 프로토콜 디자인과 통신을 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 계층은 실제 네트워크 설계 및 구현에 많이 사용된다. 두 모델의 계층들이 서로 대응되며, 각 모델의 목적에 따라 사용할 수 있어야한다.

  • Application Layer
    7계층의 Applicaion / Presentation / Session에 대응된다.
  • Transport Layer
    7계층의 Transport에 대응된다.
  • Internet Layer
    7계층의 Network에 대응된다.
  • Link Layer
    7계층의 Data-Link, Physical에 대응된다.

네트워크 전송 원리

Packet

네트워크 내에서의 데이터 전송은 두 모델의 계층을 통해 이루어진다. 이때 전송하는 데이터를 일정한 크기로 나눈 것을 패킷이라고 하며, 데이터 전송을 패킷을 전송하고, 받은 패킷을 조립하여 데이터로 표현하는 과정으로 나타낼 수 있다.

Unity에서는 PhotonView 또는 networkTransform 등을 통해 패킷을 주고 받는다.

IP 주소

인터넷에서 특정 장치를 식별하기 위한 주소로 IPv4/IPv6로 구성된다. 전송될 데이터의 경로 지정 용도로 사용되며 서브넷 마스크를 이용해 구분한다.

도메인/DNS(Domain Name System)

도메인은 인터넷에서 사람이 웹사이트를 찾기 위한 주소이며, 컴퓨터가 웹사이트로 접속하기 위해 도메인을 IP주소로 변경하는 시스템이 DNS이다.

포트/프로토콜

  • 포트
    하나의 IP주소 내에서 여러 프로그램을 구분하기 위한 주소 번호. 한 컴퓨터에서 여러 프로그램이 동시에 인터넷을 사용할 수 있게 한다.
  • 프로토콜
    각기 다른 장치나 시스템이 하나의 네트워크에서 데이터를 주고 받기 위한 통신 규약으로, 미리 정해진 프로토콜을 사용하여 정확하고 호환 가능한 통신이 가능하다.

TCP(Transmission Control Protocol)

연결 지향 프로토콜의 TCP는 3-Way Handshake를 통한 연결로 데이터가 전송 과정에서 유실되면 재전송 및 흐름 제어로 데이터 유실을 방지한다. 패킷 번호 관리로 순서를 보장하며 웹, 파일전송, 로그인 등의 정확한 전송이 필요할 때 적합하다.

UDP(User Datagram Protocol)

비연결 지향 프로토콜의 UDP는 연결 설정 없이 빠른 전송을 초점을 맞추기 때문에 데이터가 유실되어도 재전송하지 않으나 그만큼 실시간으로 빠르게 데이터를 송수신한다. 영상 스트리밍, 게임 내의 실시간 데이터 동기화에 적합하다.

게임 네트워크 프로그래밍

게임 서버는 서버-클라이언트 역할 지정에 따라 나누어진다. 호스트는 게임 내 전반적인 동기화 및 데이터 관리에 관여하며 어떤 데이터를 동기화하느냐에 따라 서버의 모델을 지정해야한다.

  • Dedicated Server(전용 서버)
    게임 네트워킹에 전용 호스팅 서버가 사용되는 모델로 다른 모델에 비해 안정적이고, 모든 판정을 서버에서 담당하여 공정하다. 서버를 구축할 필요성이 있고 운영 비용이 크게 발생한다.

클라우드 기반으로 AWS EC2, PlayFab, Photon Fusion Dedicated Mode등과도 연동이 가능하다.

Unity 사용 예시 : Netcode for GameObjects + Decicated Build(Unity에서 서버 전용으로 빌드된 애플리케이션)

  • Listen Server
    한 유저가 서버의 역할을 수행하며 클라이언트의 역할도 한다. 구현 시 테스트에 용이하며 구현도 간단하다. 서버의 역할을 하는 호스트가 나가면 게임이 진행되지 않으며, 판정을 호스트 유저의 컴퓨터에서 진행하므로 공정하지 않을 수 있다.

Unity 사용 예시 : Unity LAN 게임

  • Peer to Peer(P2P) Server
    플레이어 간 직접 네트워크를 연결하여, 모든 플레이어가 서버와 클라이언트의 역할을 병행한다. 구조가 간단하여 구현이 쉽고, 서버 비용이 들지않지만 연결점이 많아 보안에 취약하며, 연결된 클라이언트 간의 성능이 다르면 동기화가 어렵다.

Unity 사용 예시 : UNET, Mirror 기반 커스텀 구현

게임 네트워크의 특징

  • 실시간성 : Tick 기반 동기화, Update/FixedUpdate 활용
  • 데이터 동기화 : NetworkTransform, RPC, State Synchronization
  • 불안정한 네트워크 상태 대응
  • 보안 이슈 : Cheat, Packet 조작 방지, 암호화
  • 플랫폼 간 호환성

Unity 내 네트워크 구성 흐름

매치 메이킹 → 룸 입장 → 객체 생성 → RPC → 데이터 동기화

Photon Unity Networking(Pun2)

Photon에서 출시한 멀티 플레이어 게임용 유니티 패키지. 유니티를 기반으로 멀티 플레이 구현을 위한 여러 기능이 제공되며 매치 메이킹 기반으로 설계되었다.

PhotonNetWork.Instantiate("Player", spawnPoint.position, Quaternion.identity);

TCP : Photon PUN의 RPC 전송은 기본적으로 TCP이다.
UDP : Fusion에서는 UDP 기반으로 빠른 실시간 전송에 사용된다.

profile
뚠뚠뚠뚠

0개의 댓글