갬장장이
Rovenhell(로벤헬) 소개
갬장장이
갬장장이의 코드 대장간
갬장장이
전체
오늘
어제
  • 분류 전체보기
    • 게임 연구소
    • 게임 제작
      • Banditors (2024~)
      • Rovenhell (2023)
      • Geophyte (2020~2021)
      • 아드레날린 러시 (2021)
      • Treadmill (2019)
      • 습작들 (2019~)
      • 그 외 (~2018)
    • 개발
      • 언리얼 엔진
      • 수학
      • 네트워크
      • 그래픽스
      • OpenGL
      • DirectX
    • 일상
    • 기타 제작

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • [공지] 블로그 안내

인기 글

최근 댓글

최근 글

hELLO · Designed By 정상우.
게임 제작/Rovenhell (2023)

Rovenhell(로벤헬) 소개

2023. 10. 10. 23:57
목차
  1. Rovenhell (로벤헬)
  2. 소개
  3. 개발하며 배운 것들

Rovenhell (로벤헬)

Intel i7-9750H, 16GB RAM - Testing 200 clients on a single dedicated server

 
개발 기간: 23년 8월 ~ 11월
개발 목적: 취미 겸 기술 역량 향상
개발 환경:
클라이언트 및 게임 로직 서버: 언리얼 엔진 5 (커스텀 넷코드 제작, 언리얼 Replication 사용 X)
미들웨어: Visual C++, IOCP
개발 언어: C++
기술 분석:
https://gamesmith.tistory.com/272

 

[Rovenhell] 기술 분석

프로젝트 소개글은 여기서 확인하실 수 있습니다. 본 포스트에서는 로벤헬 프로젝트를 진행하며 제가 기술적으로 고민하고, 해결했던 흔적을 남겨두려고 합니다. 개발 과정에서 어떤 어려움이

gamesmith.tistory.com

소스 코드: 
https://github.com/hagukin/Rovenhell_UE

 

GitHub - hagukin/Rovenhell_UE: Unreal Engine 5 game server / client source code for c++ server-authoritative MMO "Rovenhell"

Unreal Engine 5 game server / client source code for c++ server-authoritative MMO "Rovenhell" - GitHub - hagukin/Rovenhell_UE: Unreal Engine 5 game server / client source code for c++ ser...

github.com

https://github.com/hagukin/Rovenhell_Middleman

 

GitHub - hagukin/Rovenhell_Middleman: Middleware server for server-authoritative MMO "Rovenhell"; Using Windows I/O completion p

Middleware server for server-authoritative MMO "Rovenhell"; Using Windows I/O completion port - GitHub - hagukin/Rovenhell_Middleman: Middleware server for server-authoritative MMO "...

github.com

 

소개

로벤헬(Rovenhell)은 멀티플랫폼 MMO 게임을 Server authoritative하게 구동할 수 있는 서버 아키텍처를 제작해보자는 목표를 가지고 시작한 프로젝트입니다. 결론부터 말하면 완전히 원하는 바를 구현하는 것에는 실패했으며, 실패 원인 및 프로젝트에 대한 자세한 기술적 분석은 여기서 확인하실 수 있습니다.
 
로벤헬은 이동, 충돌 연산까지 Server authoritative하게 처리하는 것을 목표로 하고 개발되었기 때문에 데디케이티드 서버를 사용합니다. 즉 통상적인 MMO(RPG) 아키텍처와는 거리가 있습니다. 하지만 세션 단위 게임이 아닌 MMO를 지향하기 때문에 서버의 지속가능성과 Scale-out을 염두에 두며 구조를 설계했고, 데디케이티드 서버 여러 대가 전체 서버 부하를 분산해 처리하는 구조를 목표로 제작되었습니다. 때문에 언리얼 자체 기능인 Replication 대신, 커스텀 넷코드를 작성해 사용했습니다.


기술적 뼈대를 제작하는 게 목표였던 만큼 콘텐츠 구현보다는 기술 구현에 집중했습니다. 그중에서도 게임 동기화, 스루풋 최적화, 패킷 직렬화 및 압축, 멀티스레딩, IOCP, 소켓 프로그래밍 등, 서버 프로그래밍과 관련된 내용들에 초점을 두고 개발했습니다.
 

개발하며 배운 것들

아키텍처 및 잠정적 scale-out 전략

혼자 맨땅에 헤딩하는 느낌으로 시작한 프로젝트인만큼 부족한 점도 많고, 결국 목표 달성에는 실패했지만, 그만큼 개발 과정에서 얻어간 것들도 많습니다.

  • 네트워킹 코드를 구현하며 실시간 비동기 IO의 처리, 멀티스레딩, 버퍼 재활용, 메모리풀, IOCP 등 서버 개발의 기본기를 다질 수 있었습니다.
  • 게임이 지향하는 바에 따라 서버의 구조가 어떻게 변화하는지 이해할 수 있었습니다.
  • 장르나 개발 방향성에 따라 네트워크 부하, 서버 반응성, 동시 접속자 수까지 수많은 것들이 달라질 수 있고, 달라졌을 때 서버의 구조가 어떻게 변화하는지 직접 구현해보며 체득할 수 있었습니다.
  •  Server authoritative한 로직 처리를 구현하기 위해 client interpolation, server reconciliation과 같은 다양한 동기화 기법들을 구현해보며 실시간 게임이 어떤 식으로 게임을 동기화하는지, 또 어떻게 더 딜레이가 적게, 더 부드럽게 동기화할 수 있는지 이해할 수 있었습니다. 
  • 서버 개발과 큰 상관이 없어보였던 요소들 (인풋을 조이스틱으로 하는지 WASD로 하는지, 맵 크기는 얼마나 큰지 등) 이 실제로는 네트워크 부하에 많은 영향을 줄 수 있다는 것을 깨닫게 되었습니다.
  • 이 부하를 줄이기 위해 패킷 데이터를 여러 방법으로 압축하고, 비트 단위에서 패킷 최적화를 진행해보며 서버를 최적화하는 경험을 해볼 수 있었습니다.
  • 맵이 커지거나 동시 접속자가 많아질 때 서버가 어떤 식으로 Scale-out을 할 수 있는지를 고민해보며, 확장 가능한 서버 구조를 설계하는 것의 중요성을 이해할 수 있게 되었습니다.
  • 언리얼 엔진의 소스 코드들을 분석해보며 언리얼이 내부적으로 어떻게 동기화를 유지하고 물리 연산을 처리하는지에 대해 더 깊게 이해할 수 있게 되었습니다. 동시에 이를 제가 필요한 형태에 맞게 수정해보는 경험을 통해 엔진 레벨에서의 프로그래밍 경험을 쌓을 수 있었습니다.
저작자표시 비영리 변경금지 (새창열림)

'게임 제작 > Rovenhell (2023)' 카테고리의 다른 글

[Rovenhell] 기술 분석  (0) 2023.12.08
  • Rovenhell (로벤헬)
  • 소개
  • 개발하며 배운 것들
'게임 제작/Rovenhell (2023)' 카테고리의 다른 글
  • [Rovenhell] 기술 분석
갬장장이
갬장장이
갬장장이의 코드 대장간갬장장이 님의 블로그입니다.
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.