SlideShare a Scribd company logo
What is Game Server ?이름           : 최흥배E-mail        : jacking75@gmail.comHomePage: jacking75.cafe24.comBlog: http://blog.naver.com/jacking75
1. 온라인 게임서버의 OS 플랫폼Windows한국에서 게임서버를 만드는 경우 가장 일반적으로 선택하는 OS 이다.게임 개발자들에게 가장 익숙한 OS.
Linux비 Windows OS 중에서 가장 대중성을 가지고 있는 OS 이다.Windows  보다는 덜 익숙하지만 점점 대중성 및 관련 자료를 늘리고 있다.
FreeBSDUnix 계열의 OS 로서 Linux와 거의 비슷함.Linux에 비해 대중성은 약하지만 Unix를 사용하였던 사람들로부터 지지를 받음.온라인 게임서버가 실행되는 OS 플랫폼은 거의 대부분이 Windows, Linux, FreeBSD 이 셋 중의 하나이다.이중 Windows 플랫폼용이 가장 많다.
게임 서버 프로그래머가 보는 각 OS의 장단점
2. 게임 장르에 따른 게임서버의 특징2. 1 . 온라인 보드 게임 일반적으로 높지 않은 성능을 요구하며, 게임의 규모가 크지 않다.
 C/S 방식으로 통신을 하며 기능별로 서버를 분산하기 보다는 하나의 서버에서 모든 것을 다하는 경우가 많다.
보드 게임 특성상 기본 틀은 비슷하지만 게임 룰만 다른 경우가 일반적이므로 프레임워크 식으로 서버를 만들면 좋다.
개발 툴 및 프레임 워크가 잘 갖추어져 있으면 한 명의 프로그래머가 서버, 클라이언트 모두를 할 수 있다.2. 2 . 캐주얼 게임 보드 게임 서버에 비해 게임의 규모가 더 크며, 액션 성이 높은 게임이 많다.
 게임 플레이에서는 주로 P2P 방식을 이용하여 그 외 부분에서는 C/S 방식 사용( P2P에서는 UDP, C/S에서는 TCP 사용 ).
 보드 게임 서버와 MMORPG 게임서버의 중간 정도의 규모 급이다.
요즘에는 ‘캐주얼’이라는 이름에 걸맞지 않게 개발 기간이 MMORPG와 비슷.2. 3 . MMORPG 게임 게임의 규모가 크고 그에 따라서 개발 인원도 많다.
 거의 C/S 방식의 TCP 프로토콜을 사용한다.
 많은 기능과  높은 성능을 필요로 하므로 큰 기능별로 서버가 분산된다.
 3D 환경의 경우 지형 처리 및 NPC의 길 찾기가 중요 해진다.3. 온라인 게임서버 제작을 위한 기술 및 개발 환경3. 1. 각 OS의 비 동기 IO 방식Windows IOCP.Windows 2000 이상부터  지원.참고 자료 : MSDN
Linuxepoll.2.5.x 커널에 추가 되기 시작하였으며 2.6.x 커널 대에서는 기본으로 탑재.참고 자료 : http://www.xevious7.com/tag/epoll
FreeBSDKqueue.Windows, Linux에 비해 일찍부터 비동기 I/O 지원.참고 자료 : http://jacking75.cafe24.com/Network/FreeBSD_Index.htm3. 2. Multi-Thread  일반 PC와 달리 서버 PC는 이전부터 단일 CPU 보다는 듀얼 CPU 이상의 CPU를 사용 했으므로 Thread를 도입한 경우가 많으며 서버 프로그래머들이 많은 관심을 가지고 있는 분야이다.
 현재 출시되는 CPU는 듀얼코어 이상의 CPU가 출시되고 있으므로 이전보다 더욱 더 Thread 기술이 중요해지고 있음.
 Windows의 경우 Windows OS의 Thread 라이브러리를 사용하고, 유닉스계열(Linux, FreeBSD 등)에서는 Pthread라이브러리를 사용한다.
 Boost의 Thread 라이브러리를 사용하면 OS 독립적인 Thread 기술 사용 가능. Intel에서 스레딩 빌딩 블록(TBB) 라는 Thread 관련 라이브러리 공개( 단 유료로 구입한 경우에만 기술 지원을 받을 수 있음).http://blog.naver.com/jacking75/140040961225
 Thread 사용 시에는 동기화와 성능 분산이 중요하다.일반적으로 과도한 동기화는 Thread 컨텍스트스위칭에 따른 비용 증가로 오히려 성능이 더 내려 갈 수도 있다.
 Thread 관련 툴을 사용하면 좋다.인텔에서 제공하는 Thread Checker, Thread Profiler 등이 있다.
Thread 사용은 이익과 위험이 따른다. 보수적인 관점에서 접근을 해야 된다.특히 서버의 로직 처리 부분을 Multi-Thread로 할 때에는 트랜잭션 처리에 아주 조심해야 된다.3. 3. Database(DB)  온라인 게임 서버에서 중요한 것 중의 하나가 DB 이다.
 일반적으로 규모가 큰 회사 등은 DBA가 있어서 이들을 통해서 DB 작업을 하지만 아직까지는 대다수가 서버 프로그래머가 DBA의 역할까지 한다.
 일반적으로 많이 사용되는 DB는 MS SQL, MySQL, Oracle 등이다.보통 게임서버가 운용되는 OS에 따라가는 편이므로 MS SQL을 많이 사용한다.
 DB 프로그래밍 시 MS SQL의 경우는 ODBC, DO, OLE DB 중에서 하나를 사용,My SQL 및 Oracle은 네이티브 라이브러리를 주로 사용한다.

More Related Content

What's hot

NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀
승명 양
 
빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)
YEONG-CHEON YOU
 
Iocp 기본 구조 이해
Iocp 기본 구조 이해Iocp 기본 구조 이해
Iocp 기본 구조 이해
Nam Hyeonuk
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013
devCAT Studio, NEXON
 
실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략
YEONG-CHEON YOU
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
devCAT Studio, NEXON
 
게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가
Seungmo Koo
 
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
devCAT Studio, NEXON
 
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
Seungmo Koo
 
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
Heungsub Lee
 
게임서버프로그래밍 #2 - IOCP Adv
게임서버프로그래밍 #2 - IOCP Adv게임서버프로그래밍 #2 - IOCP Adv
게임서버프로그래밍 #2 - IOCP Adv
Seungmo Koo
 
온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기
Seungjae Lee
 
마비노기듀얼 이야기-넥슨 김동건
마비노기듀얼 이야기-넥슨 김동건마비노기듀얼 이야기-넥슨 김동건
마비노기듀얼 이야기-넥슨 김동건
강 민우
 
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - PerfornanceGCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
상현 조
 
Next-generation MMORPG service architecture
Next-generation MMORPG service architectureNext-generation MMORPG service architecture
Next-generation MMORPG service architecture
Jongwon Kim
 
코드 생성을 사용해 개발 속도 높이기 NDC2011
코드 생성을 사용해 개발 속도 높이기 NDC2011코드 생성을 사용해 개발 속도 높이기 NDC2011
코드 생성을 사용해 개발 속도 높이기 NDC2011
Esun Kim
 
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
devCAT Studio, NEXON
 
[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기
Sang Heon Lee
 
게임 분산 서버 구조
게임 분산 서버 구조게임 분산 서버 구조
게임 분산 서버 구조
Hyunjik Bae
 
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
Heungsub Lee
 

What's hot (20)

NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀
 
빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)
 
Iocp 기본 구조 이해
Iocp 기본 구조 이해Iocp 기본 구조 이해
Iocp 기본 구조 이해
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013
 
실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
 
게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가
 
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
 
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
 
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
 
게임서버프로그래밍 #2 - IOCP Adv
게임서버프로그래밍 #2 - IOCP Adv게임서버프로그래밍 #2 - IOCP Adv
게임서버프로그래밍 #2 - IOCP Adv
 
온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기
 
마비노기듀얼 이야기-넥슨 김동건
마비노기듀얼 이야기-넥슨 김동건마비노기듀얼 이야기-넥슨 김동건
마비노기듀얼 이야기-넥슨 김동건
 
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - PerfornanceGCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
 
Next-generation MMORPG service architecture
Next-generation MMORPG service architectureNext-generation MMORPG service architecture
Next-generation MMORPG service architecture
 
코드 생성을 사용해 개발 속도 높이기 NDC2011
코드 생성을 사용해 개발 속도 높이기 NDC2011코드 생성을 사용해 개발 속도 높이기 NDC2011
코드 생성을 사용해 개발 속도 높이기 NDC2011
 
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
 
[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기
 
게임 분산 서버 구조
게임 분산 서버 구조게임 분산 서버 구조
게임 분산 서버 구조
 
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
 

Viewers also liked

MinWin에 대해서
MinWin에 대해서MinWin에 대해서
MinWin에 대해서
흥배 최
 
김항기 시나리오 기반 온라인 게임 서버 부하 테스트 기술
김항기 시나리오 기반 온라인 게임 서버 부하 테스트 기술김항기 시나리오 기반 온라인 게임 서버 부하 테스트 기술
김항기 시나리오 기반 온라인 게임 서버 부하 테스트 기술
drandom
 
KGC10 - Visual C++10과 디버깅
KGC10 - Visual C++10과 디버깅KGC10 - Visual C++10과 디버깅
KGC10 - Visual C++10과 디버깅
흥배 최
 
닷넷 Apache avro
닷넷 Apache avro닷넷 Apache avro
닷넷 Apache avro
흥배 최
 
2013년 7월 현재 트렌드에서의 프라우드넷은 어떻게 적응하고 있는가
2013년 7월 현재 트렌드에서의 프라우드넷은 어떻게 적응하고 있는가2013년 7월 현재 트렌드에서의 프라우드넷은 어떻게 적응하고 있는가
2013년 7월 현재 트렌드에서의 프라우드넷은 어떻게 적응하고 있는가
Hyun-jik Bae
 
NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션
흥배 최
 
Zookeeper소개
Zookeeper소개Zookeeper소개
Zookeeper소개
Younggi Lim
 
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발
흥배 최
 
[KGC 2011]Boost 라이브러리와 C++11
[KGC 2011]Boost 라이브러리와 C++11[KGC 2011]Boost 라이브러리와 C++11
[KGC 2011]Boost 라이브러리와 C++11
흥배 최
 
공성대전 C# 사용기
공성대전 C# 사용기공성대전 C# 사용기
공성대전 C# 사용기
Myoung-gyu Gang
 
Tdc2013 선배들에게 배우는 server scalability
Tdc2013 선배들에게 배우는 server scalabilityTdc2013 선배들에게 배우는 server scalability
Tdc2013 선배들에게 배우는 server scalability
흥배 최
 
에어헌터 for kakao 포스트모템(공개용)
에어헌터 for kakao 포스트모템(공개용)에어헌터 for kakao 포스트모템(공개용)
에어헌터 for kakao 포스트모템(공개용)
Woo Yeong Choi
 
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback
흥배 최
 

Viewers also liked (14)

MinWin에 대해서
MinWin에 대해서MinWin에 대해서
MinWin에 대해서
 
김항기 시나리오 기반 온라인 게임 서버 부하 테스트 기술
김항기 시나리오 기반 온라인 게임 서버 부하 테스트 기술김항기 시나리오 기반 온라인 게임 서버 부하 테스트 기술
김항기 시나리오 기반 온라인 게임 서버 부하 테스트 기술
 
KGC10 - Visual C++10과 디버깅
KGC10 - Visual C++10과 디버깅KGC10 - Visual C++10과 디버깅
KGC10 - Visual C++10과 디버깅
 
닷넷 Apache avro
닷넷 Apache avro닷넷 Apache avro
닷넷 Apache avro
 
2013년 7월 현재 트렌드에서의 프라우드넷은 어떻게 적응하고 있는가
2013년 7월 현재 트렌드에서의 프라우드넷은 어떻게 적응하고 있는가2013년 7월 현재 트렌드에서의 프라우드넷은 어떻게 적응하고 있는가
2013년 7월 현재 트렌드에서의 프라우드넷은 어떻게 적응하고 있는가
 
NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션
 
Zookeeper소개
Zookeeper소개Zookeeper소개
Zookeeper소개
 
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발
 
[KGC 2011]Boost 라이브러리와 C++11
[KGC 2011]Boost 라이브러리와 C++11[KGC 2011]Boost 라이브러리와 C++11
[KGC 2011]Boost 라이브러리와 C++11
 
공성대전 C# 사용기
공성대전 C# 사용기공성대전 C# 사용기
공성대전 C# 사용기
 
Tdc2013 선배들에게 배우는 server scalability
Tdc2013 선배들에게 배우는 server scalabilityTdc2013 선배들에게 배우는 server scalability
Tdc2013 선배들에게 배우는 server scalability
 
에어헌터 for kakao 포스트모템(공개용)
에어헌터 for kakao 포스트모템(공개용)에어헌터 for kakao 포스트모템(공개용)
에어헌터 for kakao 포스트모템(공개용)
 
NLog 소개
NLog 소개NLog 소개
NLog 소개
 
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback
 

Similar to What is Game Server ?

이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
devCAT Studio, NEXON
 
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프
Jinuk Kim
 
Azure로 MMO게임 서비스하기
Azure로 MMO게임 서비스하기Azure로 MMO게임 서비스하기
Azure로 MMO게임 서비스하기
YEONG-CHEON YOU
 
최민호 - 국내 포털에서의 우분투 (2012Y03M31D)
최민호 - 국내 포털에서의 우분투 (2012Y03M31D)최민호 - 국내 포털에서의 우분투 (2012Y03M31D)
최민호 - 국내 포털에서의 우분투 (2012Y03M31D)
Ubuntu Korea Community
 
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
Jeongsang Baek
 
스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들
Hyunjik Bae
 
[아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기
[아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기 [아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기
[아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기
iFunFactory Inc.
 
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
Sumin Byeon
 
OpenStack
OpenStackOpenStack
OpenStack
ULUG
 
ASP.NET과 C#으로 개발하는 대규모 소셜 게임
ASP.NET과 C#으로 개발하는 대규모 소셜 게임ASP.NET과 C#으로 개발하는 대규모 소셜 게임
ASP.NET과 C#으로 개발하는 대규모 소셜 게임
흥배 최
 
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
iFunFactory Inc.
 
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
강 민우
 
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
Miyu Park
 
NAVER의 웹/HTML5환경 대응 현황
NAVER의 웹/HTML5환경 대응 현황NAVER의 웹/HTML5환경 대응 현황
NAVER의 웹/HTML5환경 대응 현황
NAVER Engineering
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)
수보 김
 
Rhea_MMO_SNG_Convergence_Server_Architecture
Rhea_MMO_SNG_Convergence_Server_ArchitectureRhea_MMO_SNG_Convergence_Server_Architecture
Rhea_MMO_SNG_Convergence_Server_Architecture
Rhea Strike
 
Exynos4210 beginnerrev10
Exynos4210 beginnerrev10Exynos4210 beginnerrev10
Exynos4210 beginnerrev10
mimul
 
장호상, 유재우 제안서 130327
장호상, 유재우 제안서 130327장호상, 유재우 제안서 130327
장호상, 유재우 제안서 130327
호상 장
 
피니엔진
피니엔진피니엔진
피니엔진
승우 백
 
게임 서버 기술 현황 및 전망
게임 서버 기술 현황 및 전망게임 서버 기술 현황 및 전망
게임 서버 기술 현황 및 전망
Vong Sik Kong
 

Similar to What is Game Server ? (20)

이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
 
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프
 
Azure로 MMO게임 서비스하기
Azure로 MMO게임 서비스하기Azure로 MMO게임 서비스하기
Azure로 MMO게임 서비스하기
 
최민호 - 국내 포털에서의 우분투 (2012Y03M31D)
최민호 - 국내 포털에서의 우분투 (2012Y03M31D)최민호 - 국내 포털에서의 우분투 (2012Y03M31D)
최민호 - 국내 포털에서의 우분투 (2012Y03M31D)
 
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
 
스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들
 
[아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기
[아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기 [아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기
[아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기
 
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
 
OpenStack
OpenStackOpenStack
OpenStack
 
ASP.NET과 C#으로 개발하는 대규모 소셜 게임
ASP.NET과 C#으로 개발하는 대규모 소셜 게임ASP.NET과 C#으로 개발하는 대규모 소셜 게임
ASP.NET과 C#으로 개발하는 대규모 소셜 게임
 
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
 
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
 
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
 
NAVER의 웹/HTML5환경 대응 현황
NAVER의 웹/HTML5환경 대응 현황NAVER의 웹/HTML5환경 대응 현황
NAVER의 웹/HTML5환경 대응 현황
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)
 
Rhea_MMO_SNG_Convergence_Server_Architecture
Rhea_MMO_SNG_Convergence_Server_ArchitectureRhea_MMO_SNG_Convergence_Server_Architecture
Rhea_MMO_SNG_Convergence_Server_Architecture
 
Exynos4210 beginnerrev10
Exynos4210 beginnerrev10Exynos4210 beginnerrev10
Exynos4210 beginnerrev10
 
장호상, 유재우 제안서 130327
장호상, 유재우 제안서 130327장호상, 유재우 제안서 130327
장호상, 유재우 제안서 130327
 
피니엔진
피니엔진피니엔진
피니엔진
 
게임 서버 기술 현황 및 전망
게임 서버 기술 현황 및 전망게임 서버 기술 현황 및 전망
게임 서버 기술 현황 및 전망
 

More from 흥배 최

Twitter의 snowflake 소개 및 활용
Twitter의 snowflake 소개 및 활용Twitter의 snowflake 소개 및 활용
Twitter의 snowflake 소개 및 활용
흥배 최
 
Go web framework 비교[번역 정리]
Go web framework 비교[번역 정리]Go web framework 비교[번역 정리]
Go web framework 비교[번역 정리]
흥배 최
 
Bash on Ubuntu on Windows
Bash on Ubuntu on WindowsBash on Ubuntu on Windows
Bash on Ubuntu on Windows
흥배 최
 
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
흥배 최
 
Wtl 개요와 설치
Wtl 개요와 설치Wtl 개요와 설치
Wtl 개요와 설치
흥배 최
 
Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심
흥배 최
 
Mongodb2.2와 2.4의 신 기능 소개
Mongodb2.2와 2.4의 신 기능 소개Mongodb2.2와 2.4의 신 기능 소개
Mongodb2.2와 2.4의 신 기능 소개
흥배 최
 
Mongodb 관리
Mongodb 관리Mongodb 관리
Mongodb 관리
흥배 최
 
Mongodb 개발 포인트
Mongodb 개발 포인트Mongodb 개발 포인트
Mongodb 개발 포인트
흥배 최
 
닷넷프레임워크에서 Redis 사용하기
닷넷프레임워크에서 Redis 사용하기닷넷프레임워크에서 Redis 사용하기
닷넷프레임워크에서 Redis 사용하기
흥배 최
 
Twitter의 대규모 시스템 운용 기술 어느 고래의 배속에서
Twitter의 대규모 시스템 운용 기술 어느 고래의 배속에서Twitter의 대규모 시스템 운용 기술 어느 고래의 배속에서
Twitter의 대규모 시스템 운용 기술 어느 고래의 배속에서
흥배 최
 
Twitter에 있어서 대규모 시스템 구성, 3개의 원칙과 시스템
Twitter에 있어서 대규모 시스템 구성, 3개의 원칙과 시스템Twitter에 있어서 대규모 시스템 구성, 3개의 원칙과 시스템
Twitter에 있어서 대규모 시스템 구성, 3개의 원칙과 시스템
흥배 최
 
MongoDB 모바일 게임 개발에 사용
MongoDB 모바일 게임 개발에 사용MongoDB 모바일 게임 개발에 사용
MongoDB 모바일 게임 개발에 사용
흥배 최
 
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
흥배 최
 
[Sdc 3rd] Boost multi_index
[Sdc 3rd] Boost multi_index[Sdc 3rd] Boost multi_index
[Sdc 3rd] Boost multi_index
흥배 최
 
[0602 박민근] Direct2D
[0602 박민근] Direct2D[0602 박민근] Direct2D
[0602 박민근] Direct2D
흥배 최
 
[Final]조진현 direct write
[Final]조진현 direct write[Final]조진현 direct write
[Final]조진현 direct write
흥배 최
 
Facebook이 대규모 확장성 도전에서 배운 것
Facebook이 대규모 확장성 도전에서 배운 것Facebook이 대규모 확장성 도전에서 배운 것
Facebook이 대규모 확장성 도전에서 배운 것
흥배 최
 
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것
흥배 최
 
왜 애플리케이션이 Hang 되어도 OS는 괜찮을까?
왜 애플리케이션이 Hang 되어도 OS는 괜찮을까?왜 애플리케이션이 Hang 되어도 OS는 괜찮을까?
왜 애플리케이션이 Hang 되어도 OS는 괜찮을까?
흥배 최
 

More from 흥배 최 (20)

Twitter의 snowflake 소개 및 활용
Twitter의 snowflake 소개 및 활용Twitter의 snowflake 소개 및 활용
Twitter의 snowflake 소개 및 활용
 
Go web framework 비교[번역 정리]
Go web framework 비교[번역 정리]Go web framework 비교[번역 정리]
Go web framework 비교[번역 정리]
 
Bash on Ubuntu on Windows
Bash on Ubuntu on WindowsBash on Ubuntu on Windows
Bash on Ubuntu on Windows
 
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
 
Wtl 개요와 설치
Wtl 개요와 설치Wtl 개요와 설치
Wtl 개요와 설치
 
Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심
 
Mongodb2.2와 2.4의 신 기능 소개
Mongodb2.2와 2.4의 신 기능 소개Mongodb2.2와 2.4의 신 기능 소개
Mongodb2.2와 2.4의 신 기능 소개
 
Mongodb 관리
Mongodb 관리Mongodb 관리
Mongodb 관리
 
Mongodb 개발 포인트
Mongodb 개발 포인트Mongodb 개발 포인트
Mongodb 개발 포인트
 
닷넷프레임워크에서 Redis 사용하기
닷넷프레임워크에서 Redis 사용하기닷넷프레임워크에서 Redis 사용하기
닷넷프레임워크에서 Redis 사용하기
 
Twitter의 대규모 시스템 운용 기술 어느 고래의 배속에서
Twitter의 대규모 시스템 운용 기술 어느 고래의 배속에서Twitter의 대규모 시스템 운용 기술 어느 고래의 배속에서
Twitter의 대규모 시스템 운용 기술 어느 고래의 배속에서
 
Twitter에 있어서 대규모 시스템 구성, 3개의 원칙과 시스템
Twitter에 있어서 대규모 시스템 구성, 3개의 원칙과 시스템Twitter에 있어서 대규모 시스템 구성, 3개의 원칙과 시스템
Twitter에 있어서 대규모 시스템 구성, 3개의 원칙과 시스템
 
MongoDB 모바일 게임 개발에 사용
MongoDB 모바일 게임 개발에 사용MongoDB 모바일 게임 개발에 사용
MongoDB 모바일 게임 개발에 사용
 
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
 
[Sdc 3rd] Boost multi_index
[Sdc 3rd] Boost multi_index[Sdc 3rd] Boost multi_index
[Sdc 3rd] Boost multi_index
 
[0602 박민근] Direct2D
[0602 박민근] Direct2D[0602 박민근] Direct2D
[0602 박민근] Direct2D
 
[Final]조진현 direct write
[Final]조진현 direct write[Final]조진현 direct write
[Final]조진현 direct write
 
Facebook이 대규모 확장성 도전에서 배운 것
Facebook이 대규모 확장성 도전에서 배운 것Facebook이 대규모 확장성 도전에서 배운 것
Facebook이 대규모 확장성 도전에서 배운 것
 
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것
 
왜 애플리케이션이 Hang 되어도 OS는 괜찮을까?
왜 애플리케이션이 Hang 되어도 OS는 괜찮을까?왜 애플리케이션이 Hang 되어도 OS는 괜찮을까?
왜 애플리케이션이 Hang 되어도 OS는 괜찮을까?
 

What is Game Server ?

  • 1. What is Game Server ?이름 : 최흥배E-mail : jacking75@gmail.comHomePage: jacking75.cafe24.comBlog: http://blog.naver.com/jacking75
  • 2. 1. 온라인 게임서버의 OS 플랫폼Windows한국에서 게임서버를 만드는 경우 가장 일반적으로 선택하는 OS 이다.게임 개발자들에게 가장 익숙한 OS.
  • 3. Linux비 Windows OS 중에서 가장 대중성을 가지고 있는 OS 이다.Windows 보다는 덜 익숙하지만 점점 대중성 및 관련 자료를 늘리고 있다.
  • 4. FreeBSDUnix 계열의 OS 로서 Linux와 거의 비슷함.Linux에 비해 대중성은 약하지만 Unix를 사용하였던 사람들로부터 지지를 받음.온라인 게임서버가 실행되는 OS 플랫폼은 거의 대부분이 Windows, Linux, FreeBSD 이 셋 중의 하나이다.이중 Windows 플랫폼용이 가장 많다.
  • 5. 게임 서버 프로그래머가 보는 각 OS의 장단점
  • 6. 2. 게임 장르에 따른 게임서버의 특징2. 1 . 온라인 보드 게임 일반적으로 높지 않은 성능을 요구하며, 게임의 규모가 크지 않다.
  • 7. C/S 방식으로 통신을 하며 기능별로 서버를 분산하기 보다는 하나의 서버에서 모든 것을 다하는 경우가 많다.
  • 8. 보드 게임 특성상 기본 틀은 비슷하지만 게임 룰만 다른 경우가 일반적이므로 프레임워크 식으로 서버를 만들면 좋다.
  • 9. 개발 툴 및 프레임 워크가 잘 갖추어져 있으면 한 명의 프로그래머가 서버, 클라이언트 모두를 할 수 있다.2. 2 . 캐주얼 게임 보드 게임 서버에 비해 게임의 규모가 더 크며, 액션 성이 높은 게임이 많다.
  • 10. 게임 플레이에서는 주로 P2P 방식을 이용하여 그 외 부분에서는 C/S 방식 사용( P2P에서는 UDP, C/S에서는 TCP 사용 ).
  • 11. 보드 게임 서버와 MMORPG 게임서버의 중간 정도의 규모 급이다.
  • 12. 요즘에는 ‘캐주얼’이라는 이름에 걸맞지 않게 개발 기간이 MMORPG와 비슷.2. 3 . MMORPG 게임 게임의 규모가 크고 그에 따라서 개발 인원도 많다.
  • 13. 거의 C/S 방식의 TCP 프로토콜을 사용한다.
  • 14. 많은 기능과 높은 성능을 필요로 하므로 큰 기능별로 서버가 분산된다.
  • 15. 3D 환경의 경우 지형 처리 및 NPC의 길 찾기가 중요 해진다.3. 온라인 게임서버 제작을 위한 기술 및 개발 환경3. 1. 각 OS의 비 동기 IO 방식Windows IOCP.Windows 2000 이상부터 지원.참고 자료 : MSDN
  • 16. Linuxepoll.2.5.x 커널에 추가 되기 시작하였으며 2.6.x 커널 대에서는 기본으로 탑재.참고 자료 : http://www.xevious7.com/tag/epoll
  • 17. FreeBSDKqueue.Windows, Linux에 비해 일찍부터 비동기 I/O 지원.참고 자료 : http://jacking75.cafe24.com/Network/FreeBSD_Index.htm3. 2. Multi-Thread 일반 PC와 달리 서버 PC는 이전부터 단일 CPU 보다는 듀얼 CPU 이상의 CPU를 사용 했으므로 Thread를 도입한 경우가 많으며 서버 프로그래머들이 많은 관심을 가지고 있는 분야이다.
  • 18. 현재 출시되는 CPU는 듀얼코어 이상의 CPU가 출시되고 있으므로 이전보다 더욱 더 Thread 기술이 중요해지고 있음.
  • 19. Windows의 경우 Windows OS의 Thread 라이브러리를 사용하고, 유닉스계열(Linux, FreeBSD 등)에서는 Pthread라이브러리를 사용한다.
  • 20. Boost의 Thread 라이브러리를 사용하면 OS 독립적인 Thread 기술 사용 가능. Intel에서 스레딩 빌딩 블록(TBB) 라는 Thread 관련 라이브러리 공개( 단 유료로 구입한 경우에만 기술 지원을 받을 수 있음).http://blog.naver.com/jacking75/140040961225
  • 21. Thread 사용 시에는 동기화와 성능 분산이 중요하다.일반적으로 과도한 동기화는 Thread 컨텍스트스위칭에 따른 비용 증가로 오히려 성능이 더 내려 갈 수도 있다.
  • 22. Thread 관련 툴을 사용하면 좋다.인텔에서 제공하는 Thread Checker, Thread Profiler 등이 있다.
  • 23. Thread 사용은 이익과 위험이 따른다. 보수적인 관점에서 접근을 해야 된다.특히 서버의 로직 처리 부분을 Multi-Thread로 할 때에는 트랜잭션 처리에 아주 조심해야 된다.3. 3. Database(DB) 온라인 게임 서버에서 중요한 것 중의 하나가 DB 이다.
  • 24. 일반적으로 규모가 큰 회사 등은 DBA가 있어서 이들을 통해서 DB 작업을 하지만 아직까지는 대다수가 서버 프로그래머가 DBA의 역할까지 한다.
  • 25. 일반적으로 많이 사용되는 DB는 MS SQL, MySQL, Oracle 등이다.보통 게임서버가 운용되는 OS에 따라가는 편이므로 MS SQL을 많이 사용한다.
  • 26. DB 프로그래밍 시 MS SQL의 경우는 ODBC, DO, OLE DB 중에서 하나를 사용,My SQL 및 Oracle은 네이티브 라이브러리를 주로 사용한다.
  • 27. 원활한 개발 및 이후의 서비스를 위해서는 관계지향적인모델링이 아주 중요하다.3. 4. P2P 캐주얼 게임에서 주로 사용하는 네트웍 연결 방식.
  • 28. C/S 방식에서는 주로 TCP를 사용하지만 P2P에서는 UDP를 사용한다.
  • 29. 액션 게임처럼 빠른 움직임이 필요한 경우 사용한다.
  • 30. NAT(이른바 공유기)은 Full Cone NAT, Restricted Cone NAT, Port Restricted Cone NAT, Symmetric NAT 의 4가지 방식이 있다.
  • 31. 모든 상황에서 홀펀칭에 의한 연결이 이루어 지지 않으므로 비상책으로 릴레이 서버는 필수 이다.3. 5. 길 찾기 주로 MMPRPG에서 사용한다.
  • 32. 3D 방식의 게임에서 지능적이며 빠른 처리를 위해서는 길 찾기 기능이 중요.
  • 33. 길 찾기 관련 라이브러리 구입 및 자체 개발을 한다.
  • 34. 한국에서 많이 사용하는 상용 라이브러리로는 PathEngine이 있으며,LandMaster라는 국산 상용 라이브러리가 있다.
  • 35. 상용 라이브러리를 구입하더라도 게임에 따라 변경이 필요 할 수 있으며그래픽 파트에서 관련 데이터를 잘 만들어줘야 된다.3. 6. 유닉스 계열 OS에서의 프로그래밍 환경Windows 에서 Visual Studio 툴에서 개발 및 디버깅을 한 후 최종적으로 실제 서비스 할 OS에서 빌더 한다.
  • 36. GUI 환경에서 이클립스나KDevelop IDE에서 코딩 및 디버깅 한다.
  • 37. 콘솔 환경에서 Vim(vi)등을 사용하여 코딩을 한 후 gdb로 디버깅 한다.KDevelop
  • 38. 3. 7. 서버의 비정상 종료 서버 개발자가 가장 무서워 하는 것 중 하나가 서버가 갑자기 죽어버리는 경우이다.
  • 39. 덤프 파일(유닉스 계열에서는 코어 파일)이 있으면 빠르게 대처 할 수 있다.
  • 40. Windows에서는 VS에서 관련 옵션 설정을 하고 MS 사이트에서 심볼을 가져오면 된다.참고 : http://www.debuglab.com/index.html
  • 41. 유닉스 계열 OS에서는 프로그램이 죽으면 실행 파일이 있는 위치에 .core 파일이 생성, gdb를 사용하여 죽었을 때의 프로그램 상태를 파악한다.WinDBG
  • 42. 4. 서버 구성4. 1. DataBase와 연결되는 서버 단순하게 쿼리문을 실행하고 통보를 해주는 것과 캐싱 기능을 가지는 것으로 나눌 수 있다.
  • 43. 보통 회원 정보 등의 DB와 연결되는 서버는 Common DB, Account SQL DB, Member DB, Web DB, Cache DB 등으로 불린다.
  • 44. 게임 플레이에 대한 정보가 있는 DB와 연결되는 서버는 Game DB, User Data SQL DB, Agent DB, Procy DB 등으로 불린다. 4. 2. 게임 서버(실제 게임을 하는)를 연결 해 주는 서버
  • 45. 하나의 월드(서버군)에 있는 각 게임서버 사이를 연결 해준다.
  • 46. 커뮤니티 기능 역할(채팅, 파티 등), 전체 월드 관리 기능, 게임서버 사이의 중계 기능을 한다.
  • 47. World Management Server, Community Server, Messenger Server, Center Server 등으로 불린다.4. 3. NPC를 관리 하는 서버 NPC의 AI를 처리하면서 게임서버와 연결된다.
  • 48. NPC 기능이 게임서버와 분리 되는 경우 부하 분산과 게임서버가 간결해지는 장점이 있지만 게임서버와의 통신을 해야 되므로 내부 통신량 증가와 딜레이 타임이 있을 수 있다.
  • 49. NPC Server, Mob Server, AI Server 등으로 불린다.4. 4. 서버를 관리 하는 서버 위의 서버들을 관리하는 서버.
  • 50. 서버의 비 정상 종료 감지, 서버 ON/OFF 등을 기본적으로 한다.
  • 51. Management Server, Monitoring Server 등으로 불린다.4. 5. 로그인 서버
  • 52. CommonDBLogin ServerMessenger ServerGame DBGame ServerNPC ServerMessenger ServerGame DBGame ServerNPC Server
  • 53. 5. 툴제작 및 데이터의 분리5. 1 . 툴 제작 빠른 개발, 편한 개발, 실수 방지에 도움이 된다.
  • 54. 툴 개발에는 실제 만들 게임만큼 제대로 된 요구분석이 필요하다.
  • 55. 서버 파트에서는 서버 관리, DB 조작 툴 등이 필요하다.5. 2 . 데이터의 분리 게임에서 사용하는 데이터를 프로그램과 분리 한다.
  • 56. 서버의 경우 DB에 게임에서 사용할 데이터를 저장 후 사용하고, 클라이언트는 DB에서 필요한 데이터만 파일로 저장 후 사용한다.
  • 57. 게임의 유연성이 높아지며 비 프로그래머의 참여도가 높아진다.
  • 58. 데이터의 잘못된 입력에 따른 부작용을 조심해야 된다.6. 게임 개발 흐름서버 프로그래머의 입장에서의 게임개발 흐름은 아래와 같다.서버 OS 플랫폼 선정DataBase선정네트웍 라이브러리 제작 및 구입만들 게임에 대한 전체 계획을 잡는 단계서버 구조 설계기획 및 클라이언트와 협의게임을 각 기능별 구현 단계구현 구상 및 패킷 정의구현클라이언트와 테스트기획 및 QA에 통보
  • 59. 7. 테스트 테스트는 아주 중요하다.
  • 60. 테스트는 QA에서 하는 테스트도 있지만 여기서는 프로그래머가 구현 이후 자체적인 테스트를 하는 것을 말한다.
  • 61. 보통 구현 해야 될 작업의 30 ~ 50% 테스트를 통해서 소비 된다.
  • 62. 테스트는 중요하지만 어렵고 아주 지루하다.
  • 63. 테스트는 클라이언트와 서버의 협력이 절대적으로 필요하다.
  • 64. 원활한 테스트를 하기 위해서는 사전에 어떻게 하면 테스트를 편하게 더 빨리 끝낼 수 있을까 생각을 하고 준비를 해야 한다.
  • 65. 가능하면 Cheat 기능(또는 GM 기능)을 사전에 만들어 테스트에서 사용한다.7.1. GM 및 Cheat 기능 HP, MP, 돈, 경험치, 레벨 등 변경.
  • 66. 워프 기능. 지정된 위치로 이동, 지정된 캐릭터로 이동, 상대방을 호출.
  • 67. 현재 서버의 특정 유저의 정보 보기.
  • 68. 현재 서버의 파티 정보 보기.
  • 69. 채팅 창을 이용한 Text Command도 좋지만 간단한 GUI를 제공하면 더 좋다.
  • 70. 그러나 Cheat 기능을 사용 할 때는 side effect를 조심 해야 한다.예) 캐릭터의 HP를 증가 시킨 경우 주위의 다른 클라이언트에 통보 해 주지않으면 서로 간에 HP 정보가 다르게 나와서 버그로 오인.
  • 71. 7.2. 버그 없는 서버를 만들기 위한 방법서버 / 클라이언트의 협력이 아주 아주 중요하다.클라이언트의 요청이 실패한 경우 어떤 이유의 실패인지 결과를 통보한다. 예) // 길드를 만들 수 있는지 체크 if( 돈이 부족) return -1; if( 레벨 부족) return -2; …………. return 1; // 성공GM 기능, Gheat기능 및 실행 중인 서버의 상태를 알 수 있는 기능 구현.- 테스트를 하면서 스트레스를 덜 받고 빨리 할 수 있다.QA 팀에 의한 지속적인 테스트.- 주기적으로 구현 되어 있는 것을 테스트 해야 된다.- 새로운 기능을 구현 하거나 기존에 구현 된 것을 수정하다 보면 이전에잘 돌아가는 기능에 버그가 발생 한다.
  • 72. 8. 문서화 유지보수 측면에서 문서화는 중요하다고 할 수 있다.
  • 73. 그러나 문서화는 아주 지루하며 어떤 것이 좋은 문서인지 알기 힘들다.
  • 74. 좋은 문서를 만들기 위해서는 수련이 필요하다.
  • 75. 문서화는 구현 전 설계를 할 때 하고 이후 구현을 하면서 변동이 생기면수정을 해야 된다.
  • 76. 너무 많은 문서를 만들면 문서 자체의 유지보수가 힘들어지기 때문에꼭 필요한 부분만을 하는 것이 좋다.
  • 77. 자신만의 문서 포맷을 만들어 나가데 주위 동료의 피드백을 받는 것이 가장 좋다.9. 책 소개 및 참고 사이트9. 1 . 책
  • 78. 9. 2 . 사이트GpgStudyhttp://gpgstudy.com/게임 및 프로그래밍 관련 블로그 모음http://mypage.sarang.net/gdblog/레이옷님의 사이트http://reiot.com/Code Projecthttp://www.codeproject.com/데프피아http://www.devpia.com/JoicChttp://www.joinc.co.kr/온라인 게임 제작자 모임http://cafe.naver.com/ongameserverMS TechNethttp://www.microsoft.com/technet/technetmag/Default.aspx?loc=koMSDN 매거진http://msdn.microsoft.com/msdnmag/issues/07/08/default.aspx?loc=ko