inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part9: MMO 컨텐츠 구현 (DB연동 + 대형 구조 + 라이브 준비)

mmorpg서버에 관하여 질문있습니다.

107

복숭아요거트

작성한 질문수 0

0

삭제된 글입니다

MMORPG

답변 1

2

Rookiss

기초적인 질문이 아니라 매우 어려운 질문입니다 ㅎㅎ!

게임의 기획에 따라 많은 것이 바뀌는데
MMO와 다르게 방 단위의 게임 (디아블로라거나, 메이플이라거나)은
DB 저장 정책도 많이 달라지게 됩니다.

당연히 그 정도 규모의 게임을 단일 DB로 처리하는 것은 불가능하고
테이블을 쪼개서 ('샤딩'이라고 합니다) 관리를 한다거나,
Redis와 같은 캐시 DB를 따로 두고 지연해서 RDB에 넣는 등 다양한 방법이 존재합니다.
구체적으로 Item 테이블을 16개로 쪼갠 다음,
(itemId % 16) 결과값 (0~15)에 따라 (Item_0~ Item_15) 테이블 중 하나에
데이터를 저장하는 방식을 샤딩이라고 하는데
단순하면서도 많은 성능 향상을 기대할 수 있습니다.

DB를 사용하는 빈도가 엄청 높지 않고,
엄격한 Transaction을 요구하지 않고,
또 유저끼리 데이터를 교환 (트레이드 등)하는 경우가 없다면
통합 서버로 가는 것도 물론 가능합니다.
카드 게임류라면 카드 Gacha를 까거나, 처음에 게임에 입장할 때를 제외하면
DB에 Read/Write하는 횟수가 아주 많진 않을테고
또 MMO처럼 실시간으로 유저끼리 아이템을 교환하고 떨구고 트레이드 하지도 않을테니
유저ID에 따라 적절히 카드 Table도 샤딩하는 것을 고려할 수 있겠죠.

의외로 이런 사소한 사양들이 중요한데
유저끼리 실시간 트레이드를 한다면 다수의 테이블끼리 Lock을 걸어야 할 수도 있겠지만,
그게 아니라 경매장을 통한 트레이드만 된다면
설계적인 측면에서 훨씬 예측하기가 쉬워집니다.

사실 정해진 답은 없고 [게임 로직(CPU 부하)] + [DB 부하] + [네트워크 부하]
이렇게 3종 세트를 하나로 생각해서
요구사항에 맞춰서 구현이 가능한지를 고민해보면 됩니다.

마우스 이벤트 처리방법(오브젝트간 인터렉션)

0

623

1

RecvArgs_Completed에서 lock을 안하는 이유

0

517

1

Entity framework 질문드립니다.

0

576

2

json 직렬화

1

290

1

mmo 와 pvp

0

536

2

github로 프로젝트를 push, pull할 때 질문

1

530

1

Iocp 서버 관련 질문드립니다.

0

329

1

서버 관련 질문

0

398

1

DB 처리관련 질문이 있습니다

0

303

1

안녕하세요. 질문드립니다.

1

1510

2

이해한 것이 맞나 궁금합니다.

0

288

1

마이그레이션 파일이 이상합니다.

0

284

1

강의 마지막으로 질문 드립니다.

0

680

2

ItemDbId,구조 설계

0

265

1

MMO 서버 관리 질문 드립니다!

0

324

1

디비 정보 나누기

0

241

1

AccountDb 업데이트

0

308

1

콘솔창이 아니라 브라우저에서 실행

0

283

2

메모리 누수문제.

0

498

1

유니티에서 클라이언트 빌드후 실행하면 맵 로드가 안됩니다.

0

364

1

외부 네트워크에서도 접속해서 게임하기

1

339

1

유니티클라에서 패킷을 계속 보내지 않고 lockstep이나 추측항법으로 동기화를 할 수 있을까요?

0

597

1

서버 메모리와 DB 저장 관련 질문

0

370

1

JsonUtility.FromJson 관해서 질문있습니다.

0

279

1