Product

ProudNet 가이드 페이지

  • 1. 검증된 성능과 안정성

    1. 검증된 성능과 안정성

    다양한 국가와 환경에서 검증된 성능과 안정성

    we

    • 13개국(한국, 중국, 일본, 미국, 홍콩, 싱가폴, 말레이시아, 독일, 네덜란드, 대만, 베트남, 이탈리아, 프랑스) 이상에서 ProudNet 기반 서버 작동 중
    • MMORPG, FPS, 액션게임, 스포츠, 레이싱 등 다양한 장르에서 도입
    • 레이븐 , 몬스터길들이기, 세븐나이츠 등의 모바일 게임 영역에서 사용
    • 마비노기 영웅전, 최강의 군단, S4리그, 거울전쟁, 클로저스 등 온라인 게임 영역에서 사용
    • 190개의 PC 온라인 게임과 모바일 게임, PlayStation 4 게임 개발에서 도입
    • 동시접속자 서버 머신 1개에 13,000명 수용
    • P2P direct P2P 유지율 (중국: 82%, 유럽: 80%, 동남아시아: 84%, 한국: 96%)
    • 중국 P2P direct and relayed P2P 유지율 100%
    • 스마트폰 4G 기기간 홀펀칭 성공율 56% (한국 기준)
    • MMORPG 극한 대규모 공성전에서 안정율 98% (서버: 상하이, 클라이언트: 쓰촨)

  • 2. 다양한 환경에서 개발 및 구동

    2. 다양한 환경에서 개발 및 구동

    다양한 플랫폼과 언어 지원

    ee1

    Server

    • C++, C#
    • Windows, Linux

    Client

    • C++, C#, Java
    • Windows, Linux, iOS, Android, PS 4
    • Unity, Cocos2d-x, Unreal Engine 4

  • 3. 고성능 서버

    3. 고성능 서버

    멀티코어를 최대한 활용하는 Thread Pool

    • 동시다발적으로 발생하는 각종 이벤트들을 Thread Pool을 사용하여 병렬적으로 처리합니다.
    • Thread Pool은 내부 네트워크용과 유저 콜백 2가지 용도로 나뉘어져 사용자의 실수로 인한 네트워크 병목을 방지 할 수 있습니다.
    • 원한다면 하나의 Thread Pool을 공용으로 쓰거나 아예 Thread Pool을 사용하지 않는 등 유연한 커스터마이징이 가능합니다.

    효율적인 I/O 전략 사용

    • 내부 연산에 비해 매우 느린 I/O 작업은 보다 신중하고 스마트하게 수행해야 합니다.
    • 멀티캐스팅을 할 때, 서버가 일일이 송신을 수행하지 않고 P2P 정보를 활용하여 라우팅을 시키는 것이 나은 경우가 있습니다. 메시징 시 이 기능을 사용하도록 선택 할 수 있습니다.
    • 캐릭터의 위치 정보와 같은 데이터는 ProudNet의 Unique ID 기능을 활성화하여 유효한 최신의 값만 보내게 합니다.

    그 외 각종 노력들

    • 최소한의 Kernel-User Mode 전환
      서버 운영체제에서 TCP, UDP 패킷 처리를 위해 kernel-user mode 전환이 발생합니다.
      이는 많은 처리 시간을 소모하면서 서버 성능을 떨어뜨립니다.
      ProudNet은 이를 최소화하였습니다.
    • 2가지 Thread Pool Mode
      게임 서버 개발자의 실수 또는 게임 로직의 구조적 문제 때문에 클라이언트의 접속 장애가 발생할 수 있습니다. ProudNet은 이러한 문제를 방지하기 위해 user routine과 network I / O routine을 서로 다른 thread pool에서 처리하는 기능을 제공합니다. 또한 이 기능을 끌 수 있는 옵션 또한 제공합니다.
    • 자유로운 Thread Pool 관계 구성
      분산 서버 구성에서 thread pool과 서버 인스턴스 간 관계를 일대다 구조로 만드는 것은 쉽지 않습니다. 하지만 이것은 효율적인 서버 성능을 위해 필요하며, 이것이 없을 경우 kernel time이 상승하면서 서버의 성능이 떨어질 수 있습니다. ProudNet은 thread pool과 서버 인스턴스 간 관계를 사용자가 원하는 대로 맺을 수 있도록 구성되어 있으며, 최소한의 kernel time을 유지하면서 고성능 게임 서버를 개발할 수 있게 해줍니다.

  • 4. 네트워크 환경에 적응하는 기능

    4. 네트워크 환경에 적응하는 기능

    네트워크 환경을 고려하여 동작

    • Coalesce
      똑같은 양의 메시지를 보내더라도 조금씩 여러 번 보내는 것 보다 주기적으로 모아둔 것을 한번에 보내고 여기에 Unique ID까지 적용한다면 네트워크 트래픽을 줄일 수 있습니다.
    • Fragmentation
      MTU를 고려하여 메시지를 분할하기도 합니다.
    • 혼잡제어
      과도한 UDP 통신은 망 내에 혼잡 상황을 야기하기도 합니다. ProudNet은 이를 방지하기 위해 UDP 혼잡제어 기능을 내장하고 있습니다.

    다양한 네트워크 악조건에 대한 내성을 지닌 환경 적응형 네트워크 프로토콜(adaptive network protocol)

    ee12

    ProudNet의 네트워크 프로토콜 계층이 깊음에도 불구하고 IP 패킷 헤더 사용량을 줄이는 기법으로 서버와 네트워크 처리 효율을 높이고 있습니다.

    • 안정적인 Unreliable 메시징 프로토콜
      게임에서의 캐릭터의 이동, 기관총 난사등과 같이 자주 보내고 동기화 속도가 중요한 메시지는 UDP를 사용하여 메시지를 Unreliable하게 보낼 수 있습니다. UDP를 socket API에서 쓰는 것은 쉽지만 TCP와 달리 프로토콜이 안정적이지 못해서 다양한 네트워크 환경에서 불안정하거나 해킹에 취약합니다.
      Unreliable : 네트워크 환경으로 인한 손실, 도착 순서를 보장하지 않는 방식이지만 전송 속도는 빠릅니다.
      Reliable : 손실이 일어나지 않음을 보장하며, 도착 순서를 보장하는 방식입니다.
      ProudNet의 unreliable 메시징 프로토콜은 단순 UDP보다 높은 안정성을 제공합니다.
    • 엔진 계층에서의 QoS 기능
      통신량이 많은 게임에서는 통신량 과다로 인해 연결 장애를 유발할 수 있습니다.
      ProudNet은 이 문제를 해결하기 위해 QoS(Quality of Service) 혹은 네트워크 스로틀링(Throttling) 기술을 내장 하고 있습니다. 특히 QoS기능은 게임 중 음성채팅에서 효과적으로 사용될 수 있습니다.

  • 5. WiFi 핸드오버

    5. WiFi 핸드오버

    WiFi 핸드오버

    3213

    ProudNet 내부에서 네트워크 감지 기능으로 새로운 네트워크 전환 시 빠르게 재 접속을 시도합니다.
    연결이 끊겨 있던 상태에서 보냈던 메시지들도 재 접속 되었을 때, 송신을 보장합니다.
    P2P 그룹 정보도 유지 되며, 서버에 재 접속이 완료 되면 자동으로 홀펀칭을 시도합니다.
    개발자는 잠깐 레이턴시가 길어졌다 생각하면 됩니다.

  • 6. P2P기능 #1

    6. P2P기능

    강력한 P2P 통신 기능

    • P2P를 잘 사용하면 서버의 부하를 줄이고 게임의 반응성을 높일 수 있습니다.
    • 하지만 안정적인 P2P를 직접 구현하는 것은 무척 어려운 일입니다. ProudNet은 사용하기 쉽고 강력한 P2P기능을 지원하고 있습니다.
    • ProudNet의 P2P 기능은 수많은 경험을 토대로 안정성 있게 동작합니다.
    • 서버 간 통신에도 P2P를 사용 할 수 있습니다.
    • 슈퍼피어를 선정하여 활용 할 수 있습니다.

    P2P 통신은 음성 채팅이나 플레이어 캐릭터 움직임 동기화를 위해 사용될 수 있습니다.
    P2P를 잘 활용하면 서버의 부하를 줄이고 반응성을 높이는 효과가 얻을 수 있습니다.

    • 클라이언트와 서버간 통신과 P2P 통신을 단순화된 API로 쉽게 사용할 수 있습니다.
      (P2P 연결이 이루어질 때까지 기다린다거나 연결이 끊어졌는지 검사하는 과정이 필요 없습니다.)
    • 홀펀칭, 릴레이 기능을 한꺼번에 내장하고 있으며 홀펀칭 등의 과정은 ProudNet 안에서만 다루어집니다.(사용자 입장에서는 홀펀칭과 릴레이를 따로 구축할 필요가 없습니다.)
    • 사용자 입장에서 P2P 통신 연결에 필요한 대기 시간이 없기 때문에 특히 로비형 게임에서 바로 게임 시작을 할 수도 있으며, 클라이언트와 서버간 통신과 P2P 통신을 혼용하는 월드 동기화 기법도 쓸 수 있게 해줍니다.

    트래픽 제어 기능

    중국이나 동남아시아 등 ADSL2+나 그 이하 속도의 회선을 쓰는 곳에서는 P2P가 원활하지 못한 경우도 있습니다.
    이는 P2P간 통신 속도가 느리기 때문이며, 이를 잘 다루지 못하면 P2P 통신을 하는 도중 여러 가지 문제가 발생합니다.
    심지어 인터넷 공유기(NAT router)가 작동이 멈추는 현상까지도 발생할 수 있습니다. 이를 예방하기 위해 ProudNet에서는

    • 일정량 이상의 송신량은 서버 릴레이를 타는 기능
    • 패킷 절약 기능 등

    이 내장되어 있습니다.

  • 6. P2P기능 #2

    P2P간 Unreliable & Reliable 메시징 지원

    P2P간 UDP로 통신하는 것은 TCP에 비해 만들기가 쉽지만, 손실이 생길 수 있습니다.
    이러한 경우 P2P로 보낸 메시지가 누락되는 문제가 생길 수도 있습니다.
    ProudNet에서는 이 문제도 해결하기 위해 TCP와 비슷한 방식의 ARQ 기법을 내장하여 P2P간에도 신뢰성 있는 메시징을 해줍니다.

    높은 홀펀칭 유지율

    안정적인 P2P 통신은 장시간 많은 P2P 연결이나 높은 통신량에서도 생존하게 하는 기술이 더 중요합니다.
    PC방 또는 중국에서는 인터넷 공유기 하나에 수십대에서 수백대의 컴퓨터를 연결해서 쓰는 경우가 있습니다.
    이러한 경우 과다한 P2P 통신이 많은 인터넷 공유기 내의 포트 매핑 엔트리 목록이 가득 차서 인터넷 연결이 종종 끊어지는 경우가 발생할 수 있습니다.
    ProudNet은

    • Just-in-time 홀펀칭 기능
    • 포트 매핑 재사용 기능
    • 포트 매핑 엔트리가 겹쳐지는 문제가 생기지 않게 하는 기능

    을 내장하고 있습니다.

    홀펀칭 릴레이 자동 전환 기능

    P2P 연결이 성공적으로 이루어졌다 해도 트래픽 사용량이나 라우터의 상황에 따라 홀펀칭은 언제든지 증발할 수 있습니다. 이를 제어하지 못하면 함께 플레이하던 플레이어가 갑자기 움직이지 않는 등의 예상하지 못했던 상황이 발생할 수 있습니다.
    ProudNet는 P2P 연결 상태를 감지하여 홀펀칭과 릴레이를 적절히 활용합니다.
    홀펀칭이 증발하더라도 릴레이를 통해 ProudNet을 사용하는 사용자 입장에서는 연결 끊어짐이 아닌 잠깐의 레이턴시일 뿐입니다.
    게임 서버 개발자 입장에서는 P2P 통신이 항상 유지된다는 가정하에 안심하고 게임 프로그램을 개발할 수 있습니다.

    Just-In-Time 홀펀칭

    dqwe1

    • P2P Group을 맺게 되면 사용자의 메시징은 일단 릴레이로 처리되고 내부적으로 홀펀칭을 시도합니다.
    • 홀펀칭이 성공하면 이후부터는 직접 메시징을 하게 됩니다.
    • 따라서 사용자는 P2P Group을 맺은 직후 대기 할 필요 없이 바로 P2P 통신이 가능합니다. 내부적으로 알아서 릴레이/홀펀칭 전환이 가능하기 때문입니다.

  • 7. Messaging

    7. Messaging

    Remote Method Invocation

    xdsa1

    • 수신한 메시지가 무엇인지 판단하기 위해 엄청난 양의 switch-case문을 작성해보셨나요? ProudNet의 RMI가 그 지루함을 해결해 드릴 수 있습니다.
    • PIDL로 메시지를 정의하고 이를 컴파일하면 각 언어별로 메시지를 송신(Proxy) / 수신(Stub)하는 코드가 생성됩니다. 사용자는 이를 Include하고 서버(또는 클라이언트) 객체에 등록하여 마치 함수를 호출하듯이 메시지를 송신 할 수 있습니다.

     

    암호화/압축

    rewqr

    중요한 데이터를 주고받을 때 암호화는 필수입니다.
    ProudNet에서는 크게 2가지의 암호화 방식을 제공하고 있습니다.

    • 빠르지만 약한 암호화 : 보안성은 떨어지지만 암복호화 속도가 매우 빠릅니다.
    • 강하지만 느린 암호화 : 공신력 있는 AES 알고리즘을 사용합니다.

    경우에 따라서 서버의 부하가 증가하더라도 메시지를 압축하여 트래픽을 줄이는 것이 이득일 수 있습니다. ProudNet에서는 손쉽게 사용 가능한 압축기능을 제공합니다.

    • 클라이언트와 서버간 및 P2P 메시징에 대한 강력한 보안 수준의 암호화 기능
    • 패킷 sniffing 및 복제, 조작에 대한 차단 기능

  • 9. 분산 서버

    9. 분산 서버

    1개 게임 서버 머신으로는 많은 동시접속자를 처리하기 어렵습니다. 따라서 분산 서버 구축은 선택이 아닌 필수이입니다. 하지만 분산 서버 구성은 개발하기 까다롭습니다. ProudNet에서는 서버간 통신 모듈을 지원하기 때문에 쉽게 분산 서버 구성을 할 수 있습니다.

    322111

  • 10. 개발 편의성 및 기타 기능

    9. 개발 편의성 및 기타 기능

    개발 편의성

    ProudNet을 이용한 클라이언트와 서버간 통신 예시

    3422

    • Remote Method Invocation (RMI) 기능을 제공(메시지 송수신 루틴을 생성해주는 역할)
    • 게임 클라이언트와 서버간 통신 모듈, 분산 서버용 통신 모듈를 사용하여 쉽고 자유롭게 서버 구성 가능

    fe433

    기타 기능

    • 덤프 선정 기능 : 프로그램의 크래시를 쉽게 수집하고 분석할 수 있습니다.(참고: 모바일 클라이언트의 크래시 덤프는 지원하지 않습니다.)
    • 수퍼피어(호스트) 선정 기능 : FPS 게임 등에서 효과적으로 활용됩니다.
    • 호스트간 시간 동기화 기능 : 액션 게임에서 정확한 승부 판정을 위해 활용됩니다.

프라우드넷 기초 사용 가이드