86
NDC2013 정정 정정정

Ndc2013 정리(upload버전)

Embed Size (px)

DESCRIPTION

NDC 13 간단정리 2013.05.04 Devrookie 발표 자료 - MSPark -

Citation preview

Page 1: Ndc2013 정리(upload버전)

NDC2013 정리

박민수

Page 2: Ndc2013 정리(upload버전)

Upload 를 위해서 혹시 몰라서 블리자드 세션은 빼고 올립니다 .

NDC13 을 듣고 메모해 놓은 걸 기반으로 개인적으로 정리해본 PT 입니다 .

실제 내용과 다를 수 있으니 참고해주세요 ~ ㅎㅎㅎ

Page 3: Ndc2013 정리(upload버전)

코끼리를 냉장고에 넣는법 ‘ 삼국지를 품다’ 모바일 플랫폼 개발과 서비스 일지

엔도어즈 – 최부호

Page 4: Ndc2013 정리(upload버전)

코끼리를 냉장고에 넣는법

코끼리 – PC

냉장고 – 모바일PC 개발에서 Unity 를 이용한 모바일 개발로 넘어가면서 경험했던문제점들과 해결방안 , 팁

Page 5: Ndc2013 정리(upload버전)

코끼리를 냉장고에 넣는법

Unity Update - 업데이트 주기가 짧은 편이다 .

멀티플랫폼 엔진- 각 플랫폼 업데이트 - Unity 자체적

3.x 버전은 업데이트마다 Asset Bundle 을 다시 빌드해야 한다 .

그리고 유저가 패치를 받아야 한다 .

4.x 부터는 해결되었으니 4.x 를 사용하라 .

Page 6: Ndc2013 정리(upload버전)

코끼리를 냉장고에 넣는법

많은 모바일 API 제공

세심한 컨트롤은 힘들게 되어있다 .

ex) 진동 – On / Off 정도 지원

별도의 Plug-in 을 제작 해야 한다 .

즉 , 해당 플랫폼에 대한 지식이 꼭 필요하다 .

Page 7: Ndc2013 정리(upload버전)

코끼리를 냉장고에 넣는법

Wifi - PC 에 비해 매우 불안정하다 .

패치 후 안 켜진다는 유저를 찾아가 확인

특정 통신사 Wifi 망에 접속하면 Wifi 자체는 접속이 된거지만 인증을 하지 않으면 통신이 되지 않는 경우가 있다 .

(Web Error 코드가 적혀있고 데이터가 비정상적 )

CRC 등 무결성 검사가 필수적이다 .

Page 8: Ndc2013 정리(upload버전)

코끼리를 냉장고에 넣는법

배터리 문제배터리를 닳게 하는 3 가지 요소1. 디스플레이2. 데이터 통신 모듈3. AP 연산 (AP 연산에 대해서만 최적화 시도 )

PC FPS 를 따르지 않고 특정 FPS 로 고정시켜 AP 연산을 줄인다 .

배터리 소모 속도와 발열이 줄어들었다 .

끊기는 느낌이 나지만 AP 연산 최적화가 도움이 되는것은 증명 .

Page 9: Ndc2013 정리(upload버전)

코끼리를 냉장고에 넣는법

메모리 관리

Object 를 추가하면 메모리 블록을 할당한다 .

여분을 남기고 메모리 블록이 꽉 차면 확장된 사이즈로 할당한다 .

Object 들이 해제하더라도 확장된 사이즈는 그대로 유지한다 .

최대치에 도달하게 되면 Crash 를 낸다 .

재활용 리소스를 잘 관리하고 Memory Pool 이 필수다 .

Page 10: Ndc2013 정리(upload버전)

코끼리를 냉장고에 넣는법

심의 , 반려

모바일은 Update 때마다 심의를 받는다 .

1. Google – Update 후 심사2. 이통 3 사 – 하루 정도 심사3. Apple – 2 주 정도 심사 , 반려가 나면 다시 재 심사 .

심사도 사람이 하는거라 기준이 다르다 .

기존에 통과된 부분도 반려 될 수 있다는 생각을 가지는게 좋다 .

Page 11: Ndc2013 정리(upload버전)

코끼리를 냉장고에 넣는법

심의 , 반려

다른 플랫폼과 Apple 버전을 맞추기 힘들 때가 있다 .

패킷에 버전을 두어서 기능은 안되더라도 실행은 되게끔 처리했다 .

현재 플랫폼에서 구입한 아이템을 다른 플랫폼으로 선물을 금지하기 때문에 해당 기능은 제거하였다 .

플랫폼당 서버로 분리할까도 고려중이다 .

Page 12: Ndc2013 정리(upload버전)

셰이더 리소스 빌드 자동화 할 수 없나요 ?

시스템 구현 및 최적화 사례 소개넥슨 – 정화석

Page 13: Ndc2013 정리(upload버전)

셰이더 리소스 빌드 자동화 할 수 없나요 ?

쉐이더 코드 조합

1. Micro Shader (#include)

2. Uber Shader (#if ~ #endif)

3. Shader Editor (GUI)

#include 와 #if ~ #endif 로 처리하기로 결정

Page 14: Ndc2013 정리(upload버전)

셰이더 리소스 빌드 자동화 할 수 없나요 ?

ShaderSetting 파일

옵션 메타 데이터상속 구조LOD 시스템

C++ 전처리와 메타 데이터를 이용하여 처리하려고 만들기 시작

Page 15: Ndc2013 정리(upload버전)

셰이더 리소스 빌드 자동화 할 수 없나요 ?

컴파일 시간 , 메모리 최적화

컴파일된 바이너리를 바로 사용하자 .

VS 와 PS 를 따로 컴파일한다 .

Technique 는 자체 포맷으로 만들었다 . (DX11 대응 겸 )

Page 16: Ndc2013 정리(upload버전)

셰이더 리소스 빌드 자동화 할 수 없나요 ?

컴파일 시간 , 메모리 최적화

다양한 시도를 하다가 결정된 포맷

Version옵션 Hash 1옵션 Hash 2함수 이름 1함수 이름 2

Version바이너리 1바이너리 2

쉐이더 갯수 1 개

Page 17: Ndc2013 정리(upload버전)

셰이더 리소스 빌드 자동화 할 수 없나요 ?

자동화 빌드

CruiseControl.NET 의 Daily Build 로 등록한다 .

셰이더 수정이 일어나면 재 빌드가 필요하다 .

셰이더 코드가 체크인 되면 빌드 서버에서 셰이더를 포함해서 빌드하겠다는 설정을 걸고 빌드를 한다 . 새벽엔 Daily Build 로 돌아가게끔 설정 . (Config On / Off)

Page 18: Ndc2013 정리(upload버전)

마영전의 구세대 엔진으로 차세대 비주얼 게임 만들기넥슨 – 기현우

Page 19: Ndc2013 정리(upload버전)

마영전의 구세대 엔진으로 차세대 비주얼 게임 만들기HL2 소스엔진에서 L4D 소스 엔진으로 마이그레이션 시도

많은 수정과 자체적인 포맷들로 인해 마이그레이션은 포기

L4D 소스 엔진에 작업 중 .

라이브를 위해서 HL2 소스엔진을 통해서 컨텐츠 만들때 사용한 팁

Page 20: Ndc2013 정리(upload버전)

마영전의 구세대 엔진으로 차세대 비주얼 게임 만들기

Z-Pre Pass 라이팅

엔진이 Deffered 나 Light Pre Pass 를 적용하기는 힘든 구조

32F 텍스쳐에 View-Space 기준으로 Z-Pre Pass 라이팅 적용

Forward 렌더링을 유지하면서 Sun Shaft, DOF 등 적용 가능 .

렌더링을 2번 해야 하므로 비용은 비싼편이다 .

Page 21: Ndc2013 정리(upload버전)

마영전의 구세대 엔진으로 차세대 비주얼 게임 만들기

Sun Shaft, DOF

Sun Shaft

태양을 중심으로 Radial Blur 를 적용하였다 .

Z값을 Occlusion 정보로 활용하였다 .

DOF

초점이 멀수록 블러를 적용Z값을 초점 거리를 계산할 때 활용

Page 22: Ndc2013 정리(upload버전)

마영전의 구세대 엔진으로 차세대 비주얼 게임 만들기

Sun Shaft, DOF

Sun Shaft

플레이어 , 보스 , 월드만 중요

DOF

플레이어 , 타겟 , 월드만 중요

플레이어 , 타겟 (보스 ), 월드만 렌더링 나머지는 Clear!

Page 23: Ndc2013 정리(upload버전)

마영전의 구세대 엔진으로 차세대 비주얼 게임 만들기

강조효과

수풀을 많이 심어 밀림처럼 보이게 만들었다 .

시야를 많이 가리게 되어 카메라를 기준으로 반투명 처리를 했다 .

일부러 나무 틈 사이에 태양을 배치하여 SunShaft 를 강조

보스전 컷신때 보스 뒤에 태양을 배치하여 역광을 주어 강조

Page 24: Ndc2013 정리(upload버전)

마영전의 구세대 엔진으로 차세대 비주얼 게임 만들기

빗물 효과

카메라에 묻는 빗물카메라를 기준으로 파티클을 뿌린다 .

노멀맵 , 굴절도 적용

바닥의 빗물텍스쳐 애니메이션을 이용

Page 25: Ndc2013 정리(upload버전)

마영전의 구세대 엔진으로 차세대 비주얼 게임 만들기

배의 흔들림

월드를 그대로 두고 카메라를 흔든다 .

스카이 박스는 역방향으로 흔들어 하늘은 고정되어 보이게 한다 .

수평선등도 기울어 지겠지만 포그로 가려서 문제가 없었다 .

Page 26: Ndc2013 정리(upload버전)

마영전의 구세대 엔진으로 차세대 비주얼 게임 만들기

빨판 ( 크라켄 )

빨판에 본을 심는건 너무 낭비로 판단텍스쳐 스페이스 기준으로 구 기반 버텍스 노이즈를 적용하기로 함 .

빨판 정면을 기준으로 (0, 0) ~ (1, 1) 텍스쳐를 잡는다 .

(0, 0) 을 (-1, 1) 로 변경하는 루틴을 넣어 구에 대응되게 계산노이즈 함수의 결과값을 이용해 Displacement 해준다 .

Page 27: Ndc2013 정리(upload버전)

마영전의 구세대 엔진으로 차세대 비주얼 게임 만들기

사슬 무기

무기에 20 개정도 본을 넣었다 . 듀얼이므로 40 개정도 사용했음 .

휘두를때는 본 애니로 처리하고 그 후에는 물리 시뮬레이션 처리 .

캐릭터의 프레임과 무기의프레임을 강제적으로 동기화 한다 .

사슬은 본에 대해서 스플라인을 계산해 스프라이트를 적용한다 .

Page 28: Ndc2013 정리(upload버전)

마영전의 구세대 엔진으로 차세대 비주얼 게임 만들기

Trail

Trail 을 줄때는 Plane 의 2 차원 배열을 만들고 그려주었다 .

가장자리 부분은 얇고 길게 처리하여 날카로움을 강조 .

Page 29: Ndc2013 정리(upload버전)

마영전의 구세대 엔진으로 차세대 비주얼 게임 만들기

충돌처리

벽이나 몬스터를 관통하지 못하도록 처리해야 한다 .

손을 기준으로 무기 끝과 벽사이의 거리를 이용하여 비율 적용 .

해당 비율로 본 스케일링을 해준다 .

충돌 점에 대해서 캐시를 두어 비용을 절약했다 .

Page 30: Ndc2013 정리(upload버전)

마영전의 구세대 엔진으로 차세대 비주얼 게임 만들기

발사하기

본 애니메이션은 일정 길이로 발사하도록 잡아놓는다 .

XY쪽은 스케일을 조정해주고 Z쪽은 상체 각도를 회전한다 .

( 상하좌우로 던지기 위해서 )

일단 클라이언트에서 체크후 사슬을 건다 .

이후 서버에서 계산하고 위치를 보정해준다 .

보스등에 많이 사용되므로 보정이 티가 나지 않는다 .

Page 31: Ndc2013 정리(upload버전)

마영전의 구세대 엔진으로 차세대 비주얼 게임 만들기

제압하기

리액션에 대한 애니메이션 추가 없이 처리

기존의 플린치 모션을 랜덤 롤백 (초 중반 부분 ) 한다 .

기존보다 재생 부분이 더 빨라야 한다 .

피니쉬때는 전체 재생을 한번 해주면 관성의 느낌도 줄 수 있다 .

Page 32: Ndc2013 정리(upload버전)

마영전의 구세대 엔진으로 차세대 비주얼 게임 만들기

Y축 플리핑

좌우 미러링 처리를 한다 . ( 실루엣 , 공격판정 )

로컬을 기준으로 Y축 플리핑 처리를 해준다 . (CCW -> CW)

튀는 부분은 중간 변경 모션을 추가하면 해결 될 것이다 .

Page 33: Ndc2013 정리(upload버전)

마영전의 구세대 엔진으로 차세대 비주얼 게임 만들기

Z축 플리핑

천장에 매달리는 연출을 위함 .

로컬 스페이스를 기준으로 Z축 플리핑

천장과 충돌 체크 후 위치를 잡아줌 .

인공지능은 지상에 있는 걸로 처리 ( 대칭 구조라 상관 없었음 )

Page 34: Ndc2013 정리(upload버전)

광택 재질 표현복셀 레이 트레이싱드래곤 플라이 – 허창민

Page 35: Ndc2013 정리(upload버전)

광택 재질 표현현재 스포 2 에서 물리 기반 쉐이딩을 적용

조명 , 거칠기 , 반사도 설정으로 알아서 조명 계산이 되길 원함 .

특히나 Glossy Reflection 강조를 원함 .

관련된 내용중 Voxel Cone Tracing 을 구현해 보기 위해서 Voxel Ray Tracing 을 먼저 해보게 되었다 .

Page 36: Ndc2013 정리(upload버전)

광택 재질 표현

Voxelization

Open Source 중 Voxelizer 를 이용함 . (CUDA 베이스 )

(Obj 파일을 Voxel 화 시켜주는 코드가 포함되어 있음 )

Unreal3 에 맞게 Emissive, Lightmap 등을 추가해줌Obj 파일에는 Texture 좌표들을 추가해 주도록 수정

균일한 그리드로 Export 시키도록 수정 (DX9 에서 렌더링을 위함 )

HDR 계산된 부분은 Voxel 의 Color 값으로 Voxel 데이터에 추가 .

Page 37: Ndc2013 정리(upload버전)

광택 재질 표현

3D – DDA 알고리즘

X축 뿐만 아니라 Y축까지 고려하는 DDA 알고리즘

해당 알고리즘을 이용하여 Ray Tracing 을 하면 된다 .

Page 38: Ndc2013 정리(upload버전)

광택 재질 표현

Compositing

그냥 렌더링 하면 복셀의 모양이 보이거나 투박해 보인다 .

1 을 기준으로 불투명도를 누적해 가면서 색상을 적용하고 프레넬 항을 적용하여 부드럽게 만들어 준다 .

GPG Gems3 참조 .

Page 39: Ndc2013 정리(upload버전)

광택 재질 표현

Memory 이슈

64 해상도 -> 1MB 인데 512 이상 해상도는 되야 퀄리티가 좋다 .

존재하는 복셀만 3D Texture 에 담아서 사용한다 .

존재하는 복셀을 검사할 때는 64 해상도등 낮은 해상도로 먼저 계산하고 512 해상도로 처리한다 .

Page 40: Ndc2013 정리(upload버전)

광택 재질 표현

한계

DX9 를 기반으로 두고 있어 정적인 데이터로 뽑아서 사용해야 한다 .

아직 게임에 사용하기에는 힘들것 같다 .

Unreal4 엔진 등에서 실시간으로 Voxel Octree 를 구축해주는 알고리즘이 나오고 있다 .

Page 41: Ndc2013 정리(upload버전)

WEBGL+NODE.JS+CUDA를 이용한 서버사이드 렌더링프로토타입넥슨 – 김혁

Page 42: Ndc2013 정리(upload버전)

WEBGL+NODE.JS+CUDA를 이용한 서버사이드 렌더링node.js 를 이용하여 웹에서 CUDA 를 이용할 수 있는가가 중점

Page 43: Ndc2013 정리(upload버전)

WEBGL+NODE.JS+CUDA를 이용한 서버사이드 렌더링

WebGL

웹 표준 3D 그래픽스 API (OpenGL ES 2.0 에 대응 )

THREE.JS 라는 개인이 만든 라이브러리를 추천한다 .

Page 44: Ndc2013 정리(upload버전)

WEBGL+NODE.JS+CUDA를 이용한 서버사이드 렌더링

node.js

네트워크 어플리케이션 ( 구글 V8 엔진 )

Javascript 를 통해 사용한다 .

보조 모듈이 많다 .

싱글 스레드 , 비동기 처리를 지향한다 . (REQ 1 – RES 1)

Page 45: Ndc2013 정리(upload버전)

WEBGL+NODE.JS+CUDA를 이용한 서버사이드 렌더링

node.js 모듈

node 에 붙이는 플러그인으로 NPM 을 이용하여 설치한다 .

1. express

2. dnode

3. binaryJS

4. mongoDB

5. etc…

Page 46: Ndc2013 정리(upload버전)

WEBGL+NODE.JS+CUDA를 이용한 서버사이드 렌더링

AJAX

새로 고침 없이 데이터를 얻어온다 .

URL 기반의 요청 , URL 페이지를 비동기로 받아온다 .

Page 47: Ndc2013 정리(upload버전)

WEBGL+NODE.JS+CUDA를 이용한 서버사이드 렌더링

WEBSOCKET

양방향 TCP 통신이 가능하다 .

REQ, RES 제한이 없다 .

Page 48: Ndc2013 정리(upload버전)

WEBGL+NODE.JS+CUDA를 이용한 서버사이드 렌더링

흐름 구조

Worker 쪽에서는 V8 쪽에 접근할 수 없게 구조가 되어 있다 .

V8쪽에서 Worker 에 요청을 하고 바로 끝내면 Worker쪽에서 따로 스레드를 돌아 처리하고 Callback 을 해주는 형태로 진행

Page 49: Ndc2013 정리(upload버전)

WEBGL+NODE.JS+CUDA를 이용한 서버사이드 렌더링

디버깅

Chrome Developer Tool 을 이용한다 .

변수 , 함수에 대해서 추가 , 변경 가능

Node 용 디버깅 툴도 따로 있다 . (WebStorm)

C++ 모듈은 DLL 로 빼기 때문에 VS 에 연결해서 디버깅

Page 50: Ndc2013 정리(upload버전)

WEBGL+NODE.JS+CUDA를 이용한 서버사이드 렌더링

예외처리

처리되지 않는 예외가 있으면 바로 죽는다 .

JavaScript

C++

V8

각각에서 예외 처리가능 . V8 에서 C++ 로 던질 수도 있음 .

Page 51: Ndc2013 정리(upload버전)

WEBGL+NODE.JS+CUDA를 이용한 서버사이드 렌더링

실제 활용 케이스

지형 생성툴 (C#)

코어는 유지하고 Form 부분만 Web 으로 포팅결과는 HTML5 Canvas 를 이용해서 본다 . (2D 이미지 )

실제 하이트 맵은 WebGL 과 연동은 아직 못해봄 .

Page 52: Ndc2013 정리(upload버전)

WEBGL+NODE.JS+CUDA를 이용한 서버사이드 렌더링

Web 기반 툴 장 , 단점

장점1. Download, Patch 불필요2. 서버에 따로 데이터를 올리지 않아도 됨3. UI 만들기가 비교적 편함 (익숙하다는 전제 )

단점4. 동시접속 등 네트워크 이슈가 발생할 수 있음 .

5. 데이터를 연결하는 과정이 복잡할 수 있다 .

Page 53: Ndc2013 정리(upload버전)

MMO 와 SNG 의 컨버전스프로젝트 사무라이로 살펴보는 서버 전략드래곤 플라이 – 김익중

Page 54: Ndc2013 정리(upload버전)

MMO 와 SNG 의 컨버전스node.js + redis 를 이용

PC 와 모바일 기계를 동시에 처리하는 서버를 만들고자 노력한 부분에 대한 공유

Page 55: Ndc2013 정리(upload버전)

MMO 와 SNG 의 컨버전스

node.js

실제 게임에서 사용할 수 있을까 ?

libvr - 윈도우에서 node.js 를 이용하여 iocp 가 가능하도록 해주는 라이브러리

javascript 기반이라 결과적으로는 느리다 .

(ASIO보다 약간느리고 , 메모리는 2.5 배정도 더 든다 .)

채팅 정도는 가능

Page 56: Ndc2013 정리(upload버전)

MMO 와 SNG 의 컨버전스

Socket IO

node.js 를 이용하여 webbrowser 에서 실시간 네트워킹을 한다 .

Win32 에서 tcp 에 연결하려면 쉽지 않다 .

HTTP 로 일단 연결하고 HTTP 1.1 로 연결을 유지시켜야 한다 .

발표자 블로그에 가면 소스 공유 되어 있음 .

Page 57: Ndc2013 정리(upload버전)

MMO 와 SNG 의 컨버전스

Redis

메모리 캐싱을 제공해준다 .

서로 다른 서버에 접속한 유저끼리 통신을 하게끔 연결해 준다 .

아직 개발중인 부분으로 Clustering 이 불가능Master/Slave 복제는 가능

Page 58: Ndc2013 정리(upload버전)

MMO 와 SNG 의 컨버전스PC 에서 채팅을 보내면 모바일의 Push 로 넘어오거나 모바일상에 채팅으로 서로 연동되는 부분까지는 만들어 봤음 .

다음에는 Shading 등을 고려해서 만들어볼 생각… .

Page 59: Ndc2013 정리(upload버전)

게임서버프레임워크의 자격넥슨 – 박경호

Page 60: Ndc2013 정리(upload버전)

게임서버프레임워크의 자격프레임워크와 앱을 따로 빌드하는 구조여야 한다 .

일반적인 서버 프레임워크의 제공1. 로깅2. 타이머3. 메시지 큐 /핸들러4. 스레드 풀5. 패킷 / 메시지6. 커넥션 메니져

Page 61: Ndc2013 정리(upload버전)

게임서버프레임워크의 자격추가적으로 제공해야 될 부분

1. 쓰레드 동시성2. 관련 함수들 생성 or 적용3. 메시지 인자 값 예외 처리4. Send 관련 코드5. DB 업데이트 요청6. 서버간 오브젝트 동기화7. 등등

Page 62: Ndc2013 정리(upload버전)

유연한 해외 서비스하기해외 버전 관리 전략과 효율적인 커뮤니케이션마이에트 엔터테인먼트 – 안중원

Page 63: Ndc2013 정리(upload버전)

유연한 해외 서비스하기

Technical Writing

1. 상대방이 원하는 정보를 우선적으로 적는다 .

2. KISS(Keep It Simple and Short)

3. 가능한 능동태로 직관적으로 적는다 .

4. 한 물체를 한 단어로 표현하도록 노력한다 .

Page 64: Ndc2013 정리(upload버전)

유연한 해외 서비스하기외국의 엔지니어와 소통하려면 하루 이틀은 금방 간다 .

개발자와 PM 의 사고 방식이 다르다는 것도 기억해라 .

현지 엔지니어의 레벨은 신입이라 가정하고 간단하게 적도록 노력 .

글보다는 그림 , 다이어그램으로 만드는게 더 효과적일 수 있다 .

스크린샷을 뜨고 박스로 강조하는 것도 좋다 .

Page 65: Ndc2013 정리(upload버전)

유연한 해외 서비스하기

SVN 관리하기

1. 단일 저장소를 이용한다 .

2. 브랜치를 이용한다 .

3. 다른 버전으로 만든다 .

Page 66: Ndc2013 정리(upload버전)

유연한 해외 서비스하기

단일 저장소 사용

각 나라 패치마다 최신의 내용이 적용된다 .

로컬별로 서로 영향을 받을 가능성이 있다 .

패치날이 겹치면 힘들 것이다 .

로컬 스위칭이 편하도록 구축해 놓아야 한다 . (#if def 도 쓸만하다 .)

Page 67: Ndc2013 정리(upload버전)

유연한 해외 서비스하기

브랜치를 이용한다 .

브랜치별로 언제 나눴는지 파악이 쉽다 .

비교적 안정된 버전이라 생각할 수 있다 .

로컬끼리 서로 영향을 주지 않는다 .

다른 로컬에서 해결된 문제가 다시 발생할 수 있다 .

브랜치 관리가 따로 필요하다 .

Page 68: Ndc2013 정리(upload버전)

유연한 해외 서비스하기

다른 버전으로 만든다 .

Merge 를 바로 바로 해주지 않으면 나중에 피곤해진다 .

Merge

1. 구간 ( 선택해서 Merge 가능 (범위나 Rev 기준 ))

2. 재통합 ( 개발이 완료되고 주 저장소로 통째로 Merge 가능 )

3. 다른 트리 ( 두개의 다른 트리끼리 Merge 도 가능 )

Page 69: Ndc2013 정리(upload버전)

유연한 해외 서비스하기

충돌

2 명 이상의 개발자가 겹치면서 발생하는 현상

1. File ( 작업 부분이 겹침 ) ( 따로 머지툴을 설치하면 더 좋다 .)

2. Tree ( 파일 삭제 , 추가가 겹침 )

3. Property

Page 70: Ndc2013 정리(upload버전)

유연한 해외 서비스하기머지 주기는 가능한 짧게 잡는게 좋다 .

피쳐별 분리가 쉽게 만드는 것이 좋다 .

하나의 저장소에 통합하는 것도 꾸준히 해야한다 .

여유로운 마음을 가져야 한다 .

Page 71: Ndc2013 정리(upload버전)

서버를 위한 디자인 패턴넥슨 – 임태현

Page 72: Ndc2013 정리(upload버전)

서버를 위한 디자인 패턴

스레드 모델

1. Single Thread

2. Input Thread

3. Custom Thread Pool

4. Object Bound Thread Pool

공통적으로 Input -> Excute -> Logic 의 흐름으로 진행된다 .

Page 73: Ndc2013 정리(upload버전)

서버를 위한 디자인 패턴

Single Thread

폴링으로 받아서 처리한다 .

InputExcute(Poll)

Logic

Page 74: Ndc2013 정리(upload버전)

서버를 위한 디자인 패턴

Input Thread

해석후 처리한다 .

InputExcute( 해석 )

Logic

Page 75: Ndc2013 정리(upload버전)

서버를 위한 디자인 패턴

Custom Thread Pool

해석후에 Queue 에 담아 Logic 에 보내준다 .

InputExcute

( 해석 /Queue)

Logic

Page 76: Ndc2013 정리(upload버전)

서버를 위한 디자인 패턴

Object Bound Thread Pool

해석 후에 Logic 에서 각 로직에 맞게 알아서 Queue 에 담는다 .

InputExcute( 해석 )

Logic(Queue)

Page 77: Ndc2013 정리(upload버전)

서버를 위한 디자인 패턴중간에 스레드 모델을 교체하기는 쉽지 않은 작업이다 .

일단 Single 로 만들고 나중에 모델을 결정해서 변경하는게 그나마 편한 선택이다 .

Page 78: Ndc2013 정리(upload버전)

서버를 위한 디자인 패턴

Game World

나를 중심으로 범위안으로 들어온 객체들을 생성해서 유지하고 나가면 제거해주면서 처리한다 . ( 그룹핑 )

공간 분할 알고리즘이 필요하다 .

간단한 알고리즘으로는 타일 분할이 있다 .

(빠르지도 느리지도 않은 것이 특징 )

Page 79: Ndc2013 정리(upload버전)

서버를 위한 디자인 패턴

심리스 월드

눈에 보이는 객체들은 한 서버에 같이 있는것이 좋다 .

서버에 숫자 제한이 생기게 된다 .

경험상 Player 100 명에 NPC 는 5000~10000 정도

Page 80: Ndc2013 정리(upload버전)

서버를 위한 디자인 패턴

동기 / 비동기

DB 에 쿼리나 Dead Lock, Sleep 등으로 공회전되는 시간이 많다 .

비동기로 처리하면 이런 부분은 막을 수 있다 .

동기로 처리하면 개발이 쉽지만 느릴때가 있다 . ( 하지만 추천 )

비동기를 되도록 안쓰려고 한다고 함 .

Page 81: Ndc2013 정리(upload버전)

서버를 위한 디자인 패턴

조각 내기

안 할 수 있는 부분은 안 하는게 좋다 .

바다를 건너는 등 불 필요한 월드 갱신 부분은 워프등으로 막자 .

초보용 마을편지등 여러 기능을 막고 유저를 조금이라도 더 받는 쪽으로 하자 .

메모리 , CPU 를 늘려라 .

돈으로 해결할 수 있는건 돈으로 해결하는게 좋다 .

Page 82: Ndc2013 정리(upload버전)

서버를 위한 디자인 패턴현재는 C# 을 사용하고 있다 .

Thread Model 은 Input Thread Model 을 이용중이다 .

100 개 정도 돌린다 .

Page 83: Ndc2013 정리(upload버전)

REDIS 소스로부터 살펴보는 REDIS 쓸 때 주의할 점전 NHN – 강대명

Page 84: Ndc2013 정리(upload버전)

REDIS 소스로부터 살펴보는 REDIS 쓸 때 주의할 점위험한 명령어 ( 데이터가 많을 수록 느리다 .)

1. Keys * (On 알고리즘 ) List 나 SortSet 을 이용해라 .

2. Flash All (On 알고리즘 ) 전체 삭제

Single Thread

짧은 시간이 걸리는 명령어 , 작은 데이터일 수록 좋다 .

Page 85: Ndc2013 정리(upload버전)

REDIS 소스로부터 살펴보는 REDIS 쓸 때 주의할 점메모리 정책

LRU 등 다양한 정책이 존재한다 .

32 비트는 기본적으로 4GB 제한이 걸려있다 .

64 비트는 제한은 없고 현재 메모리를 넘어가면 디스크에 쓴다 .

Page 86: Ndc2013 정리(upload버전)

REDIS 소스로부터 살펴보는 REDIS 쓸 때 주의할 점Master / Slave

Master 에서 어떤 부분을 제거하면 Slave쪽에도 삭제가 된다 .

Slave쪽에 어떤 부분을 제거하는건 Master 에 영향을 주지 않는다 .

Slave 는 Master 와 비교하여 다르면 Slave 를 지우고 Master 로 갱신한다 . (slaveof no one 으로 slave 를 master 로 변경할 수는 있다 .)