CannonWars 프로젝트 회고
2013/05 월경
투입 13/06월말
당시상황 : 통신개발 완료상태, 기본프로토콜 동작상태 ( 로그인, 매치, 전투데이터 전달 )
상용목적의 c++ 개발서버를 처음 개발시작
gtest, protobuf, gflags, glog 라이브러리 처음으로 접함
gtest
테스트 주도개발을 하는데 있어서 굉장히 편리한 툴이였으나 유닛테스트 단위를 넘어 통합테스트 까지 하다보니 규모가 커졌음. 다음에는 유닛테스트 단위까지만 사용하는게 좋지 않을까..
protobuf
처음 접해본것이였는데 사용법, 성능, 확장성 모두 굉장히 뛰어났다. 단점은 proto-net 이용시 optional 값에 버그가 있다 ( 디폴트 지정하지 않았을시 오류남 )
gflags
플래그 관리를 편리하게 하는 도구 였는데 이번에는 설명부분을 제대로 적지 않았는데 제대로 적으면 추후 다른 이용자의 가독성을 높일수 있을꺼같다.
glog
로그 라이브러리인데 엄청나게 많은 기능이 있다는것을 최근에야 알았다. 그전까지는 주로 protobuf 의 디버그 메시지 확인용도로만 씀.
단점으로는 만들어지는 로그파일을 세부단위로 나눌수 있는 방법이 없다는 것이다. 서버 전체 주요로그를 한개파일로 남길때 쓰임.
boost
부스트 라이브러리는 정말 공부를 많이 하고 써야된다는걸 다시한번 느꼈다.
서버의 Connector 에서는 쓰래드부분의 잘못된 코드를 바로잡는데 굉장히 오래 걸렸다. 실제로 서비스는 생성되어졌으나 쓰래드와 연결이 전혀 되지않고있었다.
허브서버내 패킷처리부분에서는 락관련 문제가 있었는데 mutex에대해 다시한번 생각해보게 되었다.
git + gerrit
아직 혼자 작업하던 버릇이 남아있는지 작은 작업단위로 커밋을 하는게 습관화 되지 못했다.
gcov + lcov(gcov)
python + twisted
파이썬으로 동작하는 app을 만들어본것은 처음이었는데 신선한 경험이었다.
성능에 대한 기대가 크지않은 프로젝트에는 적격일듯하다.
그리고 파이썬으로 개발할때는 테스트를 정말 잘만들어야할것같다. 동작하지않으면 오류가 안뜨기때문..
약 10~11월경 투자자 변경
상황
캐릭터(모델), 투석기(능력), 소모형 아이템, 강화시스템 ( 클라이언트 <-> 서버 <->디비 구조)
캐틱터(실능력) + 장비 아이템 + 조합시스템 + 레벨시스템 + 랭크업시스템(허브구조 도입 / redis 도입) //대규모 구조변경
12~1월경 투자자 재변경
다중캐릭터 + 장비아이템 + 조합시스템, 빠른성장시스템, - 카카오톡 + 멀티플래폼 // 구조변경
14년 2월 24일부 프로젝트 드랍
실구현상황
c++ :
GameServer, HubServer, CacheServer
- gtest, boost, protobuf, gflags, glog
python
LogServer
- twisted
DB
Postgres, Redis
TCP통신 기반
클라이언트 - 게임서버 ( 비동기 통신 )
게임서버 - 허브서버 ( 동기통신 )
캐시서버 - 허브서버 ( 비동기통신 )
서버내 게임 오브젝트들을 Cache.proto로 정의하여 최대한 프로토콜 상태를 유지함
- 현재 구조적으로는 BAD
- protobuf와 c++좀더 깊이 이해할시 구조적으로도 굉장히 좋은 모양새가 나올수도 있다.
Good List :
DB 성능향상 ( 거의 모든 데이터들이 선 Response 후 실 데이터 변환 )
Generator작성 (기본값이 CannonWars이긴하나 플래그를통해 범용으로 사용가능 )
Bad List :
1. 게임 - 허브 ( 동기통신 )
2. 프로젝트 기본 목표 변경시 기존의 구조를 그대로 유지하려한점
3. 2번 이유 이후 테스트 주도개발이 제대로 되지 않음
4. 테스트 소홀
'Program' 카테고리의 다른 글
homebrew 이용 특정버전 설치 (0) | 2014.07.28 |
---|---|
redis gui tools (0) | 2014.03.26 |
[PostgreSQL] 간단 사용법 (0) | 2013.06.10 |
Code Review - Gerrit (Install) (0) | 2013.05.23 |
gerrit 설치 가이드. (0) | 2013.05.23 |