SlideShare a Scribd company logo
1 of 46
iFunFactory Technical Writer
문대경 (dkmoon@ifunfactory.com)
범용 게임 서버 엔진 개발 포스트모템
아이펀 엔진 개발 노트
아주 조심스럽습니다 .
저의 소중한 간지를 위해 , 물건 파는 시간이 되지 않게 하겠습니
다 .
목차
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 로 알아보는 프로젝트 생산성
감사합니다 .

More Related Content

What's hot

클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다
클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다
클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다Dae Kim
 
NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀승명 양
 
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games ConferenceKGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games ConferenceXionglong Jin
 
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트Dae Kim
 
라이브 서비스를 위한 게임 서버 구성
라이브 서비스를 위한 게임 서버 구성라이브 서비스를 위한 게임 서버 구성
라이브 서비스를 위한 게임 서버 구성Hyunjik Bae
 
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기Miyu Park
 
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버Heungsub Lee
 
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프Jinuk Kim
 
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기Brian Hong
 
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기Jinuk Kim
 
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)Brian Hong
 
스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들Hyunjik Bae
 
서버 개발자가 되기 위한 첫 걸음
서버 개발자가 되기 위한 첫 걸음서버 개발자가 되기 위한 첫 걸음
서버 개발자가 되기 위한 첫 걸음nexusz99
 
AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS)
AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS)AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS)
AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS)Brian Hong
 
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드Jeongsang Baek
 
온라인 게임과 소셜 게임 서버는 어떻게 다른가?
온라인 게임과 소셜 게임 서버는 어떻게 다른가?온라인 게임과 소셜 게임 서버는 어떻게 다른가?
온라인 게임과 소셜 게임 서버는 어떻게 다른가?Seok-ju Yun
 
PHP 와 MySQL을 이용한 게임 랭킹 구축하기
PHP 와 MySQL을 이용한 게임 랭킹 구축하기PHP 와 MySQL을 이용한 게임 랭킹 구축하기
PHP 와 MySQL을 이용한 게임 랭킹 구축하기Yo-Chang Song
 
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기Kiyoung Moon
 
Amazon web service를 활용한 모바일 게임 서버 개발 퍼즐 주주의 사례를 중심으로
Amazon web service를 활용한 모바일 게임 서버 개발   퍼즐 주주의 사례를 중심으로Amazon web service를 활용한 모바일 게임 서버 개발   퍼즐 주주의 사례를 중심으로
Amazon web service를 활용한 모바일 게임 서버 개발 퍼즐 주주의 사례를 중심으로Seok-ju Yun
 
[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)
[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)
[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)Sang Don Kim
 

What's hot (20)

클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다
클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다
클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다
 
NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀
 
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games ConferenceKGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
 
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
 
라이브 서비스를 위한 게임 서버 구성
라이브 서비스를 위한 게임 서버 구성라이브 서비스를 위한 게임 서버 구성
라이브 서비스를 위한 게임 서버 구성
 
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
 
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
 
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프
 
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기
 
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
 
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
 
스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들
 
서버 개발자가 되기 위한 첫 걸음
서버 개발자가 되기 위한 첫 걸음서버 개발자가 되기 위한 첫 걸음
서버 개발자가 되기 위한 첫 걸음
 
AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS)
AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS)AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS)
AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS)
 
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
 
온라인 게임과 소셜 게임 서버는 어떻게 다른가?
온라인 게임과 소셜 게임 서버는 어떻게 다른가?온라인 게임과 소셜 게임 서버는 어떻게 다른가?
온라인 게임과 소셜 게임 서버는 어떻게 다른가?
 
PHP 와 MySQL을 이용한 게임 랭킹 구축하기
PHP 와 MySQL을 이용한 게임 랭킹 구축하기PHP 와 MySQL을 이용한 게임 랭킹 구축하기
PHP 와 MySQL을 이용한 게임 랭킹 구축하기
 
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
 
Amazon web service를 활용한 모바일 게임 서버 개발 퍼즐 주주의 사례를 중심으로
Amazon web service를 활용한 모바일 게임 서버 개발   퍼즐 주주의 사례를 중심으로Amazon web service를 활용한 모바일 게임 서버 개발   퍼즐 주주의 사례를 중심으로
Amazon web service를 활용한 모바일 게임 서버 개발 퍼즐 주주의 사례를 중심으로
 
[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)
[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)
[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)
 

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

Meetup tools for-cloud_native_apps_meetup20180510-vs
Meetup tools for-cloud_native_apps_meetup20180510-vsMeetup tools for-cloud_native_apps_meetup20180510-vs
Meetup tools for-cloud_native_apps_meetup20180510-vsminseok kim
 
ifcpp build guide
ifcpp build guideifcpp build guide
ifcpp build guideJUNHEEKIM27
 
Knative로 서버리스 워크로드 구현
Knative로 서버리스 워크로드 구현Knative로 서버리스 워크로드 구현
Knative로 서버리스 워크로드 구현Jinwoong Kim
 
Red Hat Ansible 적용 사례
Red Hat Ansible 적용 사례Red Hat Ansible 적용 사례
Red Hat Ansible 적용 사례Opennaru, inc.
 
빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)YEONG-CHEON YOU
 
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료지원 정
 
Block chain bidding_System
Block chain bidding_SystemBlock chain bidding_System
Block chain bidding_System환석 주
 
대규모 프로젝트 개발이야기 - 이승헌, 유나이트 코리아 2014
대규모 프로젝트 개발이야기 - 이승헌, 유나이트 코리아 2014대규모 프로젝트 개발이야기 - 이승헌, 유나이트 코리아 2014
대규모 프로젝트 개발이야기 - 이승헌, 유나이트 코리아 2014NDOORS
 
[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트Chanwoong Kim
 
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!pyrasis
 
TOAST Meetup2015 - 구름 Cloud IDE (류성태)
TOAST Meetup2015 - 구름 Cloud IDE (류성태)TOAST Meetup2015 - 구름 Cloud IDE (류성태)
TOAST Meetup2015 - 구름 Cloud IDE (류성태)TOAST_NHNent
 
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기Chanwoong Kim
 
Social game and windows azure platform (final)
Social game and windows azure platform (final)Social game and windows azure platform (final)
Social game and windows azure platform (final)정현 남
 
[Td 2015]구름 위로 올려 어느 곳에서든 연결되는 서비스 azure 앱 서비스(이종인)
[Td 2015]구름 위로 올려 어느 곳에서든 연결되는 서비스 azure 앱 서비스(이종인)[Td 2015]구름 위로 올려 어느 곳에서든 연결되는 서비스 azure 앱 서비스(이종인)
[Td 2015]구름 위로 올려 어느 곳에서든 연결되는 서비스 azure 앱 서비스(이종인)Sang Don Kim
 
[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)Ildoo Kim
 
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기Jaeseung Ha
 
Web rtc meetup_korea_1st(20161115)
Web rtc meetup_korea_1st(20161115)Web rtc meetup_korea_1st(20161115)
Web rtc meetup_korea_1st(20161115)Rang-Hyuck Lee
 
[slideshare]k8s.pptx
[slideshare]k8s.pptx[slideshare]k8s.pptx
[slideshare]k8s.pptxssuserb8551e
 

Similar to [아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트 (20)

Meetup tools for-cloud_native_apps_meetup20180510-vs
Meetup tools for-cloud_native_apps_meetup20180510-vsMeetup tools for-cloud_native_apps_meetup20180510-vs
Meetup tools for-cloud_native_apps_meetup20180510-vs
 
ifcpp build guide
ifcpp build guideifcpp build guide
ifcpp build guide
 
Knative로 서버리스 워크로드 구현
Knative로 서버리스 워크로드 구현Knative로 서버리스 워크로드 구현
Knative로 서버리스 워크로드 구현
 
Red Hat Ansible 적용 사례
Red Hat Ansible 적용 사례Red Hat Ansible 적용 사례
Red Hat Ansible 적용 사례
 
빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)
 
피니엔진
피니엔진피니엔진
피니엔진
 
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
 
Block chain bidding_System
Block chain bidding_SystemBlock chain bidding_System
Block chain bidding_System
 
대규모 프로젝트 개발이야기 - 이승헌, 유나이트 코리아 2014
대규모 프로젝트 개발이야기 - 이승헌, 유나이트 코리아 2014대규모 프로젝트 개발이야기 - 이승헌, 유나이트 코리아 2014
대규모 프로젝트 개발이야기 - 이승헌, 유나이트 코리아 2014
 
[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트
 
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
 
TOAST Meetup2015 - 구름 Cloud IDE (류성태)
TOAST Meetup2015 - 구름 Cloud IDE (류성태)TOAST Meetup2015 - 구름 Cloud IDE (류성태)
TOAST Meetup2015 - 구름 Cloud IDE (류성태)
 
개발자를 위한 네이버 클라우드 플랫폼ㅣNAVER CLOUD PLATFORM for Developers
개발자를 위한 네이버 클라우드 플랫폼ㅣNAVER CLOUD PLATFORM for Developers 개발자를 위한 네이버 클라우드 플랫폼ㅣNAVER CLOUD PLATFORM for Developers
개발자를 위한 네이버 클라우드 플랫폼ㅣNAVER CLOUD PLATFORM for Developers
 
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
 
Social game and windows azure platform (final)
Social game and windows azure platform (final)Social game and windows azure platform (final)
Social game and windows azure platform (final)
 
[Td 2015]구름 위로 올려 어느 곳에서든 연결되는 서비스 azure 앱 서비스(이종인)
[Td 2015]구름 위로 올려 어느 곳에서든 연결되는 서비스 azure 앱 서비스(이종인)[Td 2015]구름 위로 올려 어느 곳에서든 연결되는 서비스 azure 앱 서비스(이종인)
[Td 2015]구름 위로 올려 어느 곳에서든 연결되는 서비스 azure 앱 서비스(이종인)
 
[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)
 
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기
 
Web rtc meetup_korea_1st(20161115)
Web rtc meetup_korea_1st(20161115)Web rtc meetup_korea_1st(20161115)
Web rtc meetup_korea_1st(20161115)
 
[slideshare]k8s.pptx
[slideshare]k8s.pptx[slideshare]k8s.pptx
[slideshare]k8s.pptx
 

More from iFunFactory Inc.

2019 아이펀팩토리 Dev Day 세션6 아이펀엔진 운영툴 연동하기 - 장수원
2019 아이펀팩토리 Dev Day 세션6 아이펀엔진 운영툴 연동하기 - 장수원2019 아이펀팩토리 Dev Day 세션6 아이펀엔진 운영툴 연동하기 - 장수원
2019 아이펀팩토리 Dev Day 세션6 아이펀엔진 운영툴 연동하기 - 장수원iFunFactory Inc.
 
2019 아이펀팩토리 Dev Day 세션5 아이펀엔진으로 만든 게임 성능 분석 및 디버깅 - 남승현
2019 아이펀팩토리 Dev Day 세션5 아이펀엔진으로 만든 게임 성능 분석 및 디버깅 - 남승현2019 아이펀팩토리 Dev Day 세션5 아이펀엔진으로 만든 게임 성능 분석 및 디버깅 - 남승현
2019 아이펀팩토리 Dev Day 세션5 아이펀엔진으로 만든 게임 성능 분석 및 디버깅 - 남승현iFunFactory Inc.
 
2019 아이펀팩토리 Dev Day 세션4 아이펀엔진에 MO 게임 콘텐츠 채워 넣기 - 남승현
2019 아이펀팩토리 Dev Day 세션4 아이펀엔진에 MO 게임 콘텐츠 채워 넣기 - 남승현2019 아이펀팩토리 Dev Day 세션4 아이펀엔진에 MO 게임 콘텐츠 채워 넣기 - 남승현
2019 아이펀팩토리 Dev Day 세션4 아이펀엔진에 MO 게임 콘텐츠 채워 넣기 - 남승현iFunFactory Inc.
 
2019 아이펀팩토리 Dev Day 세션3 아이펀엔진 개발 환경 설정하기 (Windows+ VS) - 김진욱
2019 아이펀팩토리 Dev Day 세션3 아이펀엔진 개발 환경 설정하기 (Windows+ VS) - 김진욱2019 아이펀팩토리 Dev Day 세션3 아이펀엔진 개발 환경 설정하기 (Windows+ VS) - 김진욱
2019 아이펀팩토리 Dev Day 세션3 아이펀엔진 개발 환경 설정하기 (Windows+ VS) - 김진욱iFunFactory Inc.
 
2019 아이펀팩토리 Dev Day 세션2 아이펀엔진 개발 환경 설정하기 (Linux + VS Code) - 김진욱
2019 아이펀팩토리 Dev Day 세션2 아이펀엔진 개발 환경 설정하기 (Linux + VS Code) - 김진욱2019 아이펀팩토리 Dev Day 세션2 아이펀엔진 개발 환경 설정하기 (Linux + VS Code) - 김진욱
2019 아이펀팩토리 Dev Day 세션2 아이펀엔진 개발 환경 설정하기 (Linux + VS Code) - 김진욱iFunFactory Inc.
 
2019 아이펀팩토리 Dev Day 세션1 네트워크 프로그래밍 개론 - 문대경 대표
2019 아이펀팩토리 Dev Day 세션1 네트워크 프로그래밍 개론 - 문대경 대표2019 아이펀팩토리 Dev Day 세션1 네트워크 프로그래밍 개론 - 문대경 대표
2019 아이펀팩토리 Dev Day 세션1 네트워크 프로그래밍 개론 - 문대경 대표iFunFactory Inc.
 
[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO
[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO
[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTOiFunFactory Inc.
 
[아이펀팩토리] 2018 데브데이 서버위더스 _03 Scalable 한 게임 서버 만들기
[아이펀팩토리] 2018 데브데이 서버위더스 _03 Scalable 한 게임 서버 만들기[아이펀팩토리] 2018 데브데이 서버위더스 _03 Scalable 한 게임 서버 만들기
[아이펀팩토리] 2018 데브데이 서버위더스 _03 Scalable 한 게임 서버 만들기iFunFactory Inc.
 
[아이펀팩토리] 2018 데브데이 서버위더스 _01 HTML5/WebSocket으로 Pong 게임 만들기
[아이펀팩토리] 2018 데브데이 서버위더스 _01 HTML5/WebSocket으로 Pong 게임 만들기[아이펀팩토리] 2018 데브데이 서버위더스 _01 HTML5/WebSocket으로 Pong 게임 만들기
[아이펀팩토리] 2018 데브데이 서버위더스 _01 HTML5/WebSocket으로 Pong 게임 만들기iFunFactory Inc.
 
[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유
[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유
[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유iFunFactory Inc.
 
[아이펀팩토리] 2018 데브데이 서버위더스 _04 리눅스 게임 서버 성능 분석
[아이펀팩토리] 2018 데브데이 서버위더스 _04 리눅스 게임 서버 성능 분석[아이펀팩토리] 2018 데브데이 서버위더스 _04 리눅스 게임 서버 성능 분석
[아이펀팩토리] 2018 데브데이 서버위더스 _04 리눅스 게임 서버 성능 분석iFunFactory Inc.
 
[아이펀팩토리] 2017 NDCP
[아이펀팩토리] 2017 NDCP [아이펀팩토리] 2017 NDCP
[아이펀팩토리] 2017 NDCP iFunFactory Inc.
 
유니티 쉐이더 단기속성
유니티 쉐이더 단기속성유니티 쉐이더 단기속성
유니티 쉐이더 단기속성iFunFactory Inc.
 
게임 서버 성능 분석하기
게임 서버 성능 분석하기게임 서버 성능 분석하기
게임 서버 성능 분석하기iFunFactory Inc.
 
혼자서 만드는 MMO게임 서버
혼자서 만드는 MMO게임 서버혼자서 만드는 MMO게임 서버
혼자서 만드는 MMO게임 서버iFunFactory Inc.
 
Python과 AWS를 이용하여 게임 테스트 환경 구축하기
Python과 AWS를 이용하여 게임 테스트 환경 구축하기Python과 AWS를 이용하여 게임 테스트 환경 구축하기
Python과 AWS를 이용하여 게임 테스트 환경 구축하기iFunFactory Inc.
 
PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교
PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교
PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교iFunFactory Inc.
 
Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기iFunFactory Inc.
 
게임 운영에 필요한 로그성 데이터들에 대하여
게임 운영에 필요한 로그성 데이터들에 대하여게임 운영에 필요한 로그성 데이터들에 대하여
게임 운영에 필요한 로그성 데이터들에 대하여iFunFactory Inc.
 
Make "PONG" : 아키텍팅과 동기화 테크닉
Make "PONG" : 아키텍팅과 동기화 테크닉Make "PONG" : 아키텍팅과 동기화 테크닉
Make "PONG" : 아키텍팅과 동기화 테크닉iFunFactory Inc.
 

More from iFunFactory Inc. (20)

2019 아이펀팩토리 Dev Day 세션6 아이펀엔진 운영툴 연동하기 - 장수원
2019 아이펀팩토리 Dev Day 세션6 아이펀엔진 운영툴 연동하기 - 장수원2019 아이펀팩토리 Dev Day 세션6 아이펀엔진 운영툴 연동하기 - 장수원
2019 아이펀팩토리 Dev Day 세션6 아이펀엔진 운영툴 연동하기 - 장수원
 
2019 아이펀팩토리 Dev Day 세션5 아이펀엔진으로 만든 게임 성능 분석 및 디버깅 - 남승현
2019 아이펀팩토리 Dev Day 세션5 아이펀엔진으로 만든 게임 성능 분석 및 디버깅 - 남승현2019 아이펀팩토리 Dev Day 세션5 아이펀엔진으로 만든 게임 성능 분석 및 디버깅 - 남승현
2019 아이펀팩토리 Dev Day 세션5 아이펀엔진으로 만든 게임 성능 분석 및 디버깅 - 남승현
 
2019 아이펀팩토리 Dev Day 세션4 아이펀엔진에 MO 게임 콘텐츠 채워 넣기 - 남승현
2019 아이펀팩토리 Dev Day 세션4 아이펀엔진에 MO 게임 콘텐츠 채워 넣기 - 남승현2019 아이펀팩토리 Dev Day 세션4 아이펀엔진에 MO 게임 콘텐츠 채워 넣기 - 남승현
2019 아이펀팩토리 Dev Day 세션4 아이펀엔진에 MO 게임 콘텐츠 채워 넣기 - 남승현
 
2019 아이펀팩토리 Dev Day 세션3 아이펀엔진 개발 환경 설정하기 (Windows+ VS) - 김진욱
2019 아이펀팩토리 Dev Day 세션3 아이펀엔진 개발 환경 설정하기 (Windows+ VS) - 김진욱2019 아이펀팩토리 Dev Day 세션3 아이펀엔진 개발 환경 설정하기 (Windows+ VS) - 김진욱
2019 아이펀팩토리 Dev Day 세션3 아이펀엔진 개발 환경 설정하기 (Windows+ VS) - 김진욱
 
2019 아이펀팩토리 Dev Day 세션2 아이펀엔진 개발 환경 설정하기 (Linux + VS Code) - 김진욱
2019 아이펀팩토리 Dev Day 세션2 아이펀엔진 개발 환경 설정하기 (Linux + VS Code) - 김진욱2019 아이펀팩토리 Dev Day 세션2 아이펀엔진 개발 환경 설정하기 (Linux + VS Code) - 김진욱
2019 아이펀팩토리 Dev Day 세션2 아이펀엔진 개발 환경 설정하기 (Linux + VS Code) - 김진욱
 
2019 아이펀팩토리 Dev Day 세션1 네트워크 프로그래밍 개론 - 문대경 대표
2019 아이펀팩토리 Dev Day 세션1 네트워크 프로그래밍 개론 - 문대경 대표2019 아이펀팩토리 Dev Day 세션1 네트워크 프로그래밍 개론 - 문대경 대표
2019 아이펀팩토리 Dev Day 세션1 네트워크 프로그래밍 개론 - 문대경 대표
 
[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO
[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO
[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO
 
[아이펀팩토리] 2018 데브데이 서버위더스 _03 Scalable 한 게임 서버 만들기
[아이펀팩토리] 2018 데브데이 서버위더스 _03 Scalable 한 게임 서버 만들기[아이펀팩토리] 2018 데브데이 서버위더스 _03 Scalable 한 게임 서버 만들기
[아이펀팩토리] 2018 데브데이 서버위더스 _03 Scalable 한 게임 서버 만들기
 
[아이펀팩토리] 2018 데브데이 서버위더스 _01 HTML5/WebSocket으로 Pong 게임 만들기
[아이펀팩토리] 2018 데브데이 서버위더스 _01 HTML5/WebSocket으로 Pong 게임 만들기[아이펀팩토리] 2018 데브데이 서버위더스 _01 HTML5/WebSocket으로 Pong 게임 만들기
[아이펀팩토리] 2018 데브데이 서버위더스 _01 HTML5/WebSocket으로 Pong 게임 만들기
 
[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유
[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유
[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유
 
[아이펀팩토리] 2018 데브데이 서버위더스 _04 리눅스 게임 서버 성능 분석
[아이펀팩토리] 2018 데브데이 서버위더스 _04 리눅스 게임 서버 성능 분석[아이펀팩토리] 2018 데브데이 서버위더스 _04 리눅스 게임 서버 성능 분석
[아이펀팩토리] 2018 데브데이 서버위더스 _04 리눅스 게임 서버 성능 분석
 
[아이펀팩토리] 2017 NDCP
[아이펀팩토리] 2017 NDCP [아이펀팩토리] 2017 NDCP
[아이펀팩토리] 2017 NDCP
 
유니티 쉐이더 단기속성
유니티 쉐이더 단기속성유니티 쉐이더 단기속성
유니티 쉐이더 단기속성
 
게임 서버 성능 분석하기
게임 서버 성능 분석하기게임 서버 성능 분석하기
게임 서버 성능 분석하기
 
혼자서 만드는 MMO게임 서버
혼자서 만드는 MMO게임 서버혼자서 만드는 MMO게임 서버
혼자서 만드는 MMO게임 서버
 
Python과 AWS를 이용하여 게임 테스트 환경 구축하기
Python과 AWS를 이용하여 게임 테스트 환경 구축하기Python과 AWS를 이용하여 게임 테스트 환경 구축하기
Python과 AWS를 이용하여 게임 테스트 환경 구축하기
 
PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교
PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교
PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교
 
Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기
 
게임 운영에 필요한 로그성 데이터들에 대하여
게임 운영에 필요한 로그성 데이터들에 대하여게임 운영에 필요한 로그성 데이터들에 대하여
게임 운영에 필요한 로그성 데이터들에 대하여
 
Make "PONG" : 아키텍팅과 동기화 테크닉
Make "PONG" : 아키텍팅과 동기화 테크닉Make "PONG" : 아키텍팅과 동기화 테크닉
Make "PONG" : 아키텍팅과 동기화 테크닉
 

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

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