자료실

[Photon엔진강좌] Photon Server SDK (Part 1) — Applications
작성자 | admin 2020-07-13  |    조회수 : 1336  



Photon Server를 설치하신 여러분, 서버 측 프로그램 개발 방법을 알고 싶으세요? SDK에서 제공하는 Base Class 확장으로 우리가 원하는 조건에 부합하는 응용프로그램을 구성할 수 있을까요?

본 파트에서는, Photon Server의 간단하면서도 강력한 소프트웨어 구조에 대해 알아보겠습니다!!


Photon Server 구조 개발, 응용 예시: MMO, Load Balancing (+Plugins), Hive (Lite)

기본 개념:

Photon Server 세계에서 무엇을 애플리케이션이라 할까요? 어떤 기능을 가지고 있을까요? 게임 로직은 어디에 작성할까요? 클라이언트와 연결해 조작할 수 있는 이벤트는 무엇이며, 연결/단절 시 관리 방법 등, 우선 이런 간단한 입문 개념부터 알아보고 가겠습니다!

Applications 응용프로그램

게임 연결 구조에 대해말하자면, 애플리케이션은 서버 쪽에서 실행하는 프로그램 로직(게임 로직)이며, 게임 내 특화된 기능, 즉 RPC, Data Storing, Database 등과 같은 기능이 Photon Application에서 구현되는 것입니다.

개발할 때, C#을 사용하는데 소스 코드를 편역하고 나면 DLL이 생성되어 Photon의 소스 핵심으로 로딩 후 실행됩니다. Photon Core에서 설정 파일 Configuration files을 읽어오고, 설정 파일에서 일부 정의된 마크와 수치로, 로딩 시 초기화와 일부 응용프로그램 관련 매개 변수를 편집합니다.

일반적으로, 한 애플리케이션에서 하나의 게임 내 운영 로직 모두를 제공합니다. 다음 단계에서 응용한다면, Photon Server 설계로 동시간 대에 여러 애플리케이션을 실행할 수 있기 때문에, 여러 가지 목적으로 특화된 작업항목(Task)을 설계해 이들을 서로 다른 응용프로그램으로 만들 수 있습니다. 예를 들어, 오직 Web-Based의 연결 요청(클라이언트 Request)만 작성해 간단하게 Policy Files 를 송출하는 기능입니다. 해당 기능을 단독으로 분리해 하나의 응용프로그램으로 만든다면 연결 구조 설계의 복잡성을 간소화할 수도 있습니다.

Game Logic(게임 로직)

게임 로직은 클라이언트와 서버간 상호 정보 전달 방법 및 기능에 관한 것으로 조작/이벤트 및 서버 자체 또는 외부와의 연결에서 반드시 실행해야 할 관련 과정을 구현해냅니다.

Photon Server 내 게임 로직 모두 C# framework로 개발한 것으로, 프로그램 진입점도 응용프로그램 유형이고, hoton.Socketserver.dll에 정의되어 있기 때문에 프로그램 작성 시 참고할 수 있습니다.

Photon Server SDK에서 제공하는 세 애플리케이션은 C#로 작성된 가장 좋은 예시 프레임이며, 룸-Based 및 MMO 응용프로그램이 있습니다. 잠시 후 이에 대해 이야기해보겠습니다.

Operations 조작

Photon에서 Operation은 RPC(원격 프로시저 호출) 구조와 동일하기 때문에, 클라이언트에서 operation call로 그들 간의 통신 전달 기능을 이용할 수 있습니다.

이중 매개 변수 전송은 서버 쪽 응용 프로그램 내부에 정의해 놓을 수 있기 때문에 HashTable(keys & values)로 데이터를 정의할 수 있고, 클라이언트와 서버 간의 framework에서 직렬화, 전송 및 직렬 해제 작업(Serialization, Transfer and Deserialization)이 자동 진행됩니다.

매 Operation Call마다 반환값(return result)을 제공하나, 이러한 단방향으로만 원하는 데이터를 클라이언트에 제공합니다. 그래도 반환값을 제공할 필요가 없기 때문에네트워크 대역폭을 절약할 수도 있습니다. 매번 클라이언트와 서버 간에 호출할 때마다, 단지 이 둘 사이에만 정보를 전송하기 때문에 다른 클라이언트에 알리거나 전송에 참여할 필요가 없습니다.

Events 이벤트

Photon Events는 클라이언트에 보내는 메시지 알림입니다. LoadBalancing 애플리케이션에 기본으로 정의된 몇가지 이벤트가 존재하나 상대적인 것으로, 클라이언트 쪽에서도 일부 이벤트를 자체 설계해 운용할 수 있습니다.

일반적으로, 수신쪽에서 수신한 이벤트는 다른 발송 지점에서 호출(Operation Call)하는 것으로, Event는 언제든지 생성(또는 도달)될 수 있기 때문에, LoadBalancing처럼 어떤 사람이 룸에 가입하거나 퇴장할 때, 이벤트 알림 내용을 동일 룸 내 사람들에게 전송합니다.

Connections & Timeouts 연결 및 타임아웃

Photon Engine은 데이터를 전송하는 네트워크 기본으로, 개량한 UDP를 사용해 Reliable-UDP(R-UDP)라 부릅니다.

발송지점(Sender)에서 송출한 R-UDP의 패킷 내 명령(commands)에 시리얼 번호 및 플래그(flag)를 가지고 있고, 수신 지점(Receiver)에서는 반드시 해당 신호에 응답해야 합니다. 발송 지점의 R-UDP는 단시간 내재발송이 진행되며, 상대방의 회신이 도착해야 중지됩니다. 응답 회신을 수신하지 못할 경우, 연결 시간 초과메시지가 생성됩니다.

시간 초과 상황을 탐지했다면, 바로 발송 지점에서 해당 연결을 끊어버립니다. 만약 어느 한쪽이나 다른 쪽에서 더는 회신이 없다고 판단한다면, 더 이상 정보를 전달하지 않고, 정보 동기화가 발생하지 않습니다.

기본 유형의 응용프로그램(Base Applications)

Photon Server SDK에서 최소 세가지 기본 유형의 응용프로그램을 제공합니다. 단일하면서도 대규모 세계의 멀티플레이어 게임 프레임 MMO App, 작지만 수용량이 크고 독립적인 공간(Room-Based)의 게임 프레임 Lite App, 및 여러 단계의 게임 서버 플랫폼의 작업 부하 분배를 책지는 LoadBalancing App. 이러한 앱으로 게임 개발 입문 초입 시 활용성 높고 간단한 구조로 참고할 수 있습니다. 그럼 지금부터 한 번 살펴보겠습니다~

LoadBalancing Application


해당 응용프로그램 범례와Photon Cloud 자체내부의 운용 부하 균형은 기능면에서 대체적으로 동일합니다. 해당 구성에 포함함 두 개 서버: 마스터 서버, 게임 서버. 이 두 서버는 상호 협력하게 운영됩니다.

대략적인 기능:

  • 마스터 서버 기능
    1.게임 서버 내, 당시 오픈한 게임 정보 기록.
    2.게임 서버 내 모든 작업 부하 상황 기록, 새로 가입한 Peers(사용자)의 적절한 게임 서버 분배.
    3.Lobby(게임 로비)에서 사용 가능한 룸 리스트 유지 및 업데이트, 편리하게 클라이언트와 연결 시 적절한 정보를 먼저 획득해 User가 볼 수 있도록 표시.
    4. 연결한 클라이언트 을 위해 적합한 룸 검색, 예를 들어, 난수 방식이나 일부 이름 연결값으로 검색, 게임 서버 위치를 이들(클라이언트)로 전송해줌.
  • 게임 서버 기능
    1.Lite(Hive) 변종으로 확장, 게임 룸 관리에 주로 사용
    2. 상단 프로세스 마스터 서버로 그들의 현재 작업 부하 상황 및 플레이 가능한 정보 리스트의 정기적 보고






Load Balancing 기본 설정

위 그림 표시처럼, 1개 LoadBalancing App 설정상으로는 마스터 서버에는 오직 1개 인스턴스만 존재하고 게임 서버 는 별개로 나뉘어 실행되어 여러 개 인스턴스로(1..n 개) 존재합니다. 또한, 마스터 서버 다른 클라우드 플랫폼 게임 서버 에서도 실행 가능하고, 별개로 서로 다른 컴퓨터에서 LoadBalancing App이 실행될 수 있기 때문에, 기능이 더 강한 다중 서비스 플랫폼을 구축할 수 있습니다! 슈퍼 파워! 대단하죠!



LoadBalancing, 다른 VM 상의 게임 서버와 연결 가능

Photon 3의 SDK에서 LoadBalancing App은 Lite로 확장 Photon 4의 SDK에서 LoadBalancing App은 Hive 확장

MMO Application

모든 사용자가 대규모 세계에서 상호 교류하며 게임을 진행할 수 있는 응용프로그램이 바로 아주 좋은 시범 예시입니다. 해당 앱은 일부 Actors / Items / Properties / Events의 기본 유형과 관리를 제공합니다.

만약 서버 지점(서버 쪽) 단일한 게임 세계의 어떤 항목을 겨냥한 공동의 규칙과 로직을 작성하고 싶다면, 몬스터 생성, 보물 드랍, 마법원천, 주요 구역 및 상호 간 특별 이벤트(Event) 등과 같은 이벤트를 촉발하고 싶다면 해당 범례가 바로 가장 좋은 시작입니다. 이하 해당 범례에서 제공하는 기본 구성:



MMO 서버 쪽: 단일한 세계, 여러 구역, 아이템 관리, 리소스 관리, 주요 구역


Lite (Hive) Application

Lite 응용 범례는 Photon 3 SDK에서 제공하는 것이며, Photon의 기본 개념 이해는 아주 좋은 교재입니다. 그리고 HivePhoton 4 SDK에서 제공하기 시작한 것으로, 기본적으로는 양자 모두 동일하나 일부 부분이 개선되었기 때문에, 개발 시 바로 Load Balancing를 이용해 자신에게 필요한 프레임을 확장하는 것이 좋다고 생각합니다.

그렇다면 이 범례는 왜 Lite라 할까요?



  1. 설계 면에서 살펴보면, 주로 서버 쪽 부분에서 매우 경량화를 추구하기 때문입니다.
  2. 게임 연결 프레임에서, 스코어(Scoring) 대미지(Damaging) 등 이런 기능은 이미 서버를 일부 특수 클라이언트(Photon에서 마스터-클라이언트라 함)에서 직접 실행했을 수도 있습니다. 따라서 서버 쪽 로직으로 진행할 필요가 없습니다.
  3. 이로 인해 룸 Class가 Lite에서 좀 더 쉽게 이해할 수 있고, 더욱 편리하게 확장해 나갈 수 있습니다~


이러한 개념을 이해하고 나면 Photon Server 소프트웨어 개발 프레임에 대한 기본을 갖추게 됩니다. 이어서 살펴볼 내용은 MMO App에서 멀티플레이어 온라인 RPG 설계 학습 및 개발 확장입니다. 자신만의 특별 규정이 적용된 Room-Based 게임 서버를 만들고 싶다면, Hive App에서 기본 프레임을 학습한 후, Load Balancing App에서 확장해나가면 됩니다!





★더 많은 글은Photon HelpCenter
https://support.photonengine.jp/hc/ko/categories/204651467에서 확인하세요!
★Photon 공식 홈페이지
https://www.photonengine.com/ko-kr/Photon에서 확인하세요!