6. 2008년 (넷텐션 설립년도)
• PC 온라인
• 윈도 서버
• 물리적 서버
• 자체제작 서버툴
• TCP, UDP
• 넷마블,피망,한게임,…
2013년
• ...그리고 모바일
• ...그리고 멀티플랫폼
• ...그리고 클라우드 서버
• ...그리고 오픈소스 서버툴
• ...그리고 HTTP
• ...그리고 매시업
8. • 고객사들이 던지는 요구
명세 채우는 것만으로도
벅찬 상황! ㅠ.ㅠ
• 뭐 나쁘지는 않아요.
– 실제 수요자들의 명확한 실
제 수요를 맞추는 것임
– 나름 재미있음 -.-;;;
Development
branch
master
feature branch
(엄청 활발함)
서비스 론칭한
업체들의 굳은
자 버전
9. • 저희회사에 많이들 지원해주세요 ^.^
• 현재 엔진팀 7명(저 빼고)인데 여전히 바쁨
-0-;
10. 모바일
• 게임 출시 경험이 몇차례 있는 모바일 게임 업
체들은, 생각보다 성능에 목숨거는 분위기
– 아저씨, 아줌마들의 저사양 폰을 최대한 많이 지원
해야 해서
– 메모리 문제도 엄청 신경씀
– 유니티… 개발도 편하고 퀄러티도 괜찮지만, 성능
미리 생각해서 피하기도 함
• 프라우드넷 비 유니티 버전에 대한 수요가 높
음
11. • 모바일 게임에서 성능 관련 최대 쟁점
– frame rate (느린 것 말고) 지글거림 문제
– 폰 뜨거워짐, 배터리 문제
– 3G
• 게임 개발사들마다 성향이 다르다!
– 하이엔드 경험을 위해 60Hz 돌격하는 프로젝트
– 저사양폰+배터리 소모 크게 고려하면서 15Hz로 기는
프로젝트
• 이런 곳은 멀티스레딩 싫어함 -0- 소켓 버퍼가 커야 함
• 10년전 데스크탑 성능이지만, RAM은 속도도 용량
도 거지같음
12. • 안드로이드에서 Java는 생각보다 발열 문제가 심
각
– 프레임레이트 문제는 둘째치고라도
• 다행히, 구글의 “NDK는 성능 이익이 별로에요~”는 알고
보니 뻥
• 프라우드넷 네트워크 클라이언트 코어는 이미
NDK (C++ API)와 pure Java로 만들어져 있음
• 배터리 문제 때문에, pure Java 버전의 하단은 NDK
로 교체할 예정
13. • 안드로이드폰마다 조금씩 다른 스펙
– iOS, Android의 소켓 버퍼 최대 크기
– 스레딩 퍼포먼스
– 갤럭시 S4(LTE-A 말고 LTE 국산 모델)의 클럭
resolution
• 이미 해결
14. • 3G vs. Wifi
– 게임 하다가 wifi존에서 나간 경우
– 게임 하다가 wifi존에 도착한 경우
– 게임 플레이하다 전화가 온 경우
– 3G 송신큐 제어를 통한 QoS
– 3G의 랜덤 랙 => Suporious RTO
• 일부는 해결됐고, 나머지는 진행중
15. 멀티 플랫폼
• C++, C#, ActionScript, UnrealScript, Java
• Unity3D, Cocos2D-X, Unreal Engine, Marmalade
• iOS Native, Android Java, Android NDK
• Adobe Flash
• 헉헉…다 만들어놨음 (Unity, Flash만 공식 출시고 나머지는 베타중)
16. • 다양한 개발 환경 지원
– Visual Studio, Eclipse, XCode, Unity Editor
– ProudNet IDL Compiler for Mac OS
• 해결
17. • 플랫폼마다 다른 비동기 네트워크 I/O 모델
– iocp,epoll,kqueue,simple poll
(웬 simple poll? Marmalade 때문에)
– 짜증나더라도, epoll,kqueue,simple poll은
• reactor 모듈로, iocp는 proactor 모듈로 이원화 후
• 제각각 케이스를 만들어야 성능에 유리
• syscall과 1:1 대응하기 때문. 모바일에서 성능에 중요한
요소임
• 다 해놨는데, 리팩토링중 -0-;
18. • Win32 API 쓰던 부분들 다 뜯어냄
• #if 떡칠
최대한 모아놓고 거기서만 #if 떡칠
• 대부분 해놨음. 제일 까다로왔던 부분은 의
외로… string 부분임 -0-;
19. • QPC/QPF vs. clock_gettime vs. gettimeofday
– iOS에서 clock_gettime은 음수랍니다 -0-;;;;
– Java는 unsigned integer 사용 불가능
• /dev/random ≠ /dev/urandom
• wcslen, wsprintf in NDK Java는 UTF-32 -0-;;
• Mono ≠ .Net Framework
– iPhone3GS, iPhone 4에서 일으키는 문제
– Mono Socket.Connect 함수의 버그
• 이것 말고도 많았던 것 같은데 기억이 안남 -0-;;;
• 어쨌거나 다 해결.
21. • MySQL, MS SQL, Postgre
• ADO.NET vs. ADO6 Back to the ODBC
• C++/CLI API 구조 변경
– 서버 모듈은 C++/CLI 그대로 유지하되,
네트워크 클라이언트 모듈은 pure C#으로
• 리눅스 서버(아…언제 들어가냥 -0-;;;)
23. 논리적 단일 서버
• 모바일 게임에서
단일 서버는 거
의 필수
• ProudNet DB
cache 시스템으
로 논리적 단일
서버는 이렇게 게임
DB
유저계
정 DB
DB
cache
server
게임
DB
유저계
정 DB
DB
cache
server
게임
DB
유저계
정 DB
DB
cache
server
게임
DB
유저계
정 DB
DB
cache
server
게임서버
게임서버
게임서버
매핑DB 매핑DB
매핑DB
24. 클라우드 서버
• 서비스 중에도 서버 개수를 늘리거나 줄일 수 있게 만들
어야
• 실시간 멀티플레이를 클라우드 서버에서 하면?
– 클라우드 서버의 특성상, 언제든지 랙이 생길 수 있음!
– 층간 소음 문제이므로 피할 수 없음!
– 싫으면 물리적 서버 써야함
– 아니면 타 업체의 서버가 자기 서버의 물리적 서버(하이퍼
바이저)에 입점 못하게 해야 함
(가능하긴 한가? -_-)
– 플레이어 위치 동기화에서 P2P를 제한적으로 사용
(그래도 3G는 랜덤 랙 못 피함)
• 많은 수의 서버 인스턴스를 두자
• 클라우드 서버에서 매핑 DB는 필수
25. 다양한 오픈소스 툴킷
• 프라우드넷에서는
– provider 모듈만 제공하거나
• Zabbix, Zookeeper
– 혹은, 대체 모듈을 자체제작할라구요
• Redis, memcached
• 아직 시작도 못하고 있음! ㅜ.ㅜ
• 일단, json provider부터 준비해야하는데
(입사지원좀 해주세요)
26. 매시업
• 카카오, 페이스북, GREE, 게임센터, 스팀
• 앱스토어, 구글플레이
• 탭조이
• 이것들의 매시업은 소스 형태로 제공할 예정