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

20.12.29 15:47 작성 조회수 50

0

삭제된 글입니다

답변 1

답변을 작성해보세요.

2

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

게임의 기획에 따라 많은 것이 바뀌는데
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종 세트를 하나로 생각해서
요구사항에 맞춰서 구현이 가능한지를 고민해보면 됩니다.