비전공자의 게임 개발 프로젝트 진행 과정
저는 서클린이라는 똑똑한 친구가 있는데 어느 날 그 친구가 주식으로 게임을 만들어보는 게 어떻겠냐고 말해줬습니다. 그 친구가 제안해 준 게임 방식은 아주 간단한 방식으로 주식 투자를 체험해 보는 것이었습니다. 저는 원래 게임을 좋아하고 게임이 사람들의 사랑을 받는 요인에 대해서 많은 고민을 하는 것과 동시에 현재 금융권에서 계량적인 투자방법과 관련된 일을 하고 있습니다. 그렇다면 주식으로 하는 뭔가 게임스러운것 저에게 너무나도 흥미로운 주제였죠! 또한 실제 주식을 할 때 벌어지는 일들, 사야 하나? 버텨야 하나? 이런 부분들을 캐주얼한 게임으로 압축적으로 표현한다는 것 자체가 의미가 있다고 생각했습니다.
친구와의 대화가 끝나자마자 바로 노트북을 켜고 해야 할 일들을 적어봤습니다. 하지만 게임을 만들어본 경험이 없었기 때문에 어디서부터 시작해야 할지 막막했습니다. 게임 개발에 대해서는 장님이나 다를 바 없었기 때문에 코끼리 다리부터 더듬어야 했기 때문에 먼저 뭘 하고 싶은지에 대한 명확한 정의가 필요했습니다. 따라서 제가 하고자 하는 바를 아래와 같이 적었습니다.
1. 주식을 사고팔아서 수익을 낸다.
➢ 시가총액 상위 10 종목을 랜덤으로 선택한다.
➢ 마우스나 손을 누르고 있으면 종목을 홀딩한다.
➢ 반대로 마우스나 손을 떼면 청산한다.
2. 수익은 수익률로 계산되어 점수화된다.
➢ 시장수익률(KOSPI)과의 차이인 초과수익률로 점수를 매긴다.
3. 내 점수가 참여자들 중에 상위 몇% 인지 알 수 있다.
위처럼 만들어야 할 프로그램의 기능에 대해서 리스트를 작성하고, 다음 차례는 저 목적들을 완수할 수 있는 기술들을 매핑시키는 것입니다. 저번 프로젝트로 파이썬을 사용했으므로 이번에도 파이썬 위주로 기능들을 검색했습니다. 그리고 이런 것은 주변에 개발 고수들에게 직접 물어보는 것이 좋습니다. 다만, 이미 많은 개발 고수들은 Google에서 활동하기 때문에 단순한 검색만으로도 내가 어떤 프로그래밍 기술을 사용해야 하는지, 그 키워드를 파악할 수 있습니다. 검색 결과를 위의 목적 리스트에 검색한 결과(기술)를 매핑시킵니다.
1. 주식을 사고팔아서 수익을 낸다.
➢ 시가총액 상위 10 종목을 랜덤으로 선택한다.
☛ 파이썬의 math.rand() 함수
➢ 마우스나 손을 누르고 있으면 종목을 홀딩한다.
☛ 자바스크립트 게임엔진 PIXI.js
➢ 반대로 마우스나 손을 떼면 청산한다.
☛ PIXI의 마우스(터치) 이벤트 핸들러를 사용
2. 수익은 수익률로 계산되어 점수화된다.
➢ 시장수익률(KOSPI)과의 차이인 초과수익률로 점수를 매긴다.
☛ 파이썬 numpy
3. 내 점수가 참여자들 중에 상위 몇% 인지 알 수 있다.
☛ MySQL rank 함수
위의 작업을 끝냈다면, 이젠 그 기술들을 어떻게 활용할 수 있는지 알아야 합니다. 직접 코딩하기 전에 각 기술(함수)들이 어떤 식으로 작동하는지 간략하게 정리해 놓는다면 더 좋겠죠? 함수들의 스펙과 문제점, 확장성 등을 정리하고 개발에 착수한다면 많은 시행착오를 줄이면서 개발 시간을 단축시킬 수 있습니다. 저는 이런 경우 마이크로소프트의 원노트를 활용합니다. 많은 노트 프로그램을 써봤지만 원노트의 검색기능은 타의 추종을 불허합니다. 이런 용도의 노트프로그램은 내용입력 뿐만 아니라 그 내용은 빠르게 찾아줄 수 있어야 하는데 그런면에서 원노트는 정말 최고입니다! 아래 사진은 제가 이번 프로젝트를 위해서 정리한 일부분입니다.
상단 탭들을 보면 제가 사용했었던 여러 언어나 프레임워크를 종류별로 분류하여 기록한 것을 보실 수가 있습니다. 이런 식으로 새로운 기술을 적용할 때마다 꾸준하게 기록해 놓으면, 필요할 때 맨 위에 있는 검색창에 바로 검색해 볼 수가 있죠. 이런 식으로 꾸준하게 자기가 사용했던 프로그래밍 기록들을 누적시킨다면 시간이 지날수록 내용이 풍부해지면서 동시에 내용들을 더 오래 기억할 수 있게 됩니다. 자신만의 최고의 프로그래밍 매뉴얼을 만들어 가는 것이지요!
필요한 기술들을 적당히 정리했다면 내가 기획한 프로젝트의 완성 가능 여부를 파악할 수 있게 됩니다. 그리고 끝까지 개발하는데 문제가 없다고 파악된다면 바로 개발을 들어갑니다. 저 같은 경우에는 개발 시간을 단축시키기 위해서 기존에 제가 만든 사이트 Financipe의 페이지 중 하나를 게임으로 구성하기로 결정했습니다. 개인 개발자의 덕목인 '빠르게 결과물을 내놓는다'를 실천하기 위함이었습니다.
개발 도중에 생각난 게 있었습니다. 단순히 게임을 하는데서 끝나는 것이 아니라 이 결과물을 유머러스한 결과물로 공유하면 어떨까 하는 것이었습니다. 내가 만약에 삼성전자로 수익률이 엄청 잘 나왔다면, 사람들한테 자랑하고 싶지 않을까요? 그리고 그렇게 공유된 결과들은 다른 사람들로 하여금 이 페이지에 접속되도록 하는 좋은 유인이 될 겁니다. 그래서 위에서 명시한 목적-기능 리스트에 아래와 같은 내용을 추가했습니다.
4. 페이스북에 공유할 수 있다.
☛ Facebook API 활용
➢ 플레이어의 점수에 따라서 계급을 매긴다. (마치 vonvon처럼!)
☛ 웹서버에서 점수 계산을 해서 등급에 따른 다른 문구 작성
➢ 우스꽝스러운 이미지와 같이 포스팅된다.
☛ Facebook post API에서 이미지 경로를 함께 입력
개발 도중에 이렇게 새로운 기능이 추가되는 것은 빈번한 일입니다. 왜냐하면 개발 도중에 계속해서 좋은 아이디어들이 떠오르기 때문입니다. 화가가 좋은 그림을 그린다는 것은 한 번에 계획대로 되는 것이 아니라 수십 번을 찢고 수정한 결과라고 합니다. 프로그래밍도 마찬가지입니다. 혼자 기획-개발을 전담하는 프로그램이 기획단계에서 쓸만한 물건이 나오기는 참 힘든 것 같습니다. 다만, 그것을 개발하는 과정 속에서 유용한 기능들이 추가되면서 점차 쓸만한 프로그램으로 변합니다. 중요한 것은 이런 아이디어들은 개발 도중에 나온다는 것, 즉 개발을 시작해야 얻을 수 있다는 점이라는 것입니다. 그래서 1인 개발자들은 어떤 목표가 있다면 일단 시작하고 보는 습관이 중요합니다. 저는 이런 과정을 통해서 아래와 같은 기능을 추가했습니다.
개발 중에 뜻하지 않았던 어려움이 많았습니다. 특히 사용했던 게임엔진인 PIXI.js가 브라우저마다 다르게 작동한다는 점이 가장 힘들었고 주가를 애니메이션으로 움직이게 하는 것이 생각보다 쉽지 않았습니다. 하지만 그렇다고 해서 도중에 개발을 중단하게 되면 그 동안 투입했던 나의 리소스들이 무용지물이 됩니다. 따라서 한번 시작한 프로젝트는 어떤 타협을 해서라도 마침표를 찍는게 중요합니다. 개발의 결과물은 새로운 프로젝트의 씨앗이 되기 마련이니까요. 내가 생각한 것을 누가 먼저 했건, 의미가 있건 없건, 돈을 벌건 그런 것들은 차차 생각하는 겁니다. 왜냐하면 진짜로 좋은 아이디어들은 개발 도중에 튀어나오기 쉽고 프로젝트를 완성하는 과정에서 저의 생각하는 방식이나 프로그래밍 내공이 향상되기 때문이죠. 제가 이번 프로젝트를 통해서 얻은 것들이 이렇게나 많습니다.
0. 누군가 내가 만들어 놓은 것을 클릭한다는 기쁨
1. 페이스북 로그인 및 포스팅 API 정복
2. 게임엔진 PIXI.js 사용법
3. 차트 이동을 관리할 수 있는 수학적인 알고리즘 정립
저는 이번 프로젝트의 전리품들을 가지고 친구들 생일 선물을 만들어볼 생각입니다. 친구 생일에 친구 이미지를 통해서 생일을 축하해 줄만한 게임을 만들어 주는 거예요. 그리고 단순히 페이스북에 '~야 생일 축하한다.'라는 글을 남기는 것 대신 그들의 이름을 건 게임을 포스팅해 줄 생각입니다. 게임이름은 '김성수 생일케잌 피하기' 정도가 되지 않을까 싶네요. 아마 이번 프로젝트를 진행하지 않았으면 이런 생각은 하지 못했겠죠. 프로그래밍을 공부하시는 분들! 꼭 작은 목표를 가지고 끝까지 완수하는 습관을 가지시길 권유합니다. 과정과 결과가 선순환을 이루면서 결국 멋진 프로그램을 만들 수 있을 것입니다.
'도전! 주식고수'는 이 링크에서 보실 수 있어요. 도전! 주식고수 링크