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

Pa님의 프로필 이미지

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)

서버 vs 클라 데이터 정책

작성

·

806

0

서버와 DB공부를 하면서

서버, 클라에서의 데이터 정책(?)에 대해서 궁금한 점이 생겼는데요

선생님 수업을 듣기전에는 클라에서 컨텐츠 관련된 데이터들을

외부 파일로 읽어서 사용했었습니다. (캐릭터, 아이템 같은 정보들)

서버관련된 Part에서 치트방지 차원에서 데이터들을 서버단에서

관리한다고 들었던거 같은데요 관련해서 데이터정책을

어디서 어떻게 처리해야할지 고민에 빠졌습니다.

Q1) 게임마다 케바케가 있겠지만 서버와 DB를 둔 게임에서는

이런 데이터들을 서버에서만 담당하는지 양쪽에서 담당하는지 

아니면 각각 필요한곳은 필요한곳에다가 사용하는지 궁금합니다.

Q2) 게임중에 간혹 아이템이나 유닛정보들을 볼 수 있는 백과사전 시스템 같은경우에는

어떻게 처리하는지 궁금합니다. (결국 Q1과 같은 질문인거 같네요)

Q3) Part7에서는 같은json파일을 서버,클라에서 같이 사용을 했었는데

서버에서만 사용할경우 json이 아닌 DB에서 작성된 테이블을 사용 할 수도있을까요?

클라만 쭉 공부해 오다가 서버부터 DB까지 처음해보는 것들을 공부하려다 보니

이런저런 정책들을 어떻게 처리해야할지 머리가 복잡해지네요 ㅠㅠ

읽어주셔서 감사합니다.

답변 1

2

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

우선 '데이터'라는 용어가 폭넓게 사용되므로
2가지로 분류를 할 필요가  있습니다.

- 1) 싱글 게임 기준으로 '세이브 파일'에 해당하는 데이터.
플레이어가 소지한 아이템이나 현재 레벨 등 게임 상태와 관련된 정보.
- 2) '그 외 데이터' .
ex) 각종 아이템 스펙, 스탯, 명칭, UI 아이콘 등

온라인 게임에서 1번은 무조건 서버와 연결된 DB에 저장하는 것이고
이는 딱히 다른 방법의 여지가 없습니다.

2번의 경우 통상적으로 '데이터시트'라고 부르는데,
온라인 게임이라 하더라도 이를 서버에서만 들고 있을 수는 없습니다.
클라에서도 결국 서버와 발맞춰 시뮬레이션을 돌려야 하기 때문에
이런 저런 스탯 / 아이템 정보를 들고 있어야 하고
또 UI에서 그려주기 위해 필요한 정보가 또 있겠죠.
가령 인벤토리를 열면 아이템의 이름/스탯과 아이콘이 출력되고,
스킬창을 열면 스킬 아이콘과 세부 스킬에 대한 설명이 뜰텐데,
이를 굳이 서버에서 받아올 필요가 없으므로
클라 쪽 데이터시트로 관리하게 됩니다.
데이터시트는 json이 가장 무난하지만 xml이나 자체 포맷도 사용할 수 있습니다.

결국 클라/서버 양쪽에서 데이터시트를 두고 관리하지만
민감한 정보는 서버쪽에에만 배치해서 따로 관리를 합니다.
가령 강화 확률같은 사업적으로 민감한 데이터나,
몬스터 AI 패턴 등 게임 밸런스에 영향을 미치는 부분은 서버에만 들고 있어야겠죠.

마지막으로 설령 서버에서 데이터시트를 들고 있다고 해서,
보안에 무조건 안전해지는 것은 아니라는 것을 아셔야 합니다.
예를 들어어떤 아이템의 공속을 비밀로 하고 싶어서
서버 데이터시트에만 배치한다고 해도,
어차피 공격 모션을 렌더링하려면
해당 공속 정보를 클라한테 보내야 할 상황이 생길 수도 있습니다.
클라의 메모리에 정보가 있다는 것은 곧
리버싱을 통해 정보를 추출할 수 있다는 얘기이기도 합니다.
따라서 어차피 네트워크 통신으로 주고 받는 정보는,
사실상 클라한테 이미 노출되었다고 가정해도 되므로
그냥 속편히 클라 쪽 데이터시트에 박아놓고 클라에서도 알아서 로드해서 사용해도 무방합니다.

Pa님의 프로필 이미지

작성한 질문수

질문하기