본문 바로가기
loading

교육과정

게임서버프로그래밍

교육배경 이해 :: 게임 서버 프로그래밍이란, 온라인 게임의 클라이언트 – 서버 구조에서 서버의 기능을 설계하고 구현하는 기술을 말합니다.

CURRICULUM 교육과정
게임서버프로그래밍
교육배경 이해
게임 서버 프로그래밍 정의
게임 서버 프로그래밍이란, 온라인 게임의 클라이언트 – 서버 구조에서 서버의 기능을 설계하고 구현하는 기술을 말합니다. 서버는 클라이언트의 버전 별 업데이트, 클라이언트가 서버에 접속해서 게임을 진행하는 절차에 대한 정의, 클라이언트 간의 메시지 중계, 게임 룰 및 비즈니스 로직 구현, 게임기록의 저장 등을 담당합니다. 이를 구현하기 위해 온라인 네트워크 프로그래밍, 안정적인 게임 데이터 처리를 위한 Database 프로그래밍, 대용량 게임을 위한 서버 아키텍쳐, 성능향상을 위한 멀티쓰레드 프로그래밍, 보안 기술 등이 핵심 기술입니다.
게임 서버 프로그래밍 가치
초기의 온라인 게임은 한 게임 내에서 소수의 사용자가 참여하는 보드형 게임이나 액션게임이었습니다. 최근에는 점차 다수의 사용자가 동시에 같은 월드에서 게임을 하는 MMORPG나 소셜 게임이 주를 이루고 있습니다. 이를 위해서는 클라이언트간의 데이터를 중계하고 제어하는 게임서버의 성능이 매우 중요합니다. 사용자간에 경쟁하거나 협동하여 게임 내 미션을 빠르게 달성하는 것을 즐기는 과정이므로, 사용자들은 그 어떤 서비스보다 빠른 성능과 안정성을 요구하고 있습니다. 그 만큼 게임서버의 아키텍처와 세부기술이 게임의 만족도와 성패를 좌우하는 중요요소입니다.
게임 서버 프로그래밍 교육과정 특징
게임 서버 프로그래밍 과정은 서버 구현을 위한 기본적인 언어를 비롯한 네트워크 프로그래밍, 메모리 관리, 멀티쓰레드 개발 등 서버 프로그래밍을 학습합니다. 이를 기반으로 서버 아키텍쳐 설계 및 고급 Database 설계, 보안기술, 시장에 출시된 게임의 서버구조에 대한 사례연구 등 고급기술을 아우르고 있으며, 프로젝트 수업에서 직접 게임 서버를 설계, 구현하는 과정을 통해 교육을 완성하게 됩니다.

현장 인터뷰 :: NHN 게임플랫폼 개발팀 이강인 차장

롤모델 인터뷰
훌륭한 게임이 게임서버의 안정성이 받쳐 주지 않아 오픈 초기에 외면당하는 경우가 많습니다. 안정적 게임서버 구성과 운영 역량이 게임의 성패를 가늠하는 경우가 많아졌습니다.
NHN 게임플랫폼개발팀 이강인 차장
이강인 차장 이미지
현재 한게임에서 여러 모바일게임서버에서 필요한 공통 서버 컴포넌트를 개발하고 있습니다. 게임개발 초기에는 MMORPG가 좋아서 게임 클라이언트 개발을 하다가, 여러 요구사항에 따라 아키텍쳐 구성을 다양하고 탄탄하게 할 수 있다는 점에 서버개발로 직무를 변경하였습니다. 최근에는 글로벌 게임서비스를 위한 서버구성에 몰두하고 있다고 합니다. 좋은 게임성을 가진 게임이 시장에서 살아남는 것은 결국 서버의 안정성이라는 점에서 책임감과 동시에 보람을 느낀다고 전합니다.
현재 모바일 게임서버에서 공통으로 필요한 서버 플랫폼을 맡고 있습니다.
한게임의 모바일 게임을 위한 플랫폼을 맡고 있는데 그 중 서버플랫폼을 개발하고 있습니다. 게임의 클라이언트 - 게임서버 구조에서 게임서버에서 필요로 하는 공통컴포넌트를 묶은 것을 서버플랫폼이라고 칭하는데요. 모바일 게임 서버플랫폼의 경우 로그인 서버, BI지표를 위한 서버, 유저가 온라인/오프라인의 상태를 관리하는 프레젠스 서버, 여러 게임의 비즈니스로직을 조합하여 주는 매시업 서버 등이 있습니다.
최근에는 스마트폰 게임을 위한 글로벌 서비스 아키텍처 구성에 몰입하고 있습니다.
게임 클라이언트를 개발하다가 좋은 서버 아키텍처 구성에 관심과 흥미를 갖게 되어 서버개발로 직무를 바꿨습니다.
어렸을 때 게임을 엄청 좋아했고 게임을 개발하기로 결심하게 된 건 MMORPG 영향을 많이 받았습니다. 게임 월드를 구현하고 싶었고, 처음 게임클라이언트 개발을 먼저 하다가 서버개발로 바꾸었습니다.
클라이언트가 먼저 매력이 느껴지는 것이 사실입니다. 그런데 게임 서버쪽이 좋은 아키텍처를 구성하는 시도를 여러 가지 방면으로 하기가 더 유리하다는 점이 끌렸습니다.즉 어떤 기술을 어디에 배치하느냐에 대한 깊은 고민과 시도의 과정이죠. 클라이언트 개발이 사용자 시스템에 집중해서 개발 한다면 서버는 클라이언트 배포 부터 업데이트, 클라이언트 접속해서 수행하는 절차에 대한 정의, 사용자간의 인터랙션을 중계하는 과정 등을 컴포넌트 단위로 모듈화하는 과정이라고 말하고 싶고 그 과정이 재미 있습니다.
게임서버를 서비스를 잘 개발하고 운영하는 것. 성능,모니터링, 로깅, 반영 시스템이 중요합니다.
모바일 게임 서비스를 하면서, 그래도 이것만은 잘 했다고 느낀 점은 서버 사이드 로그를 잘 남겼다는 점입니다. 로그를 얼마나 자세하기 남길 것인가를 실시간으로 변경할 수 있도록 하여, 문제가 발견되면 아주 세밀한 로그를 남겼다가 오류수정을 위한 정확한 원인을 파악합니다.
실 서비스에 들어가면, 서버의 새로운 기능을 추가 반영한다는 것은 매우 부담스러운 일이지요. 서비스를 중단해야 하기 때문입니다. 동일한 문제를 재현하기도 매우 힘들기 때문에 이를 가장 잘 파악하는 방법은 서버의 로그를 잘 남기는 수 밖에 없습니다. 모바일 서비스 경험이 없는 상태에서도 로깅시스템으로 인해 트러블 슈팅을 아주 잘 할 수 있었고 대응속도도 빨랐습니다.
이강인 차장 이미지
최근 몰입하고 있는 기술과제는 글로벌 게임서비스를 위한 최적의 환경구축입니다.
애플과 구글의 앱스토어로 인해 글로벌에 대한 기회가 같이 넓어졌습니다. 국가별 서비스를 하는 것은 게임개발자들의 필수적인 경험과 역량입니다. 게임이 원래 글로벌 서비스가 강했는데 모바일이 그 경계를 더 허물었지요.
클라이언트는 언어의 대응이 필수적이라면 서버는 그 보다는 더 넓게, 지구본을 보고 고민을 해야 합니다. 예를 들어 미국 – 한국에 있는 사용자가 동시에 같이 게임을 한다면. IDC의 위치 및 IDC간의 연계 등 어떤 구성이 가장 좋은 응답속도가 나올까 등 아키텍쳐와 운영을 위한 제반의 툴을 고민하고 있습니다.
게임의 가장 좋은 사용성은 안정적인 성능에서 출발한다고 생각합니다. ‘서버와의 연결이 끝겼습니다’ 메시지 보는 순간 게임이 싫어지죠.
가장 중요한 것은 멀티쓰레드 병렬처리에 대한 처리가 가장 중요합니다. 서버 기능 처리 용량과 응답시간을 항상 체크하는 것 기능을 만들어야 합니다. 기능에 집증하다 보면 응답시간이 좋지 않은 경우가 많습니다, . 클라이언트에 문제를 일으킬 수 있으니 게임을 위한 요구사항만 채우는 것이 아니라 성능이 잘 나오고 있는지 검증할 수 있는 능력이 필요합니다.
이를 위해 지속적으로 모니터링도 갖추어야 하고 문제가 생겼을 때 잘 바로 패치할 수 있는 순발력 있는 시스템 구성도 필요합니다. 또한 잘못된 입력이 오더라도 시스템에 영향이 없도록 최대한 예외적인 상황에 대한 대처도 잘 해야 안정적인 시스템이 됩니다.
visual
게임서버 프로그래밍을 지망하는 학생들에게 하고 싶은 말…
본인이 만든 개발코드와 서비스를 더 사랑하는 개발자가 되라고 하고 싶습니다. 서버개발자들은 사용자들이 접하는 UI를 담당하지 않기 때문에 사용자의 입장이나 서비스 전체를 이해 못 하는 오류를 범하기 쉽습니다. 그런데 서버개발자가 이해의 폭을 넓히면 서비스적으로 개선되는 면이 정말 많습니다. 예를 들어 서버에서 조금 나은 기능을 넣으면 클라이언트의 기능성이나 유저입장에서 더 나아질 수 있고 사업적인 지표도 더 많은 것을 볼 수 있도록 남길 수 있기 때문이지요. 서비스를 더 많이 써보고, 서비스를 만들어가는 과정에서 탁월한 팀웍을 발휘하여 더 좋은 개선안과 의견을 쏟아내는 개발자가 되라고 하고 싶어요.
인터뷰펄치기
인터뷰접기