인프런 커뮤니티 질문&답변

keti-maas님의 프로필 이미지

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

Unity Server 관련해서 질문이 있습니다.

21.03.08 11:56 작성

·

341

0

강의와 관련있는 질문을 남겨주세요.
• 강의와 관련이 없는 질문은 지식공유자가 답변하지 않을 수 있습니다. (사적 상담, 컨설팅, 과제 풀이 등)
• 질문을 남기기 전, 비슷한 내용을 질문한 수강생이 있는지 먼저 검색을 해주세요. (중복 질문을 자제해주세요.)
서비스 운영 관련 질문은 인프런 우측 하단 ‘문의하기’를 이용해주세요. (영상 재생 문제, 사이트 버그, 강의 환불 등)

질문 전달에도 요령이 필요합니다.
• 지식공유자가 질문을 좀 더 쉽게 확인할 수 있게 도와주세요.
• 강의실 페이지(/lecture) 에서 '질문하기'를 이용해주시면 질문과 연관된 수업 영상 제목이 함께 등록됩니다.
• 강의 대시보드에서 질문을 남길 경우, 관련 섹션 및 수업 제목을 기재해주세요. 
• 수업 특정 구간에 대한 질문은 꼭 영상 타임코드를 남겨주세요!

구체적인 질문일수록 명확한 답을 받을 수 있어요.
• 질문 제목은 핵심 키워드를 포함해 간결하게 적어주세요.
• 질문 내용은 자세하게 적어주시되, 지식공유자가 답변할 수 있도록 구체적으로 남겨주세요.
• 정확한 질문 내용과 함께 코드를 적어주시거나, 캡쳐 이미지를 첨부하면 더욱 좋습니다.

기본적인 예의를 지켜주세요.
• 정중한 의견 및 문의 제시, 감사 인사 등의 커뮤니케이션은 더 나은 강의를 위한 기틀이 됩니다. 
• 질문이 있을 때에는 강의를 만든 지식공유자에 대한 기본적인 예의를 꼭 지켜주세요. 
반말, 욕설, 과격한 표현 등 지식공유자를 불쾌하게 할 수 있는 내용은 스팸 처리 등 제재를 가할 수 있습니다. 

안녕하세요. 현재 진행중인 프로젝트에서 TCP 네트워크 파트를 담당하게 되어

구글링하며 구현하다가 가뭄에 단비같은 강사님 강의를 찾게되어 열공하고 있습니다.

먼저 질문에 앞서 좋은 강의 올려주셔서 감사드립니다.

현재 프로젝트는 Unity 가상 시뮬레이터 개발로 Unity에서 생성된 시뮬레이팅 데이터를 

다른 Uninty Clinet에 실시간으로 전송하여 Client 에서 통신을 통해 전달 받은 데이터를 기반으로

객체들의 Position 및 여러 상태값을 동기화 하는 작업입니다.

그래서 강의를 보기 전 제가 임시로 구현했던 방식은 Unity 시뮬레이터에 Server 코드가 같이 존재하여

시뮬레이터가 실행됨과 동시에 Server가 멀티스레드로 실행되고 

Queue를 통해 생성된 데이터를 직접적으로 받아 Client에 뿌리는 방식으로 구현이 되어 있는데

강의를 보니 Server는 Unity 환경이 아니라 따로 실행을 하시고 Client만 Unity로 작성하여 진행하시더라구요.

저희 프로젝트는 가상 시뮬레이터이다 보니 최대한 빠르게 데이터를 Client에 전송해  동기화된 움직임을

제공하여야 하는데 이럴 경우에도 Server를 따로 두고 시뮬레이터도 하나의 Client로 붙이는게 맞는 구조일까요?

답변 2

0

Rookiss님의 프로필 이미지
Rookiss
지식공유자

2021. 03. 08. 14:32

아참 빼먹은 내용이 있는데
강의 코드는 대규모 인원을 염두에 두고 있고,
또 원리를 알기 위해 바닥 소켓부터 쌓아 올리지만
프로젝트 용도라면 C# 내장된 Tcp 관련 클래스를 사용하는 것도 괜찮습니다.

0

Rookiss님의 프로필 이미지
Rookiss
지식공유자

2021. 03. 08. 13:35

네트워크 제작 방식은 P2P 모델과 Client-Server 모델로 나뉩니다.
P2P(peer-to-peer)는 말씀하신대로 단말기끼리 서로 연결하는 방법이고,
Client-Server 모델은 중앙 집권 서버가 클라 연결을 받아서 관리하게 됩니다.

초창기 게임에선 P2P가 사용되었으나 (Diablo1, Starcraft1)
고질적인 핵 문제가 있기 때문에,
요즘은 P2P를 버리고 CS 모델로 다들 만듭니다.

특히 MMO는 장르 특성상 무조건 CS 모델입니다.
그래서 강의에서는 CS 모델을 채택하지만
말씀주신 상황이라면 P2P도 물론 괜찮습니다.
Unity Client 2개만 서로 데이터를 주고 받는게 확실하다면 (제 3의 클라가 없다면)
한쪽이 클라, 한쪽이 서버 역할을 담당한 다음
클라 역할을 맡은 쪽에서 서버로 붙어서 동일하게 잘 통신하면 됩니다.

Unity Client 다수가 서로 통신해야 한다면,
대장을 지정해 서버로 만들고 나머지 애들을 클라로 붙는다거나,
하며 만들 수는 있겠지만 그냥 외부 서버를 두고 CS 모델로 가는 것도 나쁘지 않습니다.
그리고 서버가 북미에 있는게 아니라면 어차피 속도 차이는 미미합니다.