입문 책이므로  접근성도 좋고, 비교적 쉽게 개발할 수 있는 Windows에서 개발을 진행하도록 하겠습니다.

윈도우 개발 툴이라면, 역시 Visual Studio를 빼놓을 수 없겠네요.
게다가 최근에는 거의 무료로 풀어버린 Visual Studio Community 2013이 있으니 이 버젼으로 진행하도록 하겠습니다.
물론 이클립스나 다른 툴을 사용해도 컴파일만 되면 큰 문제는 없습니다.

저는 서브 에디터기로 노트패드 플러스를 사용하고 있습니다.

 

 IDE 컴파일러 – Visual Studio Community 2013

 http://www.visualstudio.com/ko-kr/downloads/download-visual-studio-vs#DownloadFamilies_2

 

 

 

다음은 소스 관리 툴입니다.

SVN은 범용적인 소스 관리 툴로서 이전 작업과 현재 작업 비교등
프로그램 작성에 있어서 undo를 마음껏 해줄 수 있는 툴 입니다.

저도 이 서버 프로그램 작성에 svn을 이용했으며, 최종 리비젼은 130 으로 나오네요. 

 http://tortoisesvn.net/

 

 

 

다음은 UML툴인 StarUML입니다.
서버 프로그램처럼 복잡한 시스템들이 얽힌 프로그램은 구조를 제대로 작성해 놔야
나중에 더 복잡한 처리, 응용등이 안정성있게 동작하게 됩니다.

이를 시각적으로 구현 시켜주는 툴로서 StarUML을 사용합니다.

 

 http://staruml.io

 

 

마지막으로 원노트 입니다.

프로그램이 크다 보니까 이것 저것 작업 공유를 남길 필요가 있습니다.
DB서버 IP는 무엇이다, 암호는 무엇이다, 어떤 작업을 할때 주의점등...

이런 여러 자료를 문서/캡쳐로 공유 가능하게 해주는 솔루션을 많이 사용하는데,

가정에서는 흔히 접할 수 있는것이 원노트정도로 보시면 좋을 것 같네요.

 

 원노트

 

 

 

 

위 내용은 제가 집필한 "게임 서버 프로그래밍 입문" 책의 내용중 일부 부분에 대한 내용입니다.

전체 소스 코드와 책 구입에 대해서는 http://rosagigantea.tistory.com/589 에 링크 시켰습니다.

 

온라인 게임 서버가 어떤 프로그램인지 먼저 생각해 봅시다.

 

 

 블리자드의 디아블로3

넥슨GT의 테일즈 위버 

보통 온라인 게임 하면 위와 같이 다수와 접속해서 즐기는 MMORPG 온라인 게임도 있을 것이고,  디아블로3처럼 특정 몇 명만 같이 즐기는게임도 있습니다.

하지만 겉으로 보이는 클라이언트로는 서버 내부에서 어떤처리를 하는지 잘 알 수 없죠.
클라이언트 패킷을 받고, 내부 메모리를 조작하여, 반영내용을 DB에 넣고, 결과 패킷을 돌려주는 일련의 행위가
게임 서버 프로그램이죠.
이런 프로그램들을 만들고 관리하는 서버 프로그래머들은 평소에 어떤 일을 할까요?


만약 신규 게임 프로젝트에 배속 되었다면 당연히 게임 서버를 만들겠죠?
기획자들이 이것저것 새로운 게임에 대한 콘텐츠 기획을 제안할 것이고 그것에 맞게 프로그램 구조를 고려해 서버 프로그램을 작성할 것입니다.

보통 신규 게임이면 지금 서비스하고 있는 타 온라인 게임과 최대한 차별화를 두거나,
많은 부분 차용해서 만들 테니(WOW, 디아, 리니지, 던파, 서든 등) 그 게임을 열심히 해보고
시스템 설계를 할 것입니다.

 

반대로, 이미 서비스 중인 게임의 유지보수를 하는 서버 프로그래머라면 어떤 일을 할까요?
이 유지보수를 할 정도이면 성공한 온라인 게임이고, 고정 마니아 층이 있어서, 매일 매일 일정 수익이 나옵니다.

대부분 유저 레벨이 높은 레벨에 포진하기 때문에 신규 유저 보다는 기존 유저들이 질려서 나가는 비율이 높습니다. 즉 CCU(Concurrent connected User)가 꾸준히 떨어지는데, 이들을 잡기위한 콘텐츠 추가 (유행하는 LOL과 같은 게임 넣기라던가, 이벤트, 신규 케릭 추가등...), 시스템의 부분 개편 등을 주로 작업하며, 기획자들이 원하는 콘텐츠를 추가하기 위한 기능 추가 작업이 대부분입니다.

프로그래머 입장에서는 기존 코드 위에 개선작업을 해야 하므로 기존 코드를 분석하는 능력과 리펙토링(코드 구조를 좀 더 효율적으로나 보기 좋게 개선)을 할 줄 아는 능력이 요구됩니다.

 

제 책을 읽으시는 분께서 게임 회사에 입사하셔서 처음 맡는 프로젝트가 신규 개발팀일지, 라이브 유지 팀일지는 잘 모르겠지만, 결국 어느 쪽 길을 선택하든 프로그램 개발을 해야 하고 녹녹하지 않은 길입니다.

신규 게임의 경우 구현 할 수 있는 모든 가능성을 염두 해서 일정 내에 작성해야 할 것이고, 라이브 팀의 경우 기존의 엔진을 요구사항에 맞도록 리펙토링 할 수 있는 능력이 필요합니다.

물론 공통으로 게임 서버가 어떻게 돌아가는지 내부 움직임을 잘 알고 있어야 서버 프로그래머로서 원활하게 일 할 수 있겠죠?

 

그런 의미로 제 책에서는 서문에 말씀드렸던 cubesat같은 간단한 온라인 서버 코어를 만들어보고 이들 시스템이 어떻게 유기적으로 연결되고 데이터 처리를 하는지 기술하려고 합니다.

물론 여기 책은 게임 서버의 아주 극단적인 작은 부분입니다. 이것으로 게임 서버 만들 줄 압니다. 하기에는 턱없이 부족합니다만, 바퀴와 자체의 어렴풋한 모습이라도 알아야 자동차 비슷한 것이라도 만들 수 있다고 생각합니다.

겨우 이정도 인가? 라기 보다는 여기에 어떠한 철학으로 프로그램 코딩을 했는지 찬찬히 살펴봐 주셨으면 합니다.


<필자가 이 책을 기술하면서 작성한 프로그램 입니다>

 

 

위 내용은 제가 집필한 "게임 서버 프로그래밍 입문" 책의 내용중 일부 부분에 대한 내용입니다.

전체 소스 코드와 책 구입에 대해서는 http://rosagigantea.tistory.com/589 에 링크 시켰습니다.

최근 연말이라고 다들 쉴때,

크리스마스 연휴와 신정 연휴를 사용해서 못했던 서버 작성을 몰아서 했습니다 (리비젼이 30대에서 70대까지 올라갔으니...)

 

나름 서버간 통신도 하고 패킷 메이커도 제대로 동작하며, 클라를 c#으로 짜서 제대로 동작하니까

처음 목표는 달성한거 같은데... 아직 갈길이 먼거 같습니다.

 

 

 

이제 남은 작업은 문서화?

DB 관련 프로그램 만들고

로그도 좀 분석할 수 있도록 모아놔야 겠고

관리 툴 / 서버도 만들어야 겠고..

아직 갈길이 멀고 멉니다.

최근 저는 나름 괜찮은 회사에서 괜찮은 프로젝트를 하고 있습니다.


그런데, 이 프로젝트가 꽤 옛날 부터 내려온 프로젝트이고 (거의 11년쯤...)

내부적으로 이쪽 업계에서 유명한 그분 께서 만드신 Objective-C 1.0 (아이폰에서 쓰는 2.0 이 아닌.... 초창기) 코드라서

입사 이후 변화 하는 기술 적응 (C++11 같은..) 을 놓지고 있다는 생각이 들더군요.


팀원분들은 슬램덩크 만화처럼, 우리의 옛날 코드... 리눅스 / 솔라리스 기반의 언어가 기초 뿌리이기 때문에

지금 코드로 기본기만 확실히 다져 놓으면,

모던 C++ 정도는 보면 금방 따라 잡으니 걱정하지 말라고 하십니다.


물론 그 의견에는 동의 하지만, 몇몇 인터넷으로 모던 C++ 에 새로 추가 된 기능들이 꽤 재미있게 봤고

이를 게임 서버로 만들면 여러 노가다 작업을 편리하게 처리 할 수 있지 않을까 란 생각이 들었습니다.

(물론 ... 언어가 달라서 이를 회사 코드로 넣으려면 라이브러리를 포팅해야 겠지만...)


그래서 오랫만에 Visual Studio 에서 코딩을 해볼까 하는 생각으로 조금씩 서버 프로그램을 만들어 보고 있습니다.


지금은 패킷을 주고 받아 채팅까지 만들어 본 상태입니다.


리눅스 같은 CUI 기반에 너무 익숙해서 그런지 저런 파워쉘에서 서버 로그 보는 편이 훨씬 좋은거 같군요.


그리고 클라이언트는 언어를 바꿔서 요즘 뜨는 C#으로 만들어 보았습니다.

뭐랄까, 역시 패킷 패킹하는 처리가 조금 머리를 써야 하긴 했지만, 제대로 동작하니 좋네요.


나중에 좀 정리 되면, 저도 다른분들처럼 연재 시리즈를 넣어 볼까 합니다.


+ Recent posts