카카오게임 첫 도전기
DESCRIPTION
Devon 2013 발표자료TRANSCRIPT
카카오게임 첫 도전기
㈜블리스소프트
김경민
회사소개
• 주식회사 블리스소프트
• 캐쥬얼게임 전문 모바일게임개발사
• 마우스피싱(Rat Fishing)
• 돼지러너 for kakao
• 아프리카TV로부터 투자
스크린샷
돼지러너 소개
• iOS, Android(구글 플레이) • 점핑런게임 • 늑대의 먹이가 되지 않기 위해 도망치는 돼지의 러닝 + 점핑요소 가미
• 친구와 함께 우정릴레이 • 100만 조합의 나만의 돼지 • 아프리카TV 퍼블리싱 • 출시 3일만에 구글플레이 무료게임 순위 1위 • 200만 회원 돌파 • 해외 진출 예정
게임 컨셉
• 기존 러닝에 더해 점핑(높이높이)요소를 추가
• 멀리도 가야하지만 높이도 올라가야한다
• 우정릴레이를 통한 누적거리 계산과 보너스선물
• 100만종의 조합이 가능한 돼지구성
• 세트조합, 히든조합으로 특수효과 발동
돼지러너 소개
• cocos2d-x
• LAMP, mongoDB, memcached
• 팀구성
– PM 1명
–게임디자이너 1명
–아트디자이너 2명
–클라이언트 개발자 3명
–서버 개발자 1명
게임서버 게임서버 게임서버 게임서버
운영서버
캐시서버 로그서버
DB서버
이미지 스토리지
아키텍쳐
• 자체 IDC
• 로드밸런싱은 간단하게 라운드로빈 구성
• 게임서버와 나머지 서버들은 망분리
• 모든 통신은 SSL 이용
게임서버
• LAMP – Linux, Apache, MySQL, PHP
• 모두 무료
• PHP는 코드 배포시 컴파일이나 서버의 재시동이 필요 없음
• RESTful API
• RESTful은 수평 확장이 매우 쉬움
캐시서버
• Memcached
• 랭킹을 비롯한 임시데이터 저장소
• 유실되어도 상관없거나, 값의 무결성이 중요하지 않은 데이터 저장
• 질의 연산이 비싼 데이터를 캐싱하여 DB부하 분산
• 캐시서버가 다운되더라도 게임은 정상적으로 운영되도록 예외처리
로그서버
• 많은 NoSQL 을 후보군으로 놓고 검토 – Schema less – 빠른 Insert속도
• mongoDB를 선택한 이유 – 방대한 문서와 예제, 구글링 검색결과 – RDB에서 넘어오기 가장 부담없는 NoSQL – 친절하게 SQL을 어떻게 mongoDB로 포팅해야하는지 제공
• 사용자 액션 수집(아이템 구매, 소비, 행동) • 로그서버가 다운되더라도 게임은 정상적으로 운영되도록 예외처리 • 데이터를 검색하기 위해 index 생성은 필수 • 서버 중지 없이 index를 생성할 수 있도록 락을 걸지 않는
Background 방식의 인덱스생성기능을 최신버전에서 지원
스토리지 + CDN
• 공지사항, 이벤트 등에 쓰이는 이미지를 비롯한 리소스 보관
경험과 배운것, 느낀점
• 당연한것들의 재발견
• Go to Basic
인앱해킹
• 반드시 서버에서 결제정보를 재검증
• 영수증이 유효한지 체크(애플, 구글)
• 영수증이 기존에 처리된 영수증인지 주문번호를 통해 체크할것(중복 지급하지 않도록)
• 결제요청이 들어온 인앱상품이 우리 앱에 존재하는지 확인. 다른 앱의 유효한 영수증이 날아온다(iOS)
메모리해킹
• 점수, 코인 등 중요 정보는 꼭 메모리해킹 대응
• 업그레이드 상태, 체력, 공격력, 방어력, 속도 모두 메모리 해킹의 대상
• 요즘 메모리해킹 도구는 굉장히 발전해서 게임을 중간중간에 멈춘 다음에 변화하는 int값을 추려내어 값을 조작할 수 있는 해킹 인터페이스를 제공
• 모두 대응할 수 없다. 적당히 trade off
안드로이드 테스트
• 안드로이드 파편화(다양한 크기의 디스플레이)
• 많은 기기를 테스트하면 할수록 좋다
• 오래된 기종이라도 많은 판매량을 기록한 기기들은 꼭 체크(갤2, 갤노트1)
안드로이드 대응
• 심사가 없어서 좋은 안드로이드
• 마켓등록 후 3시간 정도면 검색가능(사람마다 차이가 있음)
• 원하는 기능을 제약없이 마음대로
• 다른 사람에게 인앱 선물하기 가능
iOS 국내에서 어렵다
• 긴 검수기간
• Android에 비해 1~3개 빌드 늦어지는 iOS
• 개별 사용자 결제 취소 불가
• 대한민국은 Android 텃밭
• 돼지러너의 경우 95:5(Android : iOS)
DB
• MyISAM엔진은 쓰기가 많은 게임용으론 적당하지 않다
• 꼭 검색에 사용하는 필드는 인덱스 생성
• slow-query 수시로 체크하여 튜닝
퍼포먼스 테스트
• 출시전 게임 퍼포먼스 테스트
• Jmeter, apache ab, nGrinder
• RESTful API는 테스트 케이스를 만들기도 매우 간단하다
• 테스트를 통해 인덱스가 필요한 곳이나 비즈니스 로직을 개선해야할 부분을 발견할 수 있다.
운영툴
• 운영툴 (CS툴 + 개발툴 + 통계툴) • 오버스펙 경계 • Boostrap은 빠른 개발도구 • 디자이너의 도움 없이 컴포넌트를 붙여넣는 식으로 빠르게 개발가능
• CS담당자들이 사용자의 행동을 추적하여 고객요청에 대응할 수 있도록
• 클라이언트개발자들이 스스로 값을 변경하여 클라이언트 기능을 테스트 해볼 수 있도록
• 매니저들이 중요 지표들을 확인할 수 있도록
• 운영툴개발은 개발자의 시간을 많이 빼앗지만 잘 만들어놓은 운영툴은 잡무에서 벗어날 수 있게 해주어 오히려 이득
로그의 활용
• 미리미리 KPI 설정하자
• 계속 변경되는 게임기능상의 변화로 어쩔 수 없이 기능이 픽스되는 후반에 후다닥할 수밖에 없는 로그넣기 작업
• 필요한 로그만 넣기
• 활용 다 못한다
• 쓰레기 쌓아두는격
통계가공
• KPI에 따른 통계
• 자주 체크해야하는 통계는 운영툴에서 언제든 볼 수 있도록 제공
• Google chart API
디버그, 테스트 도구와 문서화
• RESTful API를 테스트 할 수 있는 도구를 자체 개발하여 사용중
• 문서화는 필수
• 클라이언트 개발자들이 쉽게 알 수 있도록
Swagger
클라우드서비스
• 개발유휴인력, 서버자원이 부족한 스타트업에게 딱인 클라우드서비스
• 대표적으로 AWS, 국내에는 KT ucloud(대표 게임 확밀아) • 수요에 따라 서버를 증설 가능 • Auto scaling, 웹UI • 보안과 편의성의 trade off • AWS는 가장 가까운 데이터센터가 tokyo • AWS tokyo로 서비스하는 게임들도 있다 • 그렇지만 tokyo도 국내에서 서비스하기엔 응답속도가 아쉽다
• KT유클라우드 이제는 auto scaling을 비롯 AWS를 많이 따라 잡았다
감사합니다