Upgrade to Pro — share decks privately, control downloads, hide ads and more …

iLoveCoffee Programming Postmortem

ehooi
April 26, 2013

iLoveCoffee Programming Postmortem

ehooi

April 26, 2013
Tweet

Other Decks in Programming

Transcript

  1. 아이러브커피 과거사 • 2011년 – 1월 회사 설립 – 7월

    싸이월드 출시 – 10월 대만 출시 – 12월 중국 출시 • 12월 모바일 개발 시작
  2. 당시 상황 • 웹 버전도 계속 라이브 합니다 – #

    lines: 40,000  62,000 • Android가 우세하나, iOS도 무시할 순 없다 • 모바일 소셜 그래프 대세가 없다 – 직접 만들자
  3. 당시 상황 • 모바일 개발 경험 전무 – 회사에 Mac도

    없고, 안드로이드폰도 없음 – 프로그래머 2인으로 시작 • 모바일에 맞도록 기획 – UI 수정 - Mouse Over … – 중력 센서, 터치를 활용한 콘텐츠
  4. 엔진 선정 Adobe AIR • 장점 – 코드 유지 –

    강력한 2D 렌더러 – Flash • 단점 – 성능 – 안정성 Cocos2D-X • 장점 – Open Source • 단점 – 기능 빈약함 – OpenGL ES 1.1 – 버그 많다 – 툴이 없다
  5. 당시 각 파트 진행 상황 • 기획 파트 – UI

    기획 중반 작업 – UI 화면 50개 이상 • 그래픽 파트 – UI 디자인 시안 작업 • 프로그래밍 파트 – Legacy 덩어리 ActionScript 코드들 Fla 파일들
  6. UI Editor Cocos Builder 1.0 • Only for Mac •

    No Source • No maintenance 자체 개발 • Undo 없으면 안 쓴다 • 자주 죽어도 안 쓴다 • 키보드로 픽셀 단위 조작 • 익숙한 MFC 사용  빠른 초기 버전
  7. UI System • Non-Retina 제거 • UI Event Handling –

    Modal / Popup – Multi-touch – Slide
  8. 기능 추가 • Glow Effect • Sprite Masking • Text

    Stroke  전부 Flash에 있던 기능
  9. C++로 개발 시작 • 주요 인력은 웹 버전 경험 뿐

    – ActionScript + Java • C++ – No Garbage Collection – No Closure  이 속도라면 몇 년은 만들어야 할 판
  10. 코딩 실수 방지 • strict • class / descriptor •

    Visual Studio – Syntax highlighter – Build time syntax check (custom rule)
  11. 디버깅 • Debug Console – C++ Crash • Lua Crash

    Report Server • VS Debugger – Debug API 너무 느리다
  12. Coroutine 활용 • 절차를 서술 – 그냥 lua 코드 –

    지역 변수 – 분기/반복 • yield? – 기본 함수 속
  13. 그래픽 리소스 분량 • 인테리어 아이템: 4,500개 • 캐릭터 아이템:

    720개 • 캐릭터 애니메이션: 233개 • 각종 아이콘: 1,400개
  14. 타겟 스마트폰 사양 • iPhone 3GS – Cortex-A8 600 MHz

    – PowerVR SGX535 – 320x480 – 256 MB RAM • Galaxy S – 1 GHz Cortex-A8 – PowerVR SGX540 – 480x800 – 512 MB RAM
  15. 리스트 박스 - 텍스트 버그 발견 • JNI memory leak

    • 줄바꿈 무한 루프 버그 최적화 • 바뀔 텍스트 초기화 생략 • 메모리 할당 횟수 줄임 • 복사 횟수 줄임
  16. 캐릭터 시스템 최적화 • 캐릭터 당 레이어 수 = 16~25

    – 레이어 = 텍스처 = Draw Call  Texture Atlas
  17. 해결한 방법 • 힘으로 구겨 넣음 – 이 정도 만들었으면,

    크게 벗어나진 않겠지 – 일부 아이템 수정  512x512 1장
  18. 인테리어 아이템 • 메모리/파일 용량 둘 다 문제 • PVRTC?

    ETC1? DXT? PNG 8bit? • RGBA4444 (PNG 32bit) – 디더링 – 캐릭터, UI도 일부 적용
  19. 당시 구조 • Java Socket Server – 성능 향상 –

    백섭 가능성 존재 • Mongo DB – 빠르게(만) 개발 • Web server?
  20. 모바일 네트워크 • 자동 재접속 시도 • 재접속 성공시 통신

    내용 복구 – TCP 처럼 주고 받은 패킷을 맞춰 봄
  21. 당시 서비스 상황 • K사 클라우드 서버 – Amazon 대비

    50% 이상 저렴 / 기능 부족 – 동시접속자 1만명 처리 / 월 40만원 – 새벽에 간혹 서버 멈춤 (Hang)  자체 서버 구매
  22. 트래픽 폭증 대비 Redis 도입 • Cache – 친구 레벨

    등 • 소멸성 메시지 – 친구에게 요청 – 친구집 방문 행동 Mongo DB • Collection 분리 • 메모리 증설 • Sharding?
  23. Game Server 장애 처리 • ulimit • iptables – ip_conntrack

    • GC options • More Memory • Load balancing – uid % k
  24. 최적화 효과 • RU 약 500만 • DAU 약 150만

    • CCU 약 22만 • DB 400만원 * 1대 • APP 110만원 * 3대 • IDC 임대료 70만원 / 월 – 단, CDN 별도
  25. 하고 싶은 말 • 온라인 게임 프로그래머도 모바일 게임 잘

    만들 수 있다 • Cocos2D-X로 개발하는 팀들에 도움이 되길