조이시티 사업보고서 (2021.12)
3년간 연구개발실적

☞ 본문 위치로 이동

연도	연구과제	연구결과 및 기대효과

2019년	서버간 데이터 복제 및 검증 시스템	서로 다른 서버 간의 전투를 위해, 서버 간의 데이터를 복제하고 검증하는 시스템을 개발, SLG게임에서 서버 간의 이동과 전투를 보다 자유롭게 진행할 수 있도록 하는 기반이 됨

분석 도구 접목	데이터 추적을 통하여 다양한 분석을 하기 위하여 구글 애널리틱스 적용

서버스트레스 테스트툴 개발	서버 스트레스 테스트 강화를 위하여 유저 접속에 따른 부하 테스트 툴 개발, 서버 머신 사양 최적 상태를 사전 체크 및 머신 사양에 대한 검증을 위하며 이는 구성 변경 적용 등에 기반이 됨

클라이언트 취합 방식 변경	배포 과정에서 리소스 문제가 덤프 분석에 혼란을 갖고 오는 것을 막기 위하여 리소스 체크 시스템 적용하여, 코드 이슈 문제만 트래킹 할 수 있도록 시스템 구축과 안정성을 효율적으로 대응할 수 있는 기반이 됨

클라이언트 배포 방식 변경	장기 서비스에 따른 배포 사이즈 증가로 인하여 인스톨 시스템 변경하여 XP 사용자 등을 지원하기 위하여 최소 배포와 다운로드 시스템을 병행 원할한 설치가 가능하도록 인스톨 시스템 변경

19년 클라이언트 패치 시스템 개선	클라이언트 버전 마다 변경 집합을 만드는 기존 방식 대신 서버에 최신 상태의 전체 파일 정보를 저장하여 변경된 파일만을 다운 받는 방식으로 개선하였으며 개발자 입장에서는 빌드 시 변경 내용에 따라 최소 15분~ 40분 가량 파일을 묶는 시간을 줄였고 유저 입장에서는 현재 설치된 클라이언트 버전에 상관없이 바뀐 파일만 다운받는 효율적인 방식으로 변경.

특정 플랫폼에서 메모리 릭 검출 VLD 적용이 안되는 현상 분석 및 수정	VS2015 이슈와 DLL충돌로 인해 적용이 안되는 부분을 파악하여 현재 지원이 끊겨 업데이트가 안되는 VLD 코드 자체를 수정 하여 적용함으로써 현재 프로젝트의 메모리 릭 검출을 수월하게 파악하여 서비스 퀄리티 개선 도모

리플레이 전송 시스템	유저의 신고나 의심될 만한 유저에 한해서 해당 유저의 플레이를 리플레이로 생성하여 서버에 전송하는 시스템 개발하여 해킹 대응 및 유저 CS처리 운영에 있어 효율적인 프로세스를 도모

Xbox 영구형 DLC 개발	GameContent 타입의 DLC 개발, 1회성 상품 제공 및 이벤트 DLC 활용 가능

서버 모니터링 웹 지원	서버 내부 정보를 웹으로 통신 지원하여 언제든지 정보를 수정 및 제거를 가능 하도록 설계하여 실시간 확인에 용이하도록 적용

클라이언트 데이터 갱신 최적화	게임 내 World와 User Island전환시 메시지를 통합/최적화하여 속도 개선

Event 실시간 반영 시스템	점검 등의 과정없이, 특정 서버에 이벤트 컨텐츠를 실시간 반영할 수 있도록 하는 시스템을 통해, 유저 편의 증대

서버 Object Memory Pool 개선	객체 재사용 방식에서 메모리 재사용 방식으로 변경하면서, 객체 생성 비용의 절약, 객체 데이터 오염 방지

클라이언트 빌드 자동화	Android / iOS의 빌드를 자동화 하여, 업무 효율 향상

Excel Export Tool의 개발	엑셀을 통해 작성된 데이터 문서를 통해, 실제 소스코드까지 생성하여 클라이언트 / 서버에 반영하는 툴을 개발하여 작업 효율 향상

NPC AI 강화	행동 트리 개선하여 좀 더 다양한 상황에서 NPC가 대응할 수 있도록 개선하여 유저 어뷰징 방지 / 경험 향상

라이브 서버 모니터링 시스템	Proxy 를 이용하는 서버에서 접속 장애를 감지하고 알림을 보내주는 시스템 개발

클라이언트 로그 리포터	클라이언트의 에러 및 크래쉬 로그들을 서버에 전달하는 시스템 개발

AWS 인프라 효율화 연구	AWS 기반에서 탄력적으로 장비를 운영하기 위한 아키텍쳐 연구 및 윈도우 기반 컨테이너 서비스 연구

서버간 유저 이동 최적화	서버간 유저 이동 상의 트렌젝션 문제 최소화를 위한 DB 통합 및 구조 변경

2020년	라이브 서버 모니터링 시스템	Proxy 를 이용하는 서버에서 접속 장애를 감지하고 알림을 보내주는 시스템 개발

클라이언트 로그 리포터	클라이언트의 에러 및 크래쉬 로그들을 서버에 전달하는 시스템 개발

AWS 인프라 효율화 연	AWS 기반에서 탄력적으로 장비를 운영하기 위한 아키텍쳐 연구 및 윈도우 기반 컨테이너 서비스 연구

서버간 유저 이동 최적화	서버간 유저 이동 상의 트렌젝션 문제 최소화를 위한 DB 통합 및 구조 변경

렌더웨어 익스포터 개발	렌더웨어 엔진이 공식 지원종료 된 시점에서 윈도우10용 3D MAX버전용 렌더웨어 익스포터를 신규 개발.
렌더웨어 프로젝트의 아트 개발에 있어 윈도우 10 환경과 최신 3D MAX로 작업이 가능하게 됨으로써 개발 효율 증대.

서버 장애 시 메일 전송 시스템 개발	서버 비정상 종료 시 관련 담당자에게 알림 메일 전송하는 시스템 개발. 더욱 빠른 장애 대응이 가능해짐.

애니메이션 데이터 압축 적용	애니메이션에 사용되는 데이터형을 거의 손실없이 압축 적용하여, 애니메이션 퀄리티를 유지 한 채로 클라이언트 용량과 메모리 사용량을 줄임.

실시간 데이터 변경 처리	서버 락처리 변경을 통하여 라이브 서비스 중 이슈를 점검없이 처리 가능하도록 하여 이슈에 대한 점검 최소화에 도움이 되도록 하였음

리소스 버전 관리 시스템	배포 버전 유저 로컬 이슈를 체크 하기 위한 리소스 서버 구축을 통하여 유저 개인 환경 이슈 발생 시 안내 또는 자동 업데이트를 진행하여 문제 발생에 대한 스트레스를 낮춰줄 수 있도록 처리

Steam SDK R	스팀 서비스를 위한 스팀 SDK 지원 방법 및 로그인, 결재 시스템 분석 및 적용

언리얼4 UMG R 및 UI 개선	프로젝트의 UI 프레임 개선을 위한 UMG 분석 및 효율적인 UI 프레임 R 및 프로젝트에 적용 - 언리얼4 UMG에 대한 팀원들의 기술력 확보, 및 프로젝트 성능 향상 - 프로젝트 UI관련 코드 캡슐화 및 인지도 증가

서버 안정화을 위한 메모리 풀 수정	Boost Library 기능을 통한 서버 메모리 Pool 운영 분석 및 적용

부하테스트툴개발	golang 기반DB / Web 부하툴개발

Redis 비동기명령처리구조개발	다중스레드 c++ 게임서버 ↔ Redis 비동기 명령처리 구조개발

패치 자동화 시스템 개발	클라이언트, 서버, DB 모두 최신 버전으로 빌드부터 패치까지 자동으로 진행될 수 있는 시스템 개발

클라이언트 빌드 배포 시스템 개선	클라이언트 빌드가 완료되면 배포 가능한 저장소에 등록되고 다운로드 받을 수 있는 URL 이 팀 공용 메신저를 통해 전파되도록 함

JSON 사용 환경 안정화	Native 언어 환경에서 문자열 집합인 JSON 사용의 위험도를 줄이기 위해 주의해야 할 부분을 강제화 하여 쉽고 안정적으로 접근할 수 있도록 변경

파일 로그 안정성 확보	멀티 스레드 환경에서 하나의 파일에 서로 접근할 경우 내용이 깨지던 부분을 버퍼에 담아 순차 처리를 진행하여 무결점 하게 만들고 lockfree를 이용하여 버퍼를 관리, 대기에 대한 손해 비용을 최소화

서버 개발 환경의 확장	기존 한명의 프로그래머가 1개의 서버 인스턴스를 사용하던 상황에서 하드웨어가 허용하는 범위에 한해 무한히 확장할 수 있도록 패턴을 적용하여 신규입사자 외, 기존 개발자들도 손쉽게 서버 세팅을 할 수 있도록 개선

언리얼4 엔진 심화 R	버튼등의 포커스 이동시 키보드/마우스를 모두 지원 할 수 있도록 네이게이션 기능을 사용하여, 개발 편의성 및 효율성 향상하여 UI 기능 강화하였으며, 각 맵마다 배치 위치가 다른 객체들을 런타임 생성/소멸을 통해 게임 및 로비 맵의 시즌 별 구성을 지원하여 Map 기능 강화하였으며. Texture의 용도별 최적화를 통해, 패키지 용량 감소 및, 실행 속도 향상하여 최적화함

이종 플랫폼간에 소셜 및 플레이 지원	플랫폼 간에 원할한 정보 통신을 위한 중간 단계 서버 개발, 동기화를 위한Replication 적용

렌더웨어 리소스 로드 최적화 및 퍼포먼스 개선	여러 PAK에 산재된 중복 리소스를 찾아서 제거하는 기능을 개발 및 활용하여 PAK간 중복 리소스 제거프로젝트에서 미사용중인 이미지 포멧을 탐색하지 않도록 엔진 로직을 개선하고, PAK 리소스 탐색 로직을 개선하여 퍼포먼스 향상.

클라이언트 해킹 보안 강화	보안 로직 적용 - 하드웨어 브레이크 포인트-프로세스가 HW BP에 걸려 있는지 확인 - 코드 변조 감지-로직이 적용된 코드 영역의CRC계산을 하여 변조 감지 보안로직으로 서버에 전송된 로그를 기반으로 해킹툴 분석에 사용.

GIF 형식의 스프라이트 애니메이션 개발	의상 및 아이템에 애니메이션 효과를 주기 위한 컨셉으로R 진행했고, UV 채널을 추가하여 실시간 셰이더 랜더링 방식으로 개발하였고, 미리 합성된 텍스쳐를 이용한 개발방식(렌더 비용 없음) 대비 렌더링 비용이 증가하긴 하지만, 메모리 사용량 및 퀄리티에서 좋은 결과를 가짐.

XboxOne 로그인 웹 서버 개편	XboxOne 신규 SDK 적용하여 서버 인증서 등록/관리 편의성 제공 및 관리툴을 지원하며, XSTS(Xbox 인증) 자동 갱신

해킹 제재 자동화 프로세스 구축	특정 주기 마다 게임 내 해킹툴을 사용한 유저를 자동으로 감지 및 분류 후 제재 리포트를 전달하는 자동화 프로세스 구축

팩 파일 변조 방어 프로세스 구축	팩 파일을 추출하여 리소스를 수정하는 행위를 막기 위해 서버에서 리소스 변조를 감지(SHA1, AES이용)하고 접속을 종료하는 프로세스 구축

스케일폼 GFx에서 라이브2D 와 유사한 연출 효과	스케일폼 무비클립에 영상 합성을 통한 라이브 2D와 유사한 연출 구현

백그라운드 다운로드 및 빠른실행 모드	최소한의 리소스로 게임을 구동할 수 있는 빠른 실행 모드를 도입하고, 백그라운드에서 나머지 리소스를 받을 수 있는 기능 추가

실시간 업데이트 되는 큰 데이터의 ACID 를 보장	데이터의 실시간 처리 중 대량의 데이터를 여러 개의 컬럼과 로우로 이루어진 텍스트로 치환 해 하나의 TRANSACTION 으로 저장 및 업데이트 할 수 있는 시스템

인 게임 동영상 추가	.wmv 파일들을 매핑하여 게임 내 원하는 위치와 사이즈로 동영상이 나올 수 있도록 개선

리로딩 시스템	리소스 파일들이 부족한 상태에서도 게임 진입이 가능하며, 전부 다운로드 시 리 로딩하여 애니메이션, 아이템, 사운드, UI 등을 재구성

2021년	GPU Instancing 연구	동일한 여러 메시의 Draw Call 병목 최소화를 위해 렌더링에 필요한 데이터를 버퍼에 담아 CPU -> GPU 통신을 절약하는 기술 연구

Dynamic Batch 최적화	게임 오브젝트들의 Render Queue를 조정 및 같은 Panel로 묶어 최적의 Dynamic Batch가 이뤄지도록 연구 진행

Kafka 도입	이벤트 지향 아키텍처 도입으로 약한 결합을 통한 유연한 서버 구성 도입

Spring Batch Cloud Stream	전체 게임서버 및 분산저장소를 모두 제어할 수 있는 서버통합 컨텐츠 개발에 유용한 관제서버 개발

AWS S3를 활용한 패킷 정보 Pack 수집 및 Crash 리포트 수집	i. 클라이언트 Crash 발생시 Dump 파일을 S3 스토리지로 자동 전송 Crash 리포트를 통한 라이브 버그 대응 가능.ii. 클라이언트 인게임을 리플레이 할수 있는 패킷들을 수집하여 필요시 S3 스토리지로 전송 핵킹 or 비매너 플레이에 대한 User 제제의 기반 정보로 활용 가능.

DB 레플리케이션 적용	i. 기존 오픈쿼리 보다 속도 약 10배 정도 빠른 성능ii. 크로스 컨텐츠 제작시 효율성 증가ii. DB 장비 이상시 문제 해결 가능 (미러링 역활 가능)

실시간 업데이트 되는 큰 데이터의 ACID 를 보장	라이브의 SP 콜 횟수가 줄어들고 복잡한 데이터 들에 대해서 업데이트가 자유로워 짐에 따라 개발이 수월 해 짐

리로딩 시스템	게임 실행 시 런처에서 모든 리소스를 받지 않아도 게임을 실행 할 수 있으며런처에서 다운로드가 오래걸림에 따라 실행 도중 이탈 유저가 적어지도록 개선

인 게임 동영상 추가	필요한 곳에서 이미지 파일이 아닌 동영상 파일로 유저에게 쉽게 정보 제공

글로벌 서비스를 위한 '자동 채팅 번역 서버' 구축	구글 클라우드 번역 서비스 를 이용하여 다양한 언어의 채팅 메시지를 번역하고, 이용자 클라이언트에 지정된 언어로 표현할 수 있는 번역 서버 구축.

다중서버 랭킹시스템	다중서버간 일관된 랭킹시스템 구축. Redis 기반의 비동기 명령을 위한 동기화 전용 스레드 다중서버 제어를 위한 관제서버 구현

x86 아키텍쳐 연동 작업	안드로이드, iOS 플랫폼으로 서비스하고 있는 프로젝트를 x86 아키텍쳐의 환경에서 동작하도록 개발하며 R 진행, 리소스 및 어플리케이션 패치를 위한 클라이언트 런처 개발

플랫폼별 분리된 클라이언트 프로젝트 통합	1. 플랫폼 별 PS4, Xbox, Steam 등의로 나눠져 개발이 진행되던 프로젝트 통합을 통해 컨텐츠 관리 및 개발시 효율성 확보2. UE4 엔진의 다른 버전을 사용하던 각 플랫폼 별 엔진 통합 PS4/Xbox(UE4.19), Steam(UE4.23) > 모두 UE4.23으로 통합되어 엔진 유지 보수 효율성 확보

스트리밍 텍스쳐를 이용한 메모리 최적화	1. ps4, xbox 는 한정된 메모리에서 서비스를 해야 하는 제약이 있어, 새롭게 추가되는 컨텐츠 및 기능으로 점점 사용되는 메모리가 늘어나는 현상 발생.2. 해당 이슈 해결을 위한 방안으로, 스트리밍 텍스쳐를 이용함으로서 게임의 퀄리티를 최대한 유지하며 가용되는 메모리를 30%정도 줄여 메모리 최적화 개선.

데이터 베이스 목적에 맞는 분리 운영	1. 통합되어있는 데이터 베이스 운영의 비효율 발생 (static data, game user data, log data) 를 각 목적에 맞게 분리 작업 진행2. 데이터베이스 분리 작업을 통해 목적에 맞도록 운용, 가독성 증가3. 데이터베이스 유지 및 보수 (백업, 복구) 측면에서 효율성 증가

클라이언트 코드변조 감지 시스템	1. 보안 솔루션을 우회하는 해킹을 감지하기 위해 클라이언트 자체적으로 코드변조 체크 기능을 개발. 서비스 안정화 효과

인게임GIF 로더 추가	다양한 아트웍을 표현하고 새로운 BM형태를 추가 하기 위하여 GIF를 아이템에 적용하였고, 새로운 BM구조로 매출 향상에 기대 UI 리소스 등에서 이펙트 형태를 프로그래머의 공수를 넣지 않고 아트에서 표현을 컨트롤 할 수 있게 제공하여 개발 공수를 줄일 수 있는 효과를 기대

관전 허용 유저 수의 확대	인게임에서 관전 유저수가 서버 전체 MAX 수치에 한정되어 있던 부분을 게임룸 당 최대 인원수를 확장한 R 진행하여 대회 모드 등 특정방에서 대다수 인원이 관전할 수 있도록 처리하여 대회 경기가 진행될 경우 스트리밍 외의 인게임 내에서도 많은 유저가 관전을 할 수 있도록 진행

클라이언트 크래시 분석 툴 개발	클라이언트 크래시 발생 시 자동으로 덤프파일을 게임 서버로 전송, 크래시 발생 건에 따라 통계를 내고 콜스택 까지 확인 가능하도록 프로세스 구축. 빠른 장애 대응 효과 기대

네트워크 지연에 따른 게임 유연성 제공	유저의 네트워크 레이턴시에 따라 유동적인 밸런스 적용. 핑이 높은 유저와 핑이 낮은 유저의 플레이에서 발생되는 불만 요소를 개선. 서비스 퀄리티 개선 기대