주제 / 대상 독자 / 개발 원칙
Make it
성공하다 이룩하다 해내다
이 글은 제가 처음으로 만든 초간단 온라인 게임을 자세히 살펴보는 내용입니다.
저처럼 게임이 아닌 다른 분야의 종사자나 게임 개발에 관심을 가지는 분들을 대상으로 작성되며, 전문 게임 개발자와 일부 고수님들에게는 필요 없는 내용일 수 있습니다.
대상 독자가 이 글을 보며 조금이나마 자신의 관심사에 힌트를 얻길 바라는 마음에서 집필을 시작합니다.
그럼 본격적으로 시작하기 전에 조금 더 주제를 구체화해볼까요?
먼저 만들고자 하는 게임은 웹 브라우저에서 작동하는 온라인 PVP 게임인데, 설명이 막연하기 때문에 완성된 화면을 한번 보겠습니다.
게임 자체는 정말 별게 없네요. 배경도 없고, 사운드도 없고, 에너지 바도 없고, 그나마 나가는 버튼은 있으니 다행입니다. 하지만 초기버전을 이렇게 만든 이유는 계획된 설계입니다. 저는 개인 프로젝트를 하면 몇 가지 원칙을 가지고 진행합니다.그 첫 번째는..
눈덩이 개발 방법론
개발을 하다 보면 초기에는 항상 열정과 아이디어가 넘치기 마련입니다. 그 모든 내용을 요구사항에 포함하여 점차 감당이 안되면서 개인 프로젝트를 말아먹은 경험이 있는 바, 저는 눈덩이 개발 방법론이라는 원칙을 세우게 되었습니다. 이른바 초기 버전은 항상 최소한의 핵심 기능들로만 구성하여 우선 완성하고, 넘치는 아이디어는 이 후에 버전 업을 하면서 반영하는 개발 방법론입니다. 처음엔 작은 눈덩이로 시작하고, 점차 그 핵심 위에 덧씌워 눈덩이를 키워가는 방법입니다.
다시 주제로 돌아가서, 무엇을 만들 것인가는 시연 영상을 통해 충분히 알 수 있지만 또 한 가지 무엇으로 만들 것인가가 남아있습니다. 바로 기술 셋인데요, 우선 웹 브라우저에서 작동해야 하므로 당연하게도 웹 관련 기술이 필요합니다. 제가 이 게임을 개발하면서 썼던 핵심 기술 셋은 아래와 같습니다.
Server
Python3
HTTP server
Web socket server
Client
HTML5
Canvas
Web socket client
Javascript
우선 서버는 웹 페이지를 띄우기 위한 HTTP 서버와 C/S 통신을 위한 웹 소켓 서버를 파이썬을 통해 직접 구현했고, 클라이언트는 HTML5 기술인 캔버스로 화면을 그렸습니다. 웹 클라이언트 이기 때문에 자바스크립트는 기본적으로 깔고 가게 됩니다.
프로그래밍 언어에서부터 설명을 하면 너무 방대하므로 저는 프로그래밍 언어에 대한 설명은 배제하고 진행할 예정입니다. 따라서 이 글은 독자에게 기본적인 자바스크립트와 파이썬의 언어능력을 필요로 합니다. 문법과 언어의 기본 사양을 이해할 수 있다면 충분합니다.
또한 웹 개발 관련 지식이 어느정도 필요합니다. 조금 애매한데, 예를 들면 웹 서버가 대략적으로 어떤 방식으로 작동되는지를 알아야 파이썬 HTTP 서버 개발 파트에서 이해하기가 쉽습니다.
그리고 앞서 서버를 직접 구현했다고 말씀드렸는데, 이 게임을 개발하면서 외부 라이브러리나 프레임워크는 전혀 사용되지 않았습니다. 왜 이런 맨땅에 헤딩을 했을까요? 이는 저의 두 번째 원칙에 해당합니다.
Native 지향
우리가 회사에서 하는 업무는 일반적으로 경제적인 요건이 우선 시 됩니다. 경쟁사보다 빠르게 서비스를 출시해야 많은 이익을 취할 수 있죠. 그래서 생산성이 중요합니다. 그렇기 때문에 바퀴를 다시 발명하지 말라는 격언처럼 이미 존재하는 라이브러리, 프레임워크, 플랫폼 등을 사용하여 시간낭비를 줄이는 방법을 많이 채택하고 있습니다. 하지만 개인 프로젝트는 일반적으로 경제적인 목적보다는 개인의 성장과 같은 배움의 목적이 강합니다. 그렇기 때문에 바퀴를 다시 발명한다면 오히려 우리는 조금 더 경쟁력 있는 개발자가 될 것입니다.
지금까지 주제, 대상 독자, 개발 원칙 등에 대해 설명드렸습니다. 다음 글에서는 게임의 요구사항 정의 및 설계를 해보겠습니다.
01 주제 / 대상 독자 / 개발 원칙
02 요구사항 정의 / 설계
03 Python HTTP Server 개발
03-01 멀티 쓰레드 지원 / POST 메서드 처리 / 로깅
03-02 URL 라우팅 / 정적 리소스 처리
04 Python web socket server 개발
04-01 웹 소켓 개요
04-02 웹 소켓 서버 구현
05 클라이언트 개발
05-01 캐릭터 스프라이트 개발
05-02 클라이언트 로직
05-03 서버 로직