LOGIN • JOININ

...

1... CGCII를 학습하려면 어떤 사전 지식이 필요한가?
CGCII는 ŸC와 C++ 프로그래밍 언어와 네트워크에 관한 기본적인 지식만 있다면 누구나 손쉽게 서버를 개발할 있도록 설계되어 있습니다.
Ÿ일반적으로 튜터리얼에 대한 학습은 몇일이면 모두 볼수 있을 정도의 분량이며 어느 정도 서버의 경험을 가진 분들이라면 몇시간 정도로 모두 파악할 수 있을 정도의 분량입니다.
 

2... CGCII의 수많은 클래스 수많은 함수들을 어떻게 다 익혀 사용하나?
CGCII에는 수백개의 클래스와 수천개의 함수들이 있습니다. 하지만 실제 사용하는 프로그래머 입장에서는 이 많은 클래스와 함수들을 모두 알 필요가 없습니다.
오히려 방대한 규모에 비해 알아야만 하는 것들이 정말 이 정도만 알면 되느냐고 생각할 수도 잇습니다.
하지만 그럴만한 이유가 있습니다.

첫째, 대부분 템플릿메타프로그램으로 자동적으로 적절한 클래스가 선택되므로 단지 몇가지의 사용법만 이해하면 어떤 클래스가 선택되어 사용되는 가는 많은 부분이 자동화 되어 있습니다.

둘째, 수많은 클래스들 중 80%이상이 컴포넌트 혹은 중간에 상속받아 사용하는 클래스들입니다. 따라서 최종 사용자들은 알필요가 거의 없습니다. 추후 컴포넌트들을 조합해 특화된 클래스를 정의하고자 할 때에 해당 부분만 이해하면 됩니다.

셋째, 대부분 공통화된 인터페이스로 구성되어 있습니다.  따라서 기본적인 몇가지의 개념만 이해하면 그전체적 구조에 다 적용할 수 있을 정도로 간단합니다.

넷째, 대부분 자동생성, 자동 초기화 처리되어 있어 대부분의 경우 사용을 위한 초기화 과정이나 설정과정이 거의 없거나 최소화 되어 있습니다.

다섯째, 특별한 형태로 작성해야만 동작하는 것들이 최소화 되어 있습니다.  추상화된 구조로 설계되어 몇가지의 추상화된 구조만 이해하면 손쉽게 사용이 가능합니다.

이 튜터리얼들은 알아야하는 가장 기본적인 내용만 설명을 한 것임과 동시에 실제 사용하는 거의 대부분의 동작들에 대한 예제입니다.
사실 이 튜터리얼의 내용만 활용해도 충분히 서버를 제작할 수 있습니다.


3... CGCII 튜터리얼은 어떤 순서로 학습해야 되는가?
각 튜터리얼 프로젝트는 설명하고자 하는 기능 혹은 함수의 사용법을 최대한 쉽게 익힐 수 있도록 하기 위해 최대한 부수적인 코드를 배제하고 최소한의 구현만을 했습니다.
Ÿ튜터리얼 중 1, 2, 3 과 같이 숫자가 붙혀진 것은 가장 기본적인 내용이거나 다음 부분의 이해를 위해 반드시 알아두어야 하는 내용입니다. 
또 EX1, EX2 .. 와 같이 EX가 붙은 예제는 좀더 심화된 내용이나 다양한 변형 예제들입니다.
EX가 붙은 내용들은 해당 기능이  필요할 때만 보면 되는 내용이거나 좀 심오한 내용이므로 기본을 모두 이해하고 필요할 때 보는 것을 권장합니다.


4... CGCII 튜터리얼이 담고 있는 구체적 내용은?

⑴ 객체 시스템
CGCII에서 사용되는 독자적인 객체의 동적할당과 해제 그리고 스마트 포인터의 체계에 대한 설명입니다.
CGCII는 동적 객체를 관리하기 위해 참조계수를 사용하며 자체적인 스마트포인터 체제와 풀시스템 그리고 가비지 콜렉션 처리를 하고 있습니다.  이에 대한 개념과 사용법에 대한 설명입니다.
참조계수와 스마트포인터에 대한 이해가 있다면 금방 이해가 가능할 것입니다.
핵심 키워드
      ICGReferenceCount 인터페이스 클래스와 참조계수
      CGPTR<T> 클래스
      NEW<T>함수

⑵ Ÿ쓰레드 시스템

CGCII는 기본적으로 모두 비동기적으로 수행되는 작은 처리 단위를 쓰레드풀에서 분산처리되는 ProAct 패턴으로 동작하도록 설계되어 있습니다.
이에 대한 개념과 사영법에 대한 설계 부분입니다.

핵심 키워드
      ICGExecutor 인터페이스 클래스
      ICGExecutable 인터페이스 클래스
      REGISTER_SCHEDULABLE()함수/ UNREGISTERSCHEDULABLE()함수
      POST_EXECUTE() 함수
      REGISTER_SCHEDULABLE()함수/ UNREGISTERSCHEDULABLE()함수


⑶ Ÿ서버용 소켓 (접속 받기)
드디어 TCP로  접속을 받아들이는 서버의 제작에 관련된 내용입니다.
CGCII에서 네트워크 서버를 구상하는 가장 기본적인 객체는  Socket 과 Acceptor입니다.
이를 사용해 간단히 서버를 제작하는 방법에 대해서 설명합니다.
접속받기와 메시지 송신 그리고 메시지 수신에 대해서 간략히 설명합니다.
핵심 키워드
      CGNet::Socket::CTCP<T> 클래스
      OnConnect() 멤버 가상함수
      OnConnect() 멤버 가상함수
      OnMessage() 멤버 가상함수
      CGNet::Acceptor:: 클래스
      CGMESSAGE_MAP

⑷ Ÿ클라이언트용 소켓 (접속 하기)
TCP로 서버에 접속하는 기능을 가진 Socket을 구성하고 사용하는 방법을 설명합니다.
핵심 키워드
      CGNet::IO::NConnector 클래스
      CGNet::IO::NConnecotrReconnection 클래스


⑸ Ÿ그룹 시스템

서버는 기본적으로 많은 수의 접속을 받아들여 처리를 합니다. 이때 받아들인 많은 소켓들을 관리하기 위한 가장 기본적인 개념으로 Group을 제공합니다.
Group은 단순히 소켓을 묶어 놓는 관리자라기 보다는 가상의 위치에 해당하는 개념이라고 할수 있습니다. 
Group은 기본적인 채팅방부터 MMORPG같은 대형 게임까지 아주 유용하게 활용될수 있는 CGCII Server의 핵심 기능 중에 하나입니다.
핵심 키워드
      ICGGroupMemberable
      CGServer::Group::CArray<TMEMBER, ...>
      CGServer::Group::CList<TMEMBER, ...>
      Group의 EnterMember()함수
      LeaveGroup()함수
      Group의 OnMemberEntering(...)/OnMemberEntered(...) 멤버 가상함수
      Group의 OnMemberLeaving(...)/OnMemberLeaved(...) 멤버 가상함수
      NCGDispatchable 클래스
      NCGDispatchable 클래스의 RegisterMessageable()/UnregisterMessageable()함수

⑹ 이벤트 시스템
게임 서비스의 운용을 위해서는 정해진 시간 혹은 일정한 주기로 처리해야 하는 일들이 있을 수 있습니다.
 예를 들어 ‘경험치 2배’같은 이벤트 혹은 매월 순위리스트를 리셋한다든지...
이런 이벤트의 구현을 편리하게 해주는 시스템이 이벤트 시스템입니다.

핵심 키워드
      ICGEventObject 인터페이스 클래스


⑺ Ÿ쿼리 시스템

SQL 서버로부터 계정 정보를 읽거나 쓰고자 할 때나 웹서버로 부터 인증 서비스를 이용하고자 할 때 외부의 DB나 Redis 혹은 웹서버로부터 쿼리가 필요합니다.
CGCII에서 제공하는 쿼리 시스템의 기본적인 사용법에 대해서 설명하는 튜터리얼입니다. 
핵심 키워드
      ICGQuerier와 ICGQuery 인터페이스 클래스


5... CGCII 튜터리얼을 모두 익혔다면 다음은?
Ÿ튜터리얼을 모두 익혔다면 기본적인 서버에 필요한 기본적인 기능과 구현형태에 대해 이해했을 것이라고 생각합니다.
왠만한 복잡한 서버도 이들의 응용으로 설계하고 구성이 가능하리라고 봅니다.

하지만 서버의 개발이란 것은 너무나 방대해 단순히 기능만 알고 있다고 해서 손쉽게 개발할 수 있거나 혹은 효율적으로 개발할 수 있다고 생각하지는 않습니다.
Ÿ실제 서버들이 어떠한 형태로 구현되었는지 그 설계의 부분은 기능에 대한 지식을 익히는 것과는 또다른 부분일 수 있습니다 .
Ÿ따라서 구현하고자 하는 서버 혹은 네트워크 서비스가 있다면 유사한 다양한 서버의 구현 사례나 구조 등을 접해보면 많은 도움이 되리라고 봅니다.

ŸCGCII에서는 다양한 형태의 게임 서버 구현 사례와 효율적인 구조에 대한 제안이나 예제 그리고 상황에 특화된 모듈을 제공하고자 합니다.