320x100

NDC 27

[NDC 2016] 구형맵에서는 어떻게 길을 찾아야 하나요?

Recast: 언리얼 엔진에서 내비게이션 메시로 사용하고 있는 오픈 소스 라이브러리 장점 - 메시 빌드 속도 - 길찾기 속도 - 유연한 셋팅 단점 - 근시로 인한 오차 - 에이전트 검색 속도 - 난해한 셋팅 Detour: Recast로 생성된 메시에서 길을 찾아주는 라이브러리 DetourCrowd: 에이전트들간의 충돌 회피를 하는 알고리즘 DetourTileCache: 동적 메시 생성을 위한 라이브러리 Recast: 내비게이션 메시를 생성하는 부분 RecastDemo: 비주얼라이제이션을 포함한 툴 Recast 내비게이션 메시는 여러 개의 폴리곤들과 그 폴리곤들 사이의 연결 정보로 구성되어 있음 1. 길을 찾을 때 폴리곤의 각 변의 중점을 따라 길을 찾음 2. 찾은 길의 폴리곤을 따라서 길을 똑바르게 편다..

NDC/Dev 2023.01.17

[NDC 2016] <야생의 땅: 듀랑고> 중앙 서버 없는 게임 로직

객체가 중심이 되는 서버? 하나의 지역을 물리적인 서버가 담당하는 것은 땅의 크기가 서버의 성능에 의해 제한될 수 밖에 없다 => 서버는 모종의 규칙에 의해 배정된 객체를 담당한다 장점 서버에 소속된 객체의 시야 외에는 관심이 없어 전체 세계의 크기와 상관 없는 구조 => 이론적으로 무한한 크기의 세계를 표현 가능 특정 서버에 문제가 생겼을 때 재 접속하면 바로 그 위치에서 정상적인 플레이 가능 => 안정성의 향상 동기화 동기화가 잦을 수록 DB에 부담이 된다 분산 환경에서는 서버간 동기화가 이루어지므로, N배 부담이 된다 동기화 최적화 1. 미래를 예측해 동기화 횟수를 줄이자 변화량을 입력하면 그래프 방식으로 데이터를 보여주는 라이브러리 https://github.com/what-studio/gauge..

NDC/Server 2023.01.16

[NDC 2016] <야생의 땅: 듀랑고> 지형 관리 완전 자동화 - AWS와 DOCKER 체험기

도전 과제는 크게 2가지로 - 지형 배포: 지형 배포 자동화 - 자연물 관리: 자연 상태 파악, 생태계 시뮬레이션 자동화 지형 제작 & 배포 개요 - 전용 도구로 지형 파일들을 제작 - 후처리를 거친 뒤 지형 파일을 git에 commit - 서버 코드에서 해당 커밋을 참조하도록 변경 지형 제작 & 배포 도구 - WorldGen: 지형 파일 제작(C#) - ManageTool: 지형 배포 및 관리에 필요한 기능 제공(Python) 지형 배포 절차 - 청크별 빠른 색인을 위해 여러가지 지형 정보들을 청크별로 나눔 - 청크: 16 x 16 타일 -> pub-sub 토픽, 분산의 최소 단위 - 타일: 가로 세로 2m의 정사각형 -> 자연물, 건축물 등의 최소 단위 - cm: 동물의 위치등 섬세한 위치 조정에 사..

NDC/Server 2023.01.15

[NDC 2016] 유니티, iOS에서 LINQ 사용하기

LINK(Language Integrated Query): 데이터 저장소 종류와 관계 없이 저장소에 일관성 있는 인터페이스로 질의 - 동일한 인터페이스 사용 - 다양하고 편리한 기능 (Max, Min, Average, OrderBy, First ...) - 지연 실행 (성능 이점) - 간결한 High Level 코드 품질 - 컴파일 타임 에러 체크 int[] numbers = { 5, 10, 8, 3, 6, 12 }; Query syntax var result = from num in numbers where num % 2 == 0 orderby num select num * 2; Method syntax var result = numbers .Where(num => num % 2 == 0) .Order..

NDC/Dev 2023.01.15

[NDC 2016] 테라 서버의 Modern C++ 활용기

smart pointer (RAII) - 객체의 생성 소멸 관리를 위해 사용하는 객체 - shared_ptr, unique_ptr t_ptr - shared_ptr처럼 Reference Count를 공유 - 침습형(invasive) 카운터를 사용 Cppcon2015 중 "Smart pointers" are overused (스마트 포인터는 과다 사용되고 있다) - shared_ptr can be expensive => reference count의 증감 연산이 많이 일어나기 때문에 사례1) 빠른줄만 알았던 type_cast template T* type_cast(S* s) { if (s && TypeTable -> -> seq * C++14부턴 간단하게 std::make_index_sequence으로 대..

NDC/Server 2023.01.14

[NDC 2015] 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현

비관적 동기화 (락 기반 동기화) 내용 __ 작업하는 동안 다른 동작을 못하게 한다. 단점 __ 모든 DB 변경에서 락을 잡아야 한다 __ 락을 잡을 수 없는 상황(서버 다운)이 있다 낙관적 동기화 (트랜잭셔널 메모리) 내용 __ 일단 진행하고, 문제가 생기면 롤백한다 애플리케이션 레벨에서 롤백을 구현해야 하므로 문제 영역을 나눠보자 __ 퍼스트 로컬 트랜잭션 ____ 실패할 가능성이 있는 것 ____ 안전하게 롤백할 수 있어야 함 ____ ex) 아이템 제거, 골드 감소 __ 세컨드 로컬 트랜잭션 ____ 실패할 가능성이 없는 것 ____ 안전하게 롤백할 수 없어도 된다 ____ ex) 아이템 추가, 골드 증가 절차 1. 모든 참여자(DB)들에게 퍼스트 LT를 실행 2. 모든 퍼스트 LT가 성공하고 나..

NDC/DB 2023.01.09

[NDC 2015] 이 쿼리를 어떻게 짜야 잘 짰다고 소문이 날까?

반복 액세스 피하기 일일 구매로그 데이터 중 아래 통계를 구하자 1. 캐쉬 구매에 성공한 유저 수 2. 인게임 머니로 구매에 성공한 유저 수 3. 쿠폰을 이용하여 구매에 성공한 유저 수 변경 전 SELECT @CASH_COUNT = COUNT(*) FROM 구매로그 WHERE BUY_CODE = @캐쉬구매 AND LOG_DATE >= @어제새벽 AND LOG_DATE = @어제새벽 AND LOG_DATE < @오늘새벽; SELECT @INGAME_COUNT = COUNT(*) FROM 구매로그 WHERE BUY_CODE = @인게임구매 AND LOG..

NDC/DB 2023.01.06

[NDC 2015] <쿠키런> 바쁘고 가난한 개발자를 위한 S3 기반 로그 시스템

쿠키런 로그 __ 매일 200 ~ 400 GB의 JSON 텍스트 형식 __ 비정형 스키마 로그 수집 __ Apache Kafka 사용 __ 분산 메세징 시스템: Publish / Subscribe __ 일별 토픽, 4일치 저장 Kafka의 장점 __ 메시지를 복제해 저장 ____ 노드 장애에 강함 ____ 서버 업데이트 및 재부팅이 상시 가능 __ 단순한 저장소 구조로 오류가 잘 안남 __ 높은 읽기 / 쓰기 대역폭 Kafka 사용시 주의점 __ 메시지 중복은 피할 수 없다 (기록 성공 응답을 못받으면 중복 발생) Logstash -> Kafka __ 컴포넌트를 멈추면 로그가 유실 발생 __ Logstash는 Push 방식, Kafka는 Pull 방식 로그 백업 - Amazon S3 __ 무햔 용량 __..

NDC/Server 2023.01.05
320x100