[아이펀팩토리]2017 ndc 강연 자료_아이펀 엔진 개발 노트

46
iFunFactory Technical Writer 문대경 ([email protected]) 범용 게임 서버 엔진 개발 포스트모템 아이펀 엔진 개발 노트

Upload: ifunfactory-inc

Post on 22-Jan-2018

501 views

Category:

Engineering


9 download

TRANSCRIPT

Page 1: [아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트

iFunFactory Technical Writer

문대경 ([email protected])

범용 게임 서버 엔진 개발 포스트모템아이펀 엔진 개발 노트

Page 2: [아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트

아주 조심스럽습니다 .

저의 소중한 간지를 위해 , 물건 파는 시간이 되지 않게 하겠습니

다 .

Page 3: [아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트

목차

1. 저의 간지에 대해

2. 프로젝트 소개

3. 프로젝트 개발 노트

4. 소프트웨어 솔루션 개발 중 얻은 교훈

Page 4: [아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트

게임 서버 프레임워크 개발 프로젝트-네트워크 엔진이 아니라 서버 프레임워크 개발에 초점

-모바일 지원 요소를 포함해 모바일 게임 서버 엔진으로 시장에 소개됨

-초기 목표대로 모바일을 포함하는 범용 서버 엔진으로 전환

iFun Engine: 프로젝트 소개

Page 5: [아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트

- Boost- cURL- Google Flag, Logging, Breakpad, Protobuf- HiRedis- MariaDB connector- MongoDB connector- Zookeeper connector- Mono- GameLift SDK- OpenSSL

iFun Engine: 프로젝트에 사용된 기술

Page 6: [아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트

2011 년 11 월 9 일 첫 삽

현재 1,996 일째

숫자로 보는 프로젝트

Page 7: [아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트

숫자로 보는 프로젝트

3,834 commits

2,071 builds

19 authors

Page 8: [아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트

숫자로 보는 프로젝트

1,257 files

294,250 lines 120,051 (h/cc/cs)

18,650 (scripts)

56,425 (documents)

Page 9: [아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트

D+2 데비안 패키징

패키지 수준 의존성 정의를 통해엔진 개발자와 엔진 사용자간 동일한 환경 유지 보장

Page 10: [아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트

D+4 Continuous Integration 연동

작업자와 상관없이 빌드 결과물의 객관성 확보 보장

Page 11: [아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트

D+8 / D+807: DHT 기반 P2P 구현 / 삭제

모바일 네트워크 상에서 P2P 에 회의적 . 구현 제거함 .

Page 12: [아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트

D+30 Event 기반 프로그래밍 형태로 변경

개발자가 솔루션 전체를 이해하는 것이 아니라 ,사용할 이벤트만 선별적으로 사용할 수 있게 변경

Page 13: [아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트

D+41 문서화 작업 시작

솔루션에 있어서 UI인터페이스 함수

문서

Page 14: [아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트

D+43 Lib 방식에서 Framework 방식으로

Event 기반 프로그래밍과 유사한 목적으로 ,학습 곡선을 줄이기 위함 .

Page 15: [아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트

D+45 분산 서버 구축을 위한 RPC 작업

서버의 확장성은 서버 설계 때부터 고려해야 함 .이 후 XMLRPC 를 성능 이유로 custom RPC 로 변경 .

Page 16: [아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트

D+98 행동 Log 시스템 구현

프로그램 로그 외에 유저의 행동 수집을 위한 로그 구현 .행동 로그는 추후 고객 지원 등에 절대적으로 필요함 .

Page 17: [아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트

D+147 TCP 네트워크 세션 구현

IP 변경되는 모바일 환경을 고려하여 TCP 위 세션 계층 구현 .이후 세션 계층은 사용 편의성 때문에 두 번의 큰 변화를 겪음 .

Page 18: [아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트

D+228 UDP 네트워크 세션 구현

세션 계층에 UDP 와 websocket 추가 .이 후 websocket 은 사용빈도 문제로 삭제됨 .

Page 19: [아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트

D+252 ORM 초기 버전 구현

MongoDB 를 backend 로 하는 ORM 구현 .이 후 MongoDB 를 MySQL 로 변경 .

Page 20: [아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트

D+409 모바일 플랫폼 인증 기능 구현

Facebook 과 Nexon Play 지원 .

Page 21: [아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트

D+510 Unity3D 대응 시작

클라이언트 플러그인 없이는클라이언트 개발이 지나치게 어렵다는 것을 인정 .

Page 22: [아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트

D+710 모바일 플랫폼 결제 검증 기능 구현

Google Play 와 Apple AppStore 지원 .

Page 23: [아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트

D+1099 REST API Endpoint 지원

게임 서버에서 관리목적 REST API 로 상태값을 노출 .

Page 24: [아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트

D+1427 서버 엔진 프로파일러 구현

Black box 인 게임 엔진의 visibility 향상 .

Page 25: [아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트

D+1808 C# 지원

사용 편의성 확대 목적 .

Page 26: [아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트

D+1827 Dedicated Server 관리 구현

사용 편의성 확대 목적 .

Page 27: [아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트

D+1861 모니터링 대시보드 구현

Black box 인 서버 엔진의 visibility 향상 .

Page 28: [아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트

개발 노트 정리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 지원

Page 29: [아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트

개발 노트 정리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 지원

배포 관련 배포 관련

Page 30: [아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트

개발 노트 정리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 지원

배포 관련 배포 관련

프로그래밍 모델 관련 프로그래밍 모델 관련

Page 31: [아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트

개발 노트 정리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 지원

배포 관련 배포 관련

프로그래밍 모델 관련 프로그래밍 모델 관련

운영 및 관리 관련 운영 및 관리 관련

Page 32: [아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트

인 하우스 개발과 아주 많이 다르더이다 .

Page 33: [아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트

敎訓 1: 솔루션 배포 방식을 고민하라

처음부터 패키지 업그레이드 방법을 고려해야 함 .

설치 과정이 단순해야 함 . (out-of-box 방식 )

Page 34: [아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트

敎訓 2: 버그는 치명적이다 .

패치를 내보내도 한 번 나간 버그는 사라지지 않을 수 있다 .

( 갤럭시 노트 7 의 경험 )

한 번 등을 돌린 사용자는 돌아오지 않는다 .

Page 35: [아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트

따름 敎訓 1: Peer Code Review 의 생활화

버그 가능성을 개별 작업자의 능력이 아니라 시스템으로 풀어야

한다 .

Page 36: [아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트

따름 敎訓 2: 빌드는 자동화 하라

빌드 자동화는 제품의 일관된 품질을 보장하는데 도움이 된다 .

작업자에 따른 결과물의 차이라는 위험을 제거할 수 있다 .

Page 37: [아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트

敎訓 3: 문서화는 무엇보다 중요하다

“ 구슬이 서 말이라도 꿰어야 보배다 .”

“ 문서는 SW 솔루션에 있어 UI 다 .”

Page 38: [아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트

敎訓 4: Black box 라는 것을 명심하라

블랙박스 사용자는 언제나 답답함을 느낄 수 있다 .

그러니 인터페이스는 최소화하고 , 동작은 직관적이게 한다 .

Page 39: [아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트

敎訓 5: 서비스 운영 / 모니터링에 신경 쓰라

Black box 를 진단할 수 있는 방식을 반드시 제공해야 된다 .

Page 40: [아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트

기타 잔소리 : Co-work 에 대해 ..

프로젝트는 내가 잘 났다는 것을 과시하기 위한 것이 아니다 .

-읽기 쉬운 코드 선호

-상세한 commit log

-관리가 용이한 개발툴로 변경 (automake -> cmake)

-“ 내 코드를 쓰면서 동료가 실수한다면 동료가 바보가

아니라 내가 나 혼자만을 위한 코드를 짠 것이다”

Page 41: [아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트

기타 잔소리 : 서버 엔진 vs. 네트워크 엔진

서버 엔진을 네트워크 엔진으로 착각하면 안됨 .

서버 엔진은 전반적인 생산성과 확장성에 대한 많은 고려가 필요 .

Page 42: [아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트

후회 되는 점 : 사용자 편의성 고려 늦음

인증 / 빌링 및 프로그래밍 언어에 대한 배려가 늦었음 .

Page 43: [아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트

덤 : GitStats 로 알아보는 프로젝트 생산성

출근 직후와 점심 식사 직후의 생산성은 높지 않다 .

우리 직원들은 퇴근 직전까지도 열심히 일한다 . ( 흐믓 )

Page 44: [아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트

요일 별 생산성에 큰 차이는 없지만 금요일이 약간 낮다 .

덤 : GitStats 로 알아보는 프로젝트 생산성

Page 45: [아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트

건물의 냉난방이 이루어지지 않는 환절기에 생산성이 낮다 .

덤 : GitStats 로 알아보는 프로젝트 생산성

Page 46: [아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트

감사합니다 .