대형 프로젝트 - C# + 유니티로 만드는 MMORPG 게임 개발/(6) 라이브서비스

2D MMO 라이브 서비스 - (4 - 1) 서버 구조

monstro 2025. 10. 20. 10:53
728x90
반응형

- 개요

현재 프로젝트의 서버를 대형 MMO 게임에 맞게 어떻게 구성할 지 알아보겠습니다.

 

1) 현재 프로젝트의 서버

간단하게 표현한 현재 프로젝트의 서버 구성

 

현재 프로젝트에서는 총 3개의 스레드가 존재합니다.
각각 DB / Game Logic / Network와 관련된 작업을 수행하며 각 스레드별로 Session이 존재합니다.

 

2) 서버의 구상

게임에서 동작하는 서버는 다음과 같은 문제를 마주할 수 있습니다.

  • 1) 네트워크 부하(I/O)
  • 2) DB 부하(I/O)
  • 3) 게임 로직 부하(CPU)

 

위 3개의 문제는 점진적으로 연결되어 한쪽의 문제가 다른쪽에도 영향을 주게 됩니다.

이를 위해 게임의 맵을 구역별로 쪼개고 쪼개진 구역마다 여러대의 컴퓨터를 배치하는 방식을 생각할 수 있지만

유저에 대한 정보를 컴퓨터들끼리 동기화하기 어렵습니다.

 

3) 실제 대형 서버의 구성

이미지 출처 : https://www.inven.co.kr/board/lostark/4811/990606

 

실제 서비스되는 대형 게임은 위와 같이 여러개의 서버 중에서 접속할 서버를 선택할 수 있습니다.

해당 서버들은 서버군이라는 명칭으로 불리며,

하나의 서버군에는 네트워크 + DB + 게임 로직 관련 스레드가 포함됩니다.

그리고 플레이어가 선택한 서버군과 선택하지 않은 다른 서버군들은 완전히 분리됩니다.

 

4) 프로젝트에 적용

따라서 기존의 프로젝트를 다음과 같이 수정할 수 있습니다.

 

4 - 1) 분리될 데이터 & 분리되지 않을 데이터 구분

 

프로젝트에서 사용하는 DB는 위와 같이 데이터가 구성되어 있습니다.

이때 Item과 Player 데이터는 서버군별로 분리되지만, Account는 서버군별로 분리할 수 없습니다.

따라서 Account와 같은 공용 데이터는 다른 DB로 빼서 따로 관리하도록 설정합니다.

 

4 - 2) 인게임 서버 & 아웃게임 서버 분리

프로젝트의 서버 구성에 대한 수정사항을 간단히 표현

 

기존의 서버는 인게임과 관련된 작업을 처리하는 서버로 사용하도록 수정하였습니다.

그리고 로그인과 같은 공용 데이터와 관련된 작업을 처리하는 아웃게임 서버를 추가하겠습니다.

해당 아웃게임 서버는 웹서버로 설계하여 로그인 정보를 전달하는 용도로 사용합니다.

728x90
반응형