SlideShare a Scribd company logo
1 of 82
Download to read offline
오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발




                                 Casual Game Server Framework
기술내용      서버 프레임워크 CGSF에 대한 소개

최종문서수정일   2012-10-18

문서작성자     박주항

MEMO      KGC 강연 최종 문서
Casual Game Server Framework(CGSF)


 1. CGSF
   게임 서버 제작시 공통적으로 나타나는 부분을 모듈화한
   서버 프레임워크

 2. 착 안
   MMO / MO 서버를 제외한 게임 서버의 유사성
   초기 비용 절감 / 공통 플랫폼 제공
                                     매번 서버 새로
                                     만들어야 돼??




                                     Casual Game Server Framework
Casual Game Server Framework(CGSF)


 3. 특   징
   오픈 소스의 활용
   License Free
   완전한 게임 서버의 구현
   모듈 교체 용이

   게임 서버 개발 비용 절감




                                     Casual Game Server Framework
Casual Game Server Framework(CGSF)


 4. 지향점 : 지엽적인 부분 최대한 배제

   - 문자열 처리

   - 네트워크 엔진

   - 압축 라이브러리                        누가 이미 만들어
                                     놓은 거.. 새로 만들
                                     필요는 없겠지…




                                           Casual Game Server Framework
CGSF - Table of Contents


  1. CGSF Internal Structure

  2. Network Layer

  3. Logic Queue

  4. Logic Layer

  5. Database Layer

  6. P2P Layer

  7. Sample FPS Server / Client

  8. Conclusion




                                  5   Casual Game Server Framework
ACE Proactor

                     Work            Work          Work
                                                                          1……N
                    Thread          Thread        Thread



                               Logic Queue (IOCP)



                                      Logic            1.    Single Thread
                                     Thread            2.    멀티 쓰레드로 변경 가능




                                 Database Proxy

    Database Impl Local                                     Database Impl Remote


        (DB Thread)
                                                               DataBase Server
Half Sync Half Async Pattern




                                    DataBase


                                       6
Network Layer
Network Layer   Logic Layer       Database Layer   P2P Layer




                              7
Network Layer                                                                      데이터 흐름




    네트워크     ACE Framework       패킷 분석            완성된 패킷

      TCP           ACE          Packet                                 Logic
                                                   Packet
      Data        Proactor      Analyzer                                Queue
                해당 유저 소켓 관련    데이터 유효성 체크      의미있는 내용 완성
                  이벤트 발생           압축

                              대기중이던 일꾼 스레드
                                 작업 시작


  Kernel         ACE Thread       Worker Thread = (Core * 2) ??




                                     8                            Casual Game Server Framework
Network Layer                                   ACE Application




 ▣ Acceptor & Service Handler




                                9   Casual Game Server Framework
Network Layer                                         ACE Application




 ▣ Acceptor & Service Handler Expansion




                              10          Casual Game Server Framework
Network Layer                                                               ACE Application




 ▣ Worker Thread Creation
   ACE_Thread_Manager::instance()->spawn_n(ThreadCount, ProactorWorkThread, …);


   1. ThreadCount : 생성할 쓰레드 수
   2. ProcatorWorkThread : Thread Entry




                                     11                         Casual Game Server Framework
Network Layer                                                                  ACE Application




 ▣ Worker Thread Event Detection
   void ProactorWorkThread(void* Args)
   {
            ACE_Proactor::instance()->proactor_run_event_loop();
   }




   ::GetQueuedCompletionStatus(m_hIOCP, …, &pCompletionKey, …, …);




                                      12                           Casual Game Server Framework
Network Layer                                                                  ACE Application



▣ proactor_run_event_loop()
NetworkEngine.dll!SFProactorService::handle_read_stream()
ACEd.dll!ACE_WIN32_Asynch_Read_Stream_Result::complete()
ACEd.dll!ACE_WIN32_Proactor::application_specific_code()
ACEd.dll!ACE_WIN32_Proactor::handle_events(unsigned long milli_seconds=4294967295)
ACEd.dll!ACE_WIN32_Proactor::handle_events()
ACEd.dll!ACE_Proactor::handle_events()
ACEd.dll!ACE_Proactor::proactor_run_event_loop(int (ACE_Proactor *)* eh=0x00000000)
NetworkEngine.dll!ProactorWorkThread(void * Args=0x00000000)
ACEd.dll!ACE_Thread_Adapter::invoke_i()
ACEd.dll!ACE_Thread_Adapter::invoke()
ACEd.dll!ace_thread_adapter(void * args=0x0118b558)

                                                         유저를 나타내는 오브젝트인
                                                         SFProactorService의
                                                            메소드가 호출되네




                                      13                           Casual Game Server Framework
Network Layer                                Packet Analyzer




                     이젠 유저가 보낸 데이터를
                      분석할 필요가 있겠지?




                14               Casual Game Server Framework
Network Layer                                                ACE Application



▣ User Session(Socket) & Received Data Process




                              15                 Casual Game Server Framework
Network Layer                             Packet Analyzer




 ▣ Packet Analyzer
    - 유저가 전송한 데이터를 버퍼링
    - 게임 패킷을 완성


 ▣ 패킷의 구조

     Header      Data




                         16   Casual Game Server Framework
Network Layer                                         Packet Analyzer




 ▣ Packet Header
           구성요소                내   용
        Packet Length        패킷의 전체 길이
          Encryption         데이터 암호화 여부
          Compress             패킷 압축
       Checksum(CRC)         패킷 유효성 검증
           Directive           패킷 번호




                        17                Casual Game Server Framework
Network Layer                                 Packet Analyzer




▣ 버퍼 상태
                            TCP 데이터가 뭉쳐오기 때문에
                               필요한 만큼의 데이터가
                              도착할 때 까지 기다릴
                                  필요가 있어
    Header

    Header

    Header      Data

    Header      Data




                       18

                                  Casual Game Server Framework
Network Layer                                            Packet Analyzer




 ▣ 클라이언트 패킷 전송

    Raw Packet     암호화         압축   CRC 생성          Packet




 ▣ 서버 패킷 수신
                                                   Raw
     Packet      CRC 비교   압축 해제     복호화
                                                  Packet




                          19

                                             Casual Game Server Framework
Network Layer                                     단위 전략 패턴




                     음… 그런데 lzf 압축 라이브러리가
                      마음에 들지 않아. Zlib로 교체하고
                       싶은데 쉬운 방법이 없을까??




                20

                                    Casual Game Server Framework
Network Layer                              단위 전략 패턴




 ▣ 템플릿을 사용한 단위 전략 패턴

   1. 상황에 따른 정책 변경 용이

   2. 컴파일 타임 코드 바인딩




                        21   Casual Game Server Framework
Network Layer                                                          단위 전략 패턴




▣ Example – Lzf, Zlib
 1. class SFCompressLzf
 2. BOOL Compress(BYTE* pDest, int& DestLen, BYTE* pSrc, int SrcLen);
 3. BOOL Uncompress(BYTE* pDest, int& DestLen, BYTE* pSrc, int
    SrcLen);


 1. class SFCompressZLib
 2. BOOL Compress(BYTE* pDest, int& DestLen, BYTE* pSrc, int SrcLen);
 3. BOOL Uncompress(BYTE* pDest, int& DestLen, BYTE* pSrc, int SrcLen);




                                22                       Casual Game Server Framework
Network Layer                                                        단위 전략 패턴




 ▣ Example – Packet Analyzer
  1.   template <typename T>
  2.   class SFPacketAnalyzer
  3.   {
  4.   ….
  5.   static T& GetCompressor(){return m_Compress;}
  6.   static T m_Compress;
  7.   ….
  8.   };




                                  23                   Casual Game Server Framework
Network Layer                                                       단위 전략 패턴




 ▣ Example - SFProactorService
  SFPacketAnalyzer<SFCompressLzf>::GetCompressor().Compress(……);



   http://www.zlib.net
   http://oldhome.schmorp.de/marc/liblzf.html




                                        24            Casual Game Server Framework
Logic Queue




네트워크 레이어의 종착역

  Logic Queue




      25        Casual Game Server Framework
Network Layer                                          Logic Queue




 ▣ Logic Queue

   1. 네트워크 이벤트나 타이머 이벤트 등을 수신하기 위한 Queue
      - 로직 쓰레드에서 사용

   2. IOCP 활용




                       26              Casual Game Server Framework
Network Layer                                                                   Logic Queue




 ▣ Logic Queue

   template <typename T>
   class SFIOCPQueue : public SFTSSyncQueue<T>
   {
   BOOL Push(T* pMsg)
   {
     ::PostQueuedCompletionStatus(m_hIOCP, 0, (ULONG_PTR)pMsg, NULL);
     return TRUE;
   }

   T* Pop()
   {
   ……
   SFASSERT( FALSE != ::GetQueuedCompletionStatus(m_hIOCP,
   &NumberOfBytesTransferred, &pCompletionKey, &pOverlapped, INFINITE));

   return (T*)(pCompletionKey);
   }




                                    27                          Casual Game Server Framework
Network Layer                                                             Logic Queue




 ▣ Logic Queue의 사용
   1. Worker Thread
      LogicGatewaySingleton::instance()->PushPacket(pPacket);

   2. Logic Thread
      pCommand = LogicGatewaySingleton::instance()->PopPacket();
      LogicEntrySingleton::instance()->ProcessPacket(pCommand);



                                  이걸로 무사히 네트워크 레이어로
                                 부터 로직 레이어로 패킷을 넘기게
                                       되었어 휴…




                                 28                       Casual Game Server Framework
Logic Layer
Network Layer   Logic Layer        Database Layer   P2P Layer




                              29
Logic Layer                                                    CGSF




 ▣ Logic Layer

   1. 캐쥬얼 온라인 게임에서 공통적으로 나타나는 부분을 모듈화

   2. 공통부분
      - 채널선택
      - 로비
      - 게임방 진입
      - 게임 로딩,
      - 게임 플레이
      - 결과 화면




                      30                Casual Game Server Framework
Logic Layer                                             Logic Thread




 ▣ Single Thread

   1. 깔끔한 코드
      - Lock(); SharedVar++; Unlock();

   2. 컨텐츠 프로그래머

   3. 원활한 게임 서비스

   4. 고속 코드 수행(Node.js)




                                    31   Casual Game Server Framework
Logic Layer                               Logic Thread




▣ 주의사항
   1. Blocking Code
      ex) Sleep()

   2. 오브젝트 풀, 메모리 풀




                      32   Casual Game Server Framework
Logic Layer                                 Logic Thread



 ▣ Logic Thread Entry




                        33   Casual Game Server Framework
Logic Layer                                 CGSF




 ▣ Game Lobby




                34   Casual Game Server Framework
Logic Layer                               CGSF




 ▣ GameRoom




              35   Casual Game Server Framework
Logic Layer                                  CGSF




 ▣ GameLoading




                 36   Casual Game Server Framework
Logic Layer                               CGSF




 ▣ GamePlay




              37   Casual Game Server Framework
Logic Layer                                 CGSF




 ▣ GameResult




                38   Casual Game Server Framework
Logic Layer




              룸 오브젝트와 플레이어 오브젝트를 State
              Design Pattern으로 구현하면 되겠어!!




               39                     Casual Game Server Framework
Logic Layer                                      GameRoom




▣ Game Room State Design




                           40   Casual Game Server Framework
Logic Layer                                   GameRoom




▣ Player State Design




                        41   Casual Game Server Framework
Logic Layer                                         GameRoom



▣ Packet Flow(유저가 로비에서 대기방으로 진입)




                      42           Casual Game Server Framework
Logic Layer                                                GameRoom




▣ SFRoomPlay




          빨강색 상자 : 최종 어플리케이션이 구현해야 될 부분

                        43                Casual Game Server Framework
Logic Layer                                                          GameRoom




 ▣ GameMode Example




              FPSServer 프로젝트의 SFFreeForAll 클래스 참조



                               44                   Casual Game Server Framework
Logic Layer




              이젠 유저로 부터 받은 데이터를 게임에서 쓰는
                   형태로 변환해야 겠지…




                45                 Casual Game Server Framework
Logic Layer                                              Google protocol buffer




 ▣ Google Protocol Buffer
    1. http://code.google.com/p/protobuf/
    2. 패킷 뭉쳐오기 처리(http://javawork.egloos.com/2726467)



 ▣ MessagePack
    http://msgpack.org/




                              46                    Casual Game Server Framework
Logic Layer                                       Google protocol buffer




 ▣ Example – 채팅 메시지

    message Chat
    {
          required string ChatMessage = 1;
    }

    Chat PktChat;
    PktChat.chatmessage();




                                 47          Casual Game Server Framework
Database Layer
Network Layer   Logic Layer        Database Layer   P2P Layer




                              48
Database Layer                                              Database




 ▣ 대표적인 데이터베이스
    1. MS-SQL
    2. MySQL

     게임서버에는 두 데이터베이스 접근을 위한 모듈이 준비되어 있으나
        MS-SQL은 상용이므로 예제로 MySQL을 사용합니다



                     회사에서는 mysql 잘 안써요
                            …




                     49                  Casual Game Server Framework
Database Layer                                           MySQL




 ▣ MySQL : http://www.mysql.com/




                            50     Casual Game Server Framework
Database Layer                                 Implementation




 ▣ 구현사항
  1. 데이터베이스 쿼리 호출은 블럭킹 방식
     - 비동기 쿼리 호출 방식 필요

  2. 로직쓰레드, DB 쓰레드간 쿼리 전달 구현 필요




                      51          Casual Game Server Framework
Database Layer                                                           Implementation




▣ 비동기 처리 방식
  1. DB 서버를 이용한 방식
                     쿼리를 담은 패킷 전송        데이터베이스 쿼리


                 Game           Database
                                                 Database
                 Server          Server



  2. IOCP를 이용한 방식

  3. 쓰레드 세이프 큐를 이용한 방식




                                    52                      Casual Game Server Framework
Database Layer                                       Implementation




 ▣ Half-Sync/Half-Async 모델
   http://javawork.egloos.com/1818696




                              53        Casual Game Server Framework
Database Layer                     Implementation



 ▣ 데이터베이스 처리




                                  Logic Thread



                             Manager Thread


                            DBWorker Thread




                 54   Casual Game Server Framework
Database Layer                                                                Implementation




▣ Logic Thread 에서의 데이터베이스 쿼리 요청
 ※ Send
  1. SFMessage* pMessage = LogicEntrySingleton::instance()->GetDBMessage();
  2. ….
  3. LogicEntrySingleton::instance()->GetDataBaseProxy()->SendDBRequest(pMessage);




                                     55                          Casual Game Server Framework
Database Layer                                   Implementation




▣ Command Pattern




    커맨드 생성 및 전송     커맨드 큐잉, 디스패치   커맨드 수행




                        56          Casual Game Server Framework
Database Layer                                                       Implementation




 ▣ DB Query Command 수행 – SFDBWorker(Thread)

  1. while(TRUE)
  2. {
  3.      ACE_Method_Request* pReq = this->m_Queue.dequeue();
  4.       ….
  5.      int Result = pReq->call();
  6.       ….
  7. }
                                             DB 일꾼 쓰레드는
                                             정말 간단하군요!!




                                57                      Casual Game Server Framework
Database Layer                                               Implementation




 ▣ Request의 call method
  1.extern ACE_TSS<SFDatabaseMySQL> Database;
  2.
  3.int SFDBRequest::call(void)
  4.{
  5.      …..
  6.      Database->Call(m_pMessage);
  7.      …..
  8.      return 0;
  9.}




                              58                Casual Game Server Framework
Database Layer                                               TLS




 ▣ Thread Local Storage(TLS)




                               59   Casual Game Server Framework
Database Layer                                       Implementaion




                       데이터베이스 호출 관련
                      예제로 유저 로그인 관련
                      샘플을 구현해 두었습니다~




                 60                    Casual Game Server Framework
P2P Layer
Network Layer   Logic Layer        Database Layer   P2P Layer




                              61
P2P Layer                                             P2P




 ▣ P2P Layer
  1. 기존 P2P 모듈 활용을 목표




                        62   Casual Game Server Framework
P2P Layer                                                   P2P




 ▣ P2P Module
  1. OCF P2P
     - 서버 엔진 OCF의 기능 중 하나
     - http://www.ocf.kr/

  2. Raknet

  3. Enet
     - League of Legends에서도 사용??
     - http://enet.bespin.org




                             63    Casual Game Server Framework
P2P Layer                                                                 P2P




 ▣ 피어간 연결망 - 1



            Peer1
              1                               Peer1

   Relay                           Relay
   Server                          Server
                    Peer2                                           Peer2
                      2

   Super
    Peer                         Super Peer

            Peer3
              3                               Peer3




                            64                   Casual Game Server Framework
P2P Layer                                                                P2P




 ▣ 피어간 연결망 - 1



                                            Peer1
            Peer1

                                 Relay
  Relay                          Server
  Server
                                                                  Peer2
                    Peer2




    Peer4   Peer3                   Peer4
                                            Peer3




                            65                  Casual Game Server Framework
P2P Layer                                                                 P2P




 ▣ 피어간 연결망 - 2




Relay       Peer1                Relay
Server                                       Peer1
                                 Server




                    Peer4
   Peer2                             Peer2                       Peer4




            Peer3                            Peer3




                            66                   Casual Game Server Framework
P2P Layer                                                P2P




 ▣ P2P Manager Interface




                           67   Casual Game Server Framework
P2P Layer                                                      P2P




 ▣ P2P Method(IUDPNetworkCallback)
    1. HandleUDPNetworkMessage
    2. ReportMyIP




                                 68   Casual Game Server Framework
P2P Layer                                                                         P2P




 ▣ Lock Free Library : liblfds(http://www.liblfds.org)

    BOOL P2PManager::PushPacket(BYTE* pData, int Length)
    …
    queue_guaranteed_enqueue(m_pQueue, pP2PData);
    …



    BOOL P2PManager::Update()
    …
    while (queue_dequeue(m_pQueue, (void**)&pP2PData))
    {
      m_pUDPCallback->HandleUDPNetworkMessage(…);
    …




                                 69                      Casual Game Server Framework
P2P Layer                                                               P2P Mechanism




 ▣ Report My IP

      Relay Svr   Game Svr


      1      2
                  3

      Client 1                    1. Request My Public IP
                                  2. Receive My Public IP
                                  3. Report My IP




                             70                             Casual Game Server Framework
P2P Layer                                                                    P2P Mechanism




 ▣ Sharing IP & Connect                                   방에 입장하자 마자
                                                           피어간 연결을 하니
                    Game Room
                                                          게임 시작이 빠르겠군요.
            1
                2            3

     Client 1           Client 2   Client 3
                    4


                                              1. Enter Room
                                              2. Receive Room Member IP List
                                              3. Receive New Member IP
                                              4. Connect Each Other



                                    71                           Casual Game Server Framework
CGSF




Sample FPS Server / Client




            72        Casual Game Server Framework
Sample FPS Server / Client                              Sample FPS Client




 ▣ Programming a Multiplayer FPS in DirectX
   1. 2004년에 출간
   2. 네트워크를 DirectPlay로 구현
   3. GUI Library




                                73            Casual Game Server Framework
Sample FPS Server / Client                                       Sample FPS Client




 ▣ CEGUI(Crazy Eddi’s GUI)
    http://www.cegui.org.uk/wiki/index.php/Main_Page




                                  74                   Casual Game Server Framework
Sample FPS Server / Client                 Sample FPS Server




 ▣ FPS Server
    1. 소스 코드 참조




                             75   Casual Game Server Framework
CGSF




결론 및 정리




  76      Casual Game Server Framework
결론 및 정리                                      정리




          CGSF의 목적




            77       Casual Game Server Framework
결론 및 정리                                            CGSF의 보강




▣ CGSF의 보강
  1.   TDD 기반 개발
  2.   스트레스 테스트
  3.   로직 쓰레드의 멀티쓰레드화
  4.   서버간 연결 구조
  5.   게임 옵션 세분화
  6.   서비스 툴 제작




         CGSF                CGSS


                        78          Casual Game Server Framework
결론 및 정리                                                                       CGSF




▣ CGSF 관련 사항

 1. Source Code : http://dev.naver.com/projects/cgsf

 2. 개발 툴 : Visual Studio 2012 RC Professional 버전

 3. DirectX SDK

 4. Tortoise SVN
                               차후 소스 업데이트는
                                Git-Hub에서




                                  79                   Casual Game Server Framework
CGSF




Q&A




80    Casual Game Server Framework
결론 및 정리                                                         CGSF




▣ 제 소개
 1. 약 력
    서강대 물리학/컴퓨터학 복수전공
    한국산업기술대학 디지털엔터테인먼트 석사
    서강대학교 게임교육원 시스템 프로그래밍 시간 강사
    JCE Server Programmer(2006 ~ 현재)

 2. E-Mail : juhang3@daum.net

 3. 블로그 : http://blog.naver.com/pdpdds

 4. 목표 : C++ OS 제작

 5. 좋아하는 게임 장르 : 어드벤처




                                81       Casual Game Server Framework
CGSF




감사합니다 !!!!




   82        Casual Game Server Framework

More Related Content

What's hot

[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규ChangKyu Song
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현YEONG-CHEON YOU
 
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...Amazon Web Services Korea
 
NoSQL 위에서 MMORPG 개발하기
NoSQL 위에서 MMORPG 개발하기NoSQL 위에서 MMORPG 개발하기
NoSQL 위에서 MMORPG 개발하기Hoyoung Choi
 
Multiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theoremMultiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theoremSeungmo Koo
 
실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략YEONG-CHEON YOU
 
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3Heungsub Lee
 
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)Seungmo Koo
 
Windows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCPWindows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCPSeungmo Koo
 
게임 서버 성능 분석하기
게임 서버 성능 분석하기게임 서버 성능 분석하기
게임 서버 성능 분석하기iFunFactory Inc.
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019devCAT Studio, NEXON
 
[오픈소스컨설팅]Day #1 MySQL 엔진소개, 튜닝, 백업 및 복구, 업그레이드방법
[오픈소스컨설팅]Day #1 MySQL 엔진소개, 튜닝, 백업 및 복구, 업그레이드방법[오픈소스컨설팅]Day #1 MySQL 엔진소개, 튜닝, 백업 및 복구, 업그레이드방법
[오픈소스컨설팅]Day #1 MySQL 엔진소개, 튜닝, 백업 및 복구, 업그레이드방법Ji-Woong Choi
 
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012devCAT Studio, NEXON
 
게임 랭킹 ( Game Leader Board )
게임 랭킹 ( Game Leader Board )게임 랭킹 ( Game Leader Board )
게임 랭킹 ( Game Leader Board )ssuserda2e71
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018devCAT Studio, NEXON
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012devCAT Studio, NEXON
 
Ndc14 분산 서버 구축의 ABC
Ndc14 분산 서버 구축의 ABCNdc14 분산 서버 구축의 ABC
Ndc14 분산 서버 구축의 ABCHo Gyu Lee
 
게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가Seungmo Koo
 
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012devCAT Studio, NEXON
 
Multithread & shared_ptr
Multithread & shared_ptrMultithread & shared_ptr
Multithread & shared_ptr내훈 정
 

What's hot (20)

[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현
 
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
 
NoSQL 위에서 MMORPG 개발하기
NoSQL 위에서 MMORPG 개발하기NoSQL 위에서 MMORPG 개발하기
NoSQL 위에서 MMORPG 개발하기
 
Multiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theoremMultiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theorem
 
실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략
 
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
 
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
 
Windows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCPWindows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCP
 
게임 서버 성능 분석하기
게임 서버 성능 분석하기게임 서버 성능 분석하기
게임 서버 성능 분석하기
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
 
[오픈소스컨설팅]Day #1 MySQL 엔진소개, 튜닝, 백업 및 복구, 업그레이드방법
[오픈소스컨설팅]Day #1 MySQL 엔진소개, 튜닝, 백업 및 복구, 업그레이드방법[오픈소스컨설팅]Day #1 MySQL 엔진소개, 튜닝, 백업 및 복구, 업그레이드방법
[오픈소스컨설팅]Day #1 MySQL 엔진소개, 튜닝, 백업 및 복구, 업그레이드방법
 
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
 
게임 랭킹 ( Game Leader Board )
게임 랭킹 ( Game Leader Board )게임 랭킹 ( Game Leader Board )
게임 랭킹 ( Game Leader Board )
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012
 
Ndc14 분산 서버 구축의 ABC
Ndc14 분산 서버 구축의 ABCNdc14 분산 서버 구축의 ABC
Ndc14 분산 서버 구축의 ABC
 
게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가
 
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
 
Multithread & shared_ptr
Multithread & shared_ptrMultithread & shared_ptr
Multithread & shared_ptr
 

Viewers also liked

모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트Dae Kim
 
iFunEngine: 30분 만에 게임 서버 만들기
iFunEngine: 30분 만에 게임 서버 만들기iFunEngine: 30분 만에 게임 서버 만들기
iFunEngine: 30분 만에 게임 서버 만들기iFunFactory Inc.
 
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉iFunFactory Inc.
 
클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다
클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다
클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다Dae Kim
 
게임제작개론 : #6 게임 시스템 구조에 대한 이해
게임제작개론 : #6 게임 시스템 구조에 대한 이해게임제작개론 : #6 게임 시스템 구조에 대한 이해
게임제작개론 : #6 게임 시스템 구조에 대한 이해Seungmo Koo
 
게임 분산 서버 구조
게임 분산 서버 구조게임 분산 서버 구조
게임 분산 서버 구조Hyunjik Bae
 
2회 오픈소스 게임 서버 엔진 스터디 캠프 - CloudBread
2회 오픈소스 게임 서버 엔진 스터디 캠프 - CloudBread2회 오픈소스 게임 서버 엔진 스터디 캠프 - CloudBread
2회 오픈소스 게임 서버 엔진 스터디 캠프 - CloudBreadDae Kim
 
KGC 2014 프로파일러를 이용한 게임 클라이언트 최적화
KGC 2014 프로파일러를 이용한 게임 클라이언트 최적화KGC 2014 프로파일러를 이용한 게임 클라이언트 최적화
KGC 2014 프로파일러를 이용한 게임 클라이언트 최적화Jongwon Kim
 
[UniteKorea2013] Protecting your Android content
[UniteKorea2013] Protecting your Android content[UniteKorea2013] Protecting your Android content
[UniteKorea2013] Protecting your Android contentWilliam Hugo Yang
 
오픈소스 게임 서버 엔진 스터디 캠프 - CloudBread
오픈소스 게임 서버 엔진 스터디 캠프 - CloudBread오픈소스 게임 서버 엔진 스터디 캠프 - CloudBread
오픈소스 게임 서버 엔진 스터디 캠프 - CloudBreadDae Kim
 
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing SystemGCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System상현 조
 
사내스터디 발표 온라인게임서버이해 20100401
사내스터디 발표 온라인게임서버이해 20100401사내스터디 발표 온라인게임서버이해 20100401
사내스터디 발표 온라인게임서버이해 20100401guest91f89d83
 
프로세스 방어
프로세스 방어프로세스 방어
프로세스 방어주항 박
 
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - PerfornanceGCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance상현 조
 
Moving NEON to 64 bits
Moving NEON to 64 bitsMoving NEON to 64 bits
Moving NEON to 64 bitsChiou-Nan Chen
 
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기Jaeseung Ha
 
Visual studio 사용 설명서(기초 과정)
Visual studio 사용 설명서(기초 과정)Visual studio 사용 설명서(기초 과정)
Visual studio 사용 설명서(기초 과정)Lusain Kim
 
포스트모템디버깅과 프로세스 덤프 실전
포스트모템디버깅과 프로세스 덤프 실전포스트모템디버깅과 프로세스 덤프 실전
포스트모템디버깅과 프로세스 덤프 실전주항 박
 
당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니Lusain Kim
 
[실전 윈도우 디버깅] 13 포스트모템 디버깅
[실전 윈도우 디버깅] 13 포스트모템 디버깅[실전 윈도우 디버깅] 13 포스트모템 디버깅
[실전 윈도우 디버깅] 13 포스트모템 디버깅종빈 오
 

Viewers also liked (20)

모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
 
iFunEngine: 30분 만에 게임 서버 만들기
iFunEngine: 30분 만에 게임 서버 만들기iFunEngine: 30분 만에 게임 서버 만들기
iFunEngine: 30분 만에 게임 서버 만들기
 
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
 
클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다
클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다
클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다
 
게임제작개론 : #6 게임 시스템 구조에 대한 이해
게임제작개론 : #6 게임 시스템 구조에 대한 이해게임제작개론 : #6 게임 시스템 구조에 대한 이해
게임제작개론 : #6 게임 시스템 구조에 대한 이해
 
게임 분산 서버 구조
게임 분산 서버 구조게임 분산 서버 구조
게임 분산 서버 구조
 
2회 오픈소스 게임 서버 엔진 스터디 캠프 - CloudBread
2회 오픈소스 게임 서버 엔진 스터디 캠프 - CloudBread2회 오픈소스 게임 서버 엔진 스터디 캠프 - CloudBread
2회 오픈소스 게임 서버 엔진 스터디 캠프 - CloudBread
 
KGC 2014 프로파일러를 이용한 게임 클라이언트 최적화
KGC 2014 프로파일러를 이용한 게임 클라이언트 최적화KGC 2014 프로파일러를 이용한 게임 클라이언트 최적화
KGC 2014 프로파일러를 이용한 게임 클라이언트 최적화
 
[UniteKorea2013] Protecting your Android content
[UniteKorea2013] Protecting your Android content[UniteKorea2013] Protecting your Android content
[UniteKorea2013] Protecting your Android content
 
오픈소스 게임 서버 엔진 스터디 캠프 - CloudBread
오픈소스 게임 서버 엔진 스터디 캠프 - CloudBread오픈소스 게임 서버 엔진 스터디 캠프 - CloudBread
오픈소스 게임 서버 엔진 스터디 캠프 - CloudBread
 
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing SystemGCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
 
사내스터디 발표 온라인게임서버이해 20100401
사내스터디 발표 온라인게임서버이해 20100401사내스터디 발표 온라인게임서버이해 20100401
사내스터디 발표 온라인게임서버이해 20100401
 
프로세스 방어
프로세스 방어프로세스 방어
프로세스 방어
 
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - PerfornanceGCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
 
Moving NEON to 64 bits
Moving NEON to 64 bitsMoving NEON to 64 bits
Moving NEON to 64 bits
 
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기
 
Visual studio 사용 설명서(기초 과정)
Visual studio 사용 설명서(기초 과정)Visual studio 사용 설명서(기초 과정)
Visual studio 사용 설명서(기초 과정)
 
포스트모템디버깅과 프로세스 덤프 실전
포스트모템디버깅과 프로세스 덤프 실전포스트모템디버깅과 프로세스 덤프 실전
포스트모템디버깅과 프로세스 덤프 실전
 
당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니
 
[실전 윈도우 디버깅] 13 포스트모템 디버깅
[실전 윈도우 디버깅] 13 포스트모템 디버깅[실전 윈도우 디버깅] 13 포스트모템 디버깅
[실전 윈도우 디버깅] 13 포스트모템 디버깅
 

Similar to 오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발

Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Esun Kim
 
김항기 시나리오 기반 온라인 게임 서버 부하 테스트 기술
김항기 시나리오 기반 온라인 게임 서버 부하 테스트 기술김항기 시나리오 기반 온라인 게임 서버 부하 테스트 기술
김항기 시나리오 기반 온라인 게임 서버 부하 테스트 기술drandom
 
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지강 민우
 
세션3 node.js의 의미와 자바의 대안
세션3 node.js의 의미와 자바의 대안세션3 node.js의 의미와 자바의 대안
세션3 node.js의 의미와 자바의 대안Lee Ji Eun
 
Rhea_MMO_SNG_Convergence_Server_Architecture
Rhea_MMO_SNG_Convergence_Server_ArchitectureRhea_MMO_SNG_Convergence_Server_Architecture
Rhea_MMO_SNG_Convergence_Server_ArchitectureRhea Strike
 
[조진현]Kgc2012 c++amp
[조진현]Kgc2012 c++amp[조진현]Kgc2012 c++amp
[조진현]Kgc2012 c++amp진현 조
 
쓰레드.pdf
쓰레드.pdf쓰레드.pdf
쓰레드.pdfSeokju Hong
 
Open source apm scouter를 통한 관제 관리 jadecross 정환열 수석
Open source apm scouter를 통한 관제  관리 jadecross 정환열 수석Open source apm scouter를 통한 관제  관리 jadecross 정환열 수석
Open source apm scouter를 통한 관제 관리 jadecross 정환열 수석uEngine Solutions
 
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드Jeongsang Baek
 
AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017
AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017
AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017Amazon Web Services Korea
 
Private cloud network architecture (2018)
Private cloud network architecture (2018)Private cloud network architecture (2018)
Private cloud network architecture (2018)Gasida Seo
 
Apache kafka performance(latency)_benchmark_v0.3
Apache kafka performance(latency)_benchmark_v0.3Apache kafka performance(latency)_benchmark_v0.3
Apache kafka performance(latency)_benchmark_v0.3SANG WON PARK
 
Implementing remote procedure calls rev2
Implementing remote procedure calls rev2Implementing remote procedure calls rev2
Implementing remote procedure calls rev2Sung-jae Park
 
Provisioning Dedicated Game Server on Kubernetes Cluster
Provisioning Dedicated Game Server on Kubernetes ClusterProvisioning Dedicated Game Server on Kubernetes Cluster
Provisioning Dedicated Game Server on Kubernetes ClusterJu Young Lee
 
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기Jinuk Kim
 
Multithread pattern 소개
Multithread pattern 소개Multithread pattern 소개
Multithread pattern 소개Sunghyouk Bae
 
Network programming report
Network programming reportNetwork programming report
Network programming reportJongwon
 
Cloud based NGS framework
Cloud based NGS frameworkCloud based NGS framework
Cloud based NGS frameworkHyungyong Kim
 
프라우드넷 사용법 훑어보기
프라우드넷 사용법 훑어보기프라우드넷 사용법 훑어보기
프라우드넷 사용법 훑어보기Hyun-jik Bae
 

Similar to 오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발 (20)

Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
 
김항기 시나리오 기반 온라인 게임 서버 부하 테스트 기술
김항기 시나리오 기반 온라인 게임 서버 부하 테스트 기술김항기 시나리오 기반 온라인 게임 서버 부하 테스트 기술
김항기 시나리오 기반 온라인 게임 서버 부하 테스트 기술
 
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
 
세션3 node.js의 의미와 자바의 대안
세션3 node.js의 의미와 자바의 대안세션3 node.js의 의미와 자바의 대안
세션3 node.js의 의미와 자바의 대안
 
Spark sql
Spark sqlSpark sql
Spark sql
 
Rhea_MMO_SNG_Convergence_Server_Architecture
Rhea_MMO_SNG_Convergence_Server_ArchitectureRhea_MMO_SNG_Convergence_Server_Architecture
Rhea_MMO_SNG_Convergence_Server_Architecture
 
[조진현]Kgc2012 c++amp
[조진현]Kgc2012 c++amp[조진현]Kgc2012 c++amp
[조진현]Kgc2012 c++amp
 
쓰레드.pdf
쓰레드.pdf쓰레드.pdf
쓰레드.pdf
 
Open source apm scouter를 통한 관제 관리 jadecross 정환열 수석
Open source apm scouter를 통한 관제  관리 jadecross 정환열 수석Open source apm scouter를 통한 관제  관리 jadecross 정환열 수석
Open source apm scouter를 통한 관제 관리 jadecross 정환열 수석
 
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
 
AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017
AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017
AWS 클라우드 기반 게임 아키텍처 사례 - AWS Summit Seoul 2017
 
Private cloud network architecture (2018)
Private cloud network architecture (2018)Private cloud network architecture (2018)
Private cloud network architecture (2018)
 
Apache kafka performance(latency)_benchmark_v0.3
Apache kafka performance(latency)_benchmark_v0.3Apache kafka performance(latency)_benchmark_v0.3
Apache kafka performance(latency)_benchmark_v0.3
 
Implementing remote procedure calls rev2
Implementing remote procedure calls rev2Implementing remote procedure calls rev2
Implementing remote procedure calls rev2
 
Provisioning Dedicated Game Server on Kubernetes Cluster
Provisioning Dedicated Game Server on Kubernetes ClusterProvisioning Dedicated Game Server on Kubernetes Cluster
Provisioning Dedicated Game Server on Kubernetes Cluster
 
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
 
Multithread pattern 소개
Multithread pattern 소개Multithread pattern 소개
Multithread pattern 소개
 
Network programming report
Network programming reportNetwork programming report
Network programming report
 
Cloud based NGS framework
Cloud based NGS frameworkCloud based NGS framework
Cloud based NGS framework
 
프라우드넷 사용법 훑어보기
프라우드넷 사용법 훑어보기프라우드넷 사용법 훑어보기
프라우드넷 사용법 훑어보기
 

오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발

  • 1. 오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발 Casual Game Server Framework 기술내용 서버 프레임워크 CGSF에 대한 소개 최종문서수정일 2012-10-18 문서작성자 박주항 MEMO KGC 강연 최종 문서
  • 2. Casual Game Server Framework(CGSF) 1. CGSF 게임 서버 제작시 공통적으로 나타나는 부분을 모듈화한 서버 프레임워크 2. 착 안 MMO / MO 서버를 제외한 게임 서버의 유사성 초기 비용 절감 / 공통 플랫폼 제공 매번 서버 새로 만들어야 돼?? Casual Game Server Framework
  • 3. Casual Game Server Framework(CGSF) 3. 특 징 오픈 소스의 활용 License Free 완전한 게임 서버의 구현 모듈 교체 용이 게임 서버 개발 비용 절감 Casual Game Server Framework
  • 4. Casual Game Server Framework(CGSF) 4. 지향점 : 지엽적인 부분 최대한 배제 - 문자열 처리 - 네트워크 엔진 - 압축 라이브러리 누가 이미 만들어 놓은 거.. 새로 만들 필요는 없겠지… Casual Game Server Framework
  • 5. CGSF - Table of Contents 1. CGSF Internal Structure 2. Network Layer 3. Logic Queue 4. Logic Layer 5. Database Layer 6. P2P Layer 7. Sample FPS Server / Client 8. Conclusion 5 Casual Game Server Framework
  • 6. ACE Proactor Work Work Work 1……N Thread Thread Thread Logic Queue (IOCP) Logic 1. Single Thread Thread 2. 멀티 쓰레드로 변경 가능 Database Proxy Database Impl Local Database Impl Remote (DB Thread) DataBase Server Half Sync Half Async Pattern DataBase 6
  • 7. Network Layer Network Layer Logic Layer Database Layer P2P Layer 7
  • 8. Network Layer 데이터 흐름 네트워크 ACE Framework 패킷 분석 완성된 패킷 TCP ACE Packet Logic Packet Data Proactor Analyzer Queue 해당 유저 소켓 관련 데이터 유효성 체크 의미있는 내용 완성 이벤트 발생 압축 대기중이던 일꾼 스레드 작업 시작 Kernel ACE Thread Worker Thread = (Core * 2) ?? 8 Casual Game Server Framework
  • 9. Network Layer ACE Application ▣ Acceptor & Service Handler 9 Casual Game Server Framework
  • 10. Network Layer ACE Application ▣ Acceptor & Service Handler Expansion 10 Casual Game Server Framework
  • 11. Network Layer ACE Application ▣ Worker Thread Creation ACE_Thread_Manager::instance()->spawn_n(ThreadCount, ProactorWorkThread, …); 1. ThreadCount : 생성할 쓰레드 수 2. ProcatorWorkThread : Thread Entry 11 Casual Game Server Framework
  • 12. Network Layer ACE Application ▣ Worker Thread Event Detection void ProactorWorkThread(void* Args) { ACE_Proactor::instance()->proactor_run_event_loop(); } ::GetQueuedCompletionStatus(m_hIOCP, …, &pCompletionKey, …, …); 12 Casual Game Server Framework
  • 13. Network Layer ACE Application ▣ proactor_run_event_loop() NetworkEngine.dll!SFProactorService::handle_read_stream() ACEd.dll!ACE_WIN32_Asynch_Read_Stream_Result::complete() ACEd.dll!ACE_WIN32_Proactor::application_specific_code() ACEd.dll!ACE_WIN32_Proactor::handle_events(unsigned long milli_seconds=4294967295) ACEd.dll!ACE_WIN32_Proactor::handle_events() ACEd.dll!ACE_Proactor::handle_events() ACEd.dll!ACE_Proactor::proactor_run_event_loop(int (ACE_Proactor *)* eh=0x00000000) NetworkEngine.dll!ProactorWorkThread(void * Args=0x00000000) ACEd.dll!ACE_Thread_Adapter::invoke_i() ACEd.dll!ACE_Thread_Adapter::invoke() ACEd.dll!ace_thread_adapter(void * args=0x0118b558) 유저를 나타내는 오브젝트인 SFProactorService의 메소드가 호출되네 13 Casual Game Server Framework
  • 14. Network Layer Packet Analyzer 이젠 유저가 보낸 데이터를 분석할 필요가 있겠지? 14 Casual Game Server Framework
  • 15. Network Layer ACE Application ▣ User Session(Socket) & Received Data Process 15 Casual Game Server Framework
  • 16. Network Layer Packet Analyzer ▣ Packet Analyzer - 유저가 전송한 데이터를 버퍼링 - 게임 패킷을 완성 ▣ 패킷의 구조 Header Data 16 Casual Game Server Framework
  • 17. Network Layer Packet Analyzer ▣ Packet Header 구성요소 내 용 Packet Length 패킷의 전체 길이 Encryption 데이터 암호화 여부 Compress 패킷 압축 Checksum(CRC) 패킷 유효성 검증 Directive 패킷 번호 17 Casual Game Server Framework
  • 18. Network Layer Packet Analyzer ▣ 버퍼 상태 TCP 데이터가 뭉쳐오기 때문에 필요한 만큼의 데이터가 도착할 때 까지 기다릴 필요가 있어 Header Header Header Data Header Data 18 Casual Game Server Framework
  • 19. Network Layer Packet Analyzer ▣ 클라이언트 패킷 전송 Raw Packet 암호화 압축 CRC 생성 Packet ▣ 서버 패킷 수신 Raw Packet CRC 비교 압축 해제 복호화 Packet 19 Casual Game Server Framework
  • 20. Network Layer 단위 전략 패턴 음… 그런데 lzf 압축 라이브러리가 마음에 들지 않아. Zlib로 교체하고 싶은데 쉬운 방법이 없을까?? 20 Casual Game Server Framework
  • 21. Network Layer 단위 전략 패턴 ▣ 템플릿을 사용한 단위 전략 패턴 1. 상황에 따른 정책 변경 용이 2. 컴파일 타임 코드 바인딩 21 Casual Game Server Framework
  • 22. Network Layer 단위 전략 패턴 ▣ Example – Lzf, Zlib 1. class SFCompressLzf 2. BOOL Compress(BYTE* pDest, int& DestLen, BYTE* pSrc, int SrcLen); 3. BOOL Uncompress(BYTE* pDest, int& DestLen, BYTE* pSrc, int SrcLen); 1. class SFCompressZLib 2. BOOL Compress(BYTE* pDest, int& DestLen, BYTE* pSrc, int SrcLen); 3. BOOL Uncompress(BYTE* pDest, int& DestLen, BYTE* pSrc, int SrcLen); 22 Casual Game Server Framework
  • 23. Network Layer 단위 전략 패턴 ▣ Example – Packet Analyzer 1. template <typename T> 2. class SFPacketAnalyzer 3. { 4. …. 5. static T& GetCompressor(){return m_Compress;} 6. static T m_Compress; 7. …. 8. }; 23 Casual Game Server Framework
  • 24. Network Layer 단위 전략 패턴 ▣ Example - SFProactorService SFPacketAnalyzer<SFCompressLzf>::GetCompressor().Compress(……); http://www.zlib.net http://oldhome.schmorp.de/marc/liblzf.html 24 Casual Game Server Framework
  • 25. Logic Queue 네트워크 레이어의 종착역 Logic Queue 25 Casual Game Server Framework
  • 26. Network Layer Logic Queue ▣ Logic Queue 1. 네트워크 이벤트나 타이머 이벤트 등을 수신하기 위한 Queue - 로직 쓰레드에서 사용 2. IOCP 활용 26 Casual Game Server Framework
  • 27. Network Layer Logic Queue ▣ Logic Queue template <typename T> class SFIOCPQueue : public SFTSSyncQueue<T> { BOOL Push(T* pMsg) { ::PostQueuedCompletionStatus(m_hIOCP, 0, (ULONG_PTR)pMsg, NULL); return TRUE; } T* Pop() { …… SFASSERT( FALSE != ::GetQueuedCompletionStatus(m_hIOCP, &NumberOfBytesTransferred, &pCompletionKey, &pOverlapped, INFINITE)); return (T*)(pCompletionKey); } 27 Casual Game Server Framework
  • 28. Network Layer Logic Queue ▣ Logic Queue의 사용 1. Worker Thread LogicGatewaySingleton::instance()->PushPacket(pPacket); 2. Logic Thread pCommand = LogicGatewaySingleton::instance()->PopPacket(); LogicEntrySingleton::instance()->ProcessPacket(pCommand); 이걸로 무사히 네트워크 레이어로 부터 로직 레이어로 패킷을 넘기게 되었어 휴… 28 Casual Game Server Framework
  • 29. Logic Layer Network Layer Logic Layer Database Layer P2P Layer 29
  • 30. Logic Layer CGSF ▣ Logic Layer 1. 캐쥬얼 온라인 게임에서 공통적으로 나타나는 부분을 모듈화 2. 공통부분 - 채널선택 - 로비 - 게임방 진입 - 게임 로딩, - 게임 플레이 - 결과 화면 30 Casual Game Server Framework
  • 31. Logic Layer Logic Thread ▣ Single Thread 1. 깔끔한 코드 - Lock(); SharedVar++; Unlock(); 2. 컨텐츠 프로그래머 3. 원활한 게임 서비스 4. 고속 코드 수행(Node.js) 31 Casual Game Server Framework
  • 32. Logic Layer Logic Thread ▣ 주의사항 1. Blocking Code ex) Sleep() 2. 오브젝트 풀, 메모리 풀 32 Casual Game Server Framework
  • 33. Logic Layer Logic Thread ▣ Logic Thread Entry 33 Casual Game Server Framework
  • 34. Logic Layer CGSF ▣ Game Lobby 34 Casual Game Server Framework
  • 35. Logic Layer CGSF ▣ GameRoom 35 Casual Game Server Framework
  • 36. Logic Layer CGSF ▣ GameLoading 36 Casual Game Server Framework
  • 37. Logic Layer CGSF ▣ GamePlay 37 Casual Game Server Framework
  • 38. Logic Layer CGSF ▣ GameResult 38 Casual Game Server Framework
  • 39. Logic Layer 룸 오브젝트와 플레이어 오브젝트를 State Design Pattern으로 구현하면 되겠어!! 39 Casual Game Server Framework
  • 40. Logic Layer GameRoom ▣ Game Room State Design 40 Casual Game Server Framework
  • 41. Logic Layer GameRoom ▣ Player State Design 41 Casual Game Server Framework
  • 42. Logic Layer GameRoom ▣ Packet Flow(유저가 로비에서 대기방으로 진입) 42 Casual Game Server Framework
  • 43. Logic Layer GameRoom ▣ SFRoomPlay 빨강색 상자 : 최종 어플리케이션이 구현해야 될 부분 43 Casual Game Server Framework
  • 44. Logic Layer GameRoom ▣ GameMode Example FPSServer 프로젝트의 SFFreeForAll 클래스 참조 44 Casual Game Server Framework
  • 45. Logic Layer 이젠 유저로 부터 받은 데이터를 게임에서 쓰는 형태로 변환해야 겠지… 45 Casual Game Server Framework
  • 46. Logic Layer Google protocol buffer ▣ Google Protocol Buffer 1. http://code.google.com/p/protobuf/ 2. 패킷 뭉쳐오기 처리(http://javawork.egloos.com/2726467) ▣ MessagePack http://msgpack.org/ 46 Casual Game Server Framework
  • 47. Logic Layer Google protocol buffer ▣ Example – 채팅 메시지 message Chat { required string ChatMessage = 1; } Chat PktChat; PktChat.chatmessage(); 47 Casual Game Server Framework
  • 48. Database Layer Network Layer Logic Layer Database Layer P2P Layer 48
  • 49. Database Layer Database ▣ 대표적인 데이터베이스 1. MS-SQL 2. MySQL 게임서버에는 두 데이터베이스 접근을 위한 모듈이 준비되어 있으나 MS-SQL은 상용이므로 예제로 MySQL을 사용합니다 회사에서는 mysql 잘 안써요 … 49 Casual Game Server Framework
  • 50. Database Layer MySQL ▣ MySQL : http://www.mysql.com/ 50 Casual Game Server Framework
  • 51. Database Layer Implementation ▣ 구현사항 1. 데이터베이스 쿼리 호출은 블럭킹 방식 - 비동기 쿼리 호출 방식 필요 2. 로직쓰레드, DB 쓰레드간 쿼리 전달 구현 필요 51 Casual Game Server Framework
  • 52. Database Layer Implementation ▣ 비동기 처리 방식 1. DB 서버를 이용한 방식 쿼리를 담은 패킷 전송 데이터베이스 쿼리 Game Database Database Server Server 2. IOCP를 이용한 방식 3. 쓰레드 세이프 큐를 이용한 방식 52 Casual Game Server Framework
  • 53. Database Layer Implementation ▣ Half-Sync/Half-Async 모델 http://javawork.egloos.com/1818696 53 Casual Game Server Framework
  • 54. Database Layer Implementation ▣ 데이터베이스 처리 Logic Thread Manager Thread DBWorker Thread 54 Casual Game Server Framework
  • 55. Database Layer Implementation ▣ Logic Thread 에서의 데이터베이스 쿼리 요청 ※ Send 1. SFMessage* pMessage = LogicEntrySingleton::instance()->GetDBMessage(); 2. …. 3. LogicEntrySingleton::instance()->GetDataBaseProxy()->SendDBRequest(pMessage); 55 Casual Game Server Framework
  • 56. Database Layer Implementation ▣ Command Pattern 커맨드 생성 및 전송 커맨드 큐잉, 디스패치 커맨드 수행 56 Casual Game Server Framework
  • 57. Database Layer Implementation ▣ DB Query Command 수행 – SFDBWorker(Thread) 1. while(TRUE) 2. { 3. ACE_Method_Request* pReq = this->m_Queue.dequeue(); 4. …. 5. int Result = pReq->call(); 6. …. 7. } DB 일꾼 쓰레드는 정말 간단하군요!! 57 Casual Game Server Framework
  • 58. Database Layer Implementation ▣ Request의 call method 1.extern ACE_TSS<SFDatabaseMySQL> Database; 2. 3.int SFDBRequest::call(void) 4.{ 5. ….. 6. Database->Call(m_pMessage); 7. ….. 8. return 0; 9.} 58 Casual Game Server Framework
  • 59. Database Layer TLS ▣ Thread Local Storage(TLS) 59 Casual Game Server Framework
  • 60. Database Layer Implementaion 데이터베이스 호출 관련 예제로 유저 로그인 관련 샘플을 구현해 두었습니다~ 60 Casual Game Server Framework
  • 61. P2P Layer Network Layer Logic Layer Database Layer P2P Layer 61
  • 62. P2P Layer P2P ▣ P2P Layer 1. 기존 P2P 모듈 활용을 목표 62 Casual Game Server Framework
  • 63. P2P Layer P2P ▣ P2P Module 1. OCF P2P - 서버 엔진 OCF의 기능 중 하나 - http://www.ocf.kr/ 2. Raknet 3. Enet - League of Legends에서도 사용?? - http://enet.bespin.org 63 Casual Game Server Framework
  • 64. P2P Layer P2P ▣ 피어간 연결망 - 1 Peer1 1 Peer1 Relay Relay Server Server Peer2 Peer2 2 Super Peer Super Peer Peer3 3 Peer3 64 Casual Game Server Framework
  • 65. P2P Layer P2P ▣ 피어간 연결망 - 1 Peer1 Peer1 Relay Relay Server Server Peer2 Peer2 Peer4 Peer3 Peer4 Peer3 65 Casual Game Server Framework
  • 66. P2P Layer P2P ▣ 피어간 연결망 - 2 Relay Peer1 Relay Server Peer1 Server Peer4 Peer2 Peer2 Peer4 Peer3 Peer3 66 Casual Game Server Framework
  • 67. P2P Layer P2P ▣ P2P Manager Interface 67 Casual Game Server Framework
  • 68. P2P Layer P2P ▣ P2P Method(IUDPNetworkCallback) 1. HandleUDPNetworkMessage 2. ReportMyIP 68 Casual Game Server Framework
  • 69. P2P Layer P2P ▣ Lock Free Library : liblfds(http://www.liblfds.org) BOOL P2PManager::PushPacket(BYTE* pData, int Length) … queue_guaranteed_enqueue(m_pQueue, pP2PData); … BOOL P2PManager::Update() … while (queue_dequeue(m_pQueue, (void**)&pP2PData)) { m_pUDPCallback->HandleUDPNetworkMessage(…); … 69 Casual Game Server Framework
  • 70. P2P Layer P2P Mechanism ▣ Report My IP Relay Svr Game Svr 1 2 3 Client 1 1. Request My Public IP 2. Receive My Public IP 3. Report My IP 70 Casual Game Server Framework
  • 71. P2P Layer P2P Mechanism ▣ Sharing IP & Connect 방에 입장하자 마자 피어간 연결을 하니 Game Room 게임 시작이 빠르겠군요. 1 2 3 Client 1 Client 2 Client 3 4 1. Enter Room 2. Receive Room Member IP List 3. Receive New Member IP 4. Connect Each Other 71 Casual Game Server Framework
  • 72. CGSF Sample FPS Server / Client 72 Casual Game Server Framework
  • 73. Sample FPS Server / Client Sample FPS Client ▣ Programming a Multiplayer FPS in DirectX 1. 2004년에 출간 2. 네트워크를 DirectPlay로 구현 3. GUI Library 73 Casual Game Server Framework
  • 74. Sample FPS Server / Client Sample FPS Client ▣ CEGUI(Crazy Eddi’s GUI) http://www.cegui.org.uk/wiki/index.php/Main_Page 74 Casual Game Server Framework
  • 75. Sample FPS Server / Client Sample FPS Server ▣ FPS Server 1. 소스 코드 참조 75 Casual Game Server Framework
  • 76. CGSF 결론 및 정리 76 Casual Game Server Framework
  • 77. 결론 및 정리 정리 CGSF의 목적 77 Casual Game Server Framework
  • 78. 결론 및 정리 CGSF의 보강 ▣ CGSF의 보강 1. TDD 기반 개발 2. 스트레스 테스트 3. 로직 쓰레드의 멀티쓰레드화 4. 서버간 연결 구조 5. 게임 옵션 세분화 6. 서비스 툴 제작 CGSF CGSS 78 Casual Game Server Framework
  • 79. 결론 및 정리 CGSF ▣ CGSF 관련 사항 1. Source Code : http://dev.naver.com/projects/cgsf 2. 개발 툴 : Visual Studio 2012 RC Professional 버전 3. DirectX SDK 4. Tortoise SVN 차후 소스 업데이트는 Git-Hub에서 79 Casual Game Server Framework
  • 80. CGSF Q&A 80 Casual Game Server Framework
  • 81. 결론 및 정리 CGSF ▣ 제 소개 1. 약 력 서강대 물리학/컴퓨터학 복수전공 한국산업기술대학 디지털엔터테인먼트 석사 서강대학교 게임교육원 시스템 프로그래밍 시간 강사 JCE Server Programmer(2006 ~ 현재) 2. E-Mail : juhang3@daum.net 3. 블로그 : http://blog.naver.com/pdpdds 4. 목표 : C++ OS 제작 5. 좋아하는 게임 장르 : 어드벤처 81 Casual Game Server Framework
  • 82. CGSF 감사합니다 !!!! 82 Casual Game Server Framework