[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
-
Upload
ifunfactory-inc -
Category
Engineering
-
view
501 -
download
9
Transcript of [아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
아주 조심스럽습니다 .
저의 소중한 간지를 위해 , 물건 파는 시간이 되지 않게 하겠습니
다 .
목차
1. 저의 간지에 대해
2. 프로젝트 소개
3. 프로젝트 개발 노트
4. 소프트웨어 솔루션 개발 중 얻은 교훈
게임 서버 프레임워크 개발 프로젝트-네트워크 엔진이 아니라 서버 프레임워크 개발에 초점
-모바일 지원 요소를 포함해 모바일 게임 서버 엔진으로 시장에 소개됨
-초기 목표대로 모바일을 포함하는 범용 서버 엔진으로 전환
iFun Engine: 프로젝트 소개
- Boost- cURL- Google Flag, Logging, Breakpad, Protobuf- HiRedis- MariaDB connector- MongoDB connector- Zookeeper connector- Mono- GameLift SDK- OpenSSL
iFun Engine: 프로젝트에 사용된 기술
2011 년 11 월 9 일 첫 삽
현재 1,996 일째
숫자로 보는 프로젝트
숫자로 보는 프로젝트
3,834 commits
2,071 builds
19 authors
숫자로 보는 프로젝트
1,257 files
294,250 lines 120,051 (h/cc/cs)
18,650 (scripts)
56,425 (documents)
D+2 데비안 패키징
패키지 수준 의존성 정의를 통해엔진 개발자와 엔진 사용자간 동일한 환경 유지 보장
D+4 Continuous Integration 연동
작업자와 상관없이 빌드 결과물의 객관성 확보 보장
D+8 / D+807: DHT 기반 P2P 구현 / 삭제
모바일 네트워크 상에서 P2P 에 회의적 . 구현 제거함 .
D+30 Event 기반 프로그래밍 형태로 변경
개발자가 솔루션 전체를 이해하는 것이 아니라 ,사용할 이벤트만 선별적으로 사용할 수 있게 변경
D+41 문서화 작업 시작
솔루션에 있어서 UI인터페이스 함수
문서
D+43 Lib 방식에서 Framework 방식으로
Event 기반 프로그래밍과 유사한 목적으로 ,학습 곡선을 줄이기 위함 .
D+45 분산 서버 구축을 위한 RPC 작업
서버의 확장성은 서버 설계 때부터 고려해야 함 .이 후 XMLRPC 를 성능 이유로 custom RPC 로 변경 .
D+98 행동 Log 시스템 구현
프로그램 로그 외에 유저의 행동 수집을 위한 로그 구현 .행동 로그는 추후 고객 지원 등에 절대적으로 필요함 .
D+147 TCP 네트워크 세션 구현
IP 변경되는 모바일 환경을 고려하여 TCP 위 세션 계층 구현 .이후 세션 계층은 사용 편의성 때문에 두 번의 큰 변화를 겪음 .
D+228 UDP 네트워크 세션 구현
세션 계층에 UDP 와 websocket 추가 .이 후 websocket 은 사용빈도 문제로 삭제됨 .
D+252 ORM 초기 버전 구현
MongoDB 를 backend 로 하는 ORM 구현 .이 후 MongoDB 를 MySQL 로 변경 .
D+409 모바일 플랫폼 인증 기능 구현
Facebook 과 Nexon Play 지원 .
D+510 Unity3D 대응 시작
클라이언트 플러그인 없이는클라이언트 개발이 지나치게 어렵다는 것을 인정 .
D+710 모바일 플랫폼 결제 검증 기능 구현
Google Play 와 Apple AppStore 지원 .
D+1099 REST API Endpoint 지원
게임 서버에서 관리목적 REST API 로 상태값을 노출 .
D+1427 서버 엔진 프로파일러 구현
Black box 인 게임 엔진의 visibility 향상 .
D+1808 C# 지원
사용 편의성 확대 목적 .
D+1827 Dedicated Server 관리 구현
사용 편의성 확대 목적 .
D+1861 모니터링 대시보드 구현
Black box 인 서버 엔진의 visibility 향상 .
개발 노트 정리D+2 패키징 방식 도입 D+262 ORM 구현 시작
D+4 Continuous Integration 도입 D+409 인증 플랫폼 연동
D+8 P2P 도입 ( 이후 제거 ) D+510 클라이언트 엔진 플러그인 지원
D+30 이벤트 기반 프로그래밍 모델로 전환 D+710 결제 플랫폼 연동
D+41 문서화 D+1099 관리용 REST API 추가
D+43 프레임워크 방식으로 전환 D+1427 엔진 프로파일러 추가
D+45 분산 시스템 구현 시작 D+1808 C# 지원
D+98 행동 로그 수집 시스템 구현 D+1827 데디케이트 서버 지원
D+147 TCP 지원 및 세션 계층 구현 D+1861 모니터링 대시보드 지원
D+228 UDP 지원
개발 노트 정리D+2 패키징 방식 도입 D+262 ORM 구현 시작
D+4 Continuous Integration 도입 D+409 인증 플랫폼 연동
D+8 P2P 도입 ( 이후 제거 ) D+510 클라이언트 엔진 플러그인 지원
D+30 이벤트 기반 프로그래밍 모델로 전환 D+710 결제 플랫폼 연동
D+41 문서화 D+1099 관리용 REST API 추가
D+43 프레임워크 방식으로 전환 D+1427 엔진 프로파일러 추가
D+45 분산 시스템 구현 시작 D+1808 C# 지원
D+98 행동 로그 수집 시스템 구현 D+1827 데디케이트 서버 지원
D+147 TCP 지원 및 세션 계층 구현 D+1861 모니터링 대시보드 지원
D+228 UDP 지원
배포 관련 배포 관련
개발 노트 정리D+2 패키징 방식 도입 D+262 ORM 구현 시작
D+4 Continuous Integration 도입 D+409 인증 플랫폼 연동
D+8 P2P 도입 ( 이후 제거 ) D+510 클라이언트 엔진 플러그인 지원
D+30 이벤트 기반 프로그래밍 모델로 전환 D+710 결제 플랫폼 연동
D+41 문서화 D+1099 관리용 REST API 추가
D+43 프레임워크 방식으로 전환 D+1427 엔진 프로파일러 추가
D+45 분산 시스템 구현 시작 D+1808 C# 지원
D+98 행동 로그 수집 시스템 구현 D+1827 데디케이트 서버 지원
D+147 TCP 지원 및 세션 계층 구현 D+1861 모니터링 대시보드 지원
D+228 UDP 지원
배포 관련 배포 관련
프로그래밍 모델 관련 프로그래밍 모델 관련
개발 노트 정리D+2 패키징 방식 도입 D+262 ORM 구현 시작
D+4 Continuous Integration 도입 D+409 인증 플랫폼 연동
D+8 P2P 도입 ( 이후 제거 ) D+510 클라이언트 엔진 플러그인 지원
D+30 이벤트 기반 프로그래밍 모델로 전환 D+710 결제 플랫폼 연동
D+41 문서화 D+1099 관리용 REST API 추가
D+43 프레임워크 방식으로 전환 D+1427 엔진 프로파일러 추가
D+45 분산 시스템 구현 시작 D+1808 C# 지원
D+98 행동 로그 수집 시스템 구현 D+1827 데디케이트 서버 지원
D+147 TCP 지원 및 세션 계층 구현 D+1861 모니터링 대시보드 지원
D+228 UDP 지원
배포 관련 배포 관련
프로그래밍 모델 관련 프로그래밍 모델 관련
운영 및 관리 관련 운영 및 관리 관련
인 하우스 개발과 아주 많이 다르더이다 .
敎訓 1: 솔루션 배포 방식을 고민하라
처음부터 패키지 업그레이드 방법을 고려해야 함 .
설치 과정이 단순해야 함 . (out-of-box 방식 )
敎訓 2: 버그는 치명적이다 .
패치를 내보내도 한 번 나간 버그는 사라지지 않을 수 있다 .
( 갤럭시 노트 7 의 경험 )
한 번 등을 돌린 사용자는 돌아오지 않는다 .
따름 敎訓 1: Peer Code Review 의 생활화
버그 가능성을 개별 작업자의 능력이 아니라 시스템으로 풀어야
한다 .
따름 敎訓 2: 빌드는 자동화 하라
빌드 자동화는 제품의 일관된 품질을 보장하는데 도움이 된다 .
작업자에 따른 결과물의 차이라는 위험을 제거할 수 있다 .
敎訓 3: 문서화는 무엇보다 중요하다
“ 구슬이 서 말이라도 꿰어야 보배다 .”
“ 문서는 SW 솔루션에 있어 UI 다 .”
敎訓 4: Black box 라는 것을 명심하라
블랙박스 사용자는 언제나 답답함을 느낄 수 있다 .
그러니 인터페이스는 최소화하고 , 동작은 직관적이게 한다 .
敎訓 5: 서비스 운영 / 모니터링에 신경 쓰라
Black box 를 진단할 수 있는 방식을 반드시 제공해야 된다 .
기타 잔소리 : Co-work 에 대해 ..
프로젝트는 내가 잘 났다는 것을 과시하기 위한 것이 아니다 .
-읽기 쉬운 코드 선호
-상세한 commit log
-관리가 용이한 개발툴로 변경 (automake -> cmake)
-“ 내 코드를 쓰면서 동료가 실수한다면 동료가 바보가
아니라 내가 나 혼자만을 위한 코드를 짠 것이다”
기타 잔소리 : 서버 엔진 vs. 네트워크 엔진
서버 엔진을 네트워크 엔진으로 착각하면 안됨 .
서버 엔진은 전반적인 생산성과 확장성에 대한 많은 고려가 필요 .
후회 되는 점 : 사용자 편의성 고려 늦음
인증 / 빌링 및 프로그래밍 언어에 대한 배려가 늦었음 .
덤 : GitStats 로 알아보는 프로젝트 생산성
출근 직후와 점심 식사 직후의 생산성은 높지 않다 .
우리 직원들은 퇴근 직전까지도 열심히 일한다 . ( 흐믓 )
요일 별 생산성에 큰 차이는 없지만 금요일이 약간 낮다 .
덤 : GitStats 로 알아보는 프로젝트 생산성
건물의 냉난방이 이루어지지 않는 환절기에 생산성이 낮다 .
덤 : GitStats 로 알아보는 프로젝트 생산성
감사합니다 .