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

iLoveCoffee Programming Postmortem

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for ehooi ehooi
April 26, 2013

iLoveCoffee Programming Postmortem

Avatar for ehooi

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로 개발하는 팀들에 도움이 되길