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

작성자 없음

작성자 정보가 삭제된 글입니다.

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

ReaderWriterLock

ReaderWriterLock 강의 10분 47초 쯤 나오는 Reward 예시에 대해 질문이 있습니다.

해결된 질문

20.06.26 10:57 작성

·

245

1

ReaderWriterLock 강의 10분 47초 쯤 나오는 Reward 예시에 대해 질문이 있습니다.

Reward 예시에서 GetRewardById(int id) 를 설명하시면서, 운영 툴로 보상을 지급해야 할 때, lock이 필요하다 라고 말씀하셨었는데 애초에 MMORPG를 잘 안해서 와닿지 않는 것 같아요.

장기적으로 본다면 게임내의 캐릭터가 가지고 있는 아이템들은 DB로 관리될 것이라 생각되는데, 왜 Lock이 필요한 것인지 이해가 잘 되지 않아요.

메모리 배리어 파트의 Store, Load 와 관련된 것 이라면 DB와 무관하게 실시간으로 캐릭터에게 지급이 된다라고 이해한다면 맞는것 같은데 이렇게 생각하는게 맞는건가요?

답변 2

3

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

2020. 06. 26. 19:48

우선 DB와 컨텐츠는 아예 분리해서 생각하셔야 합니다.
최종적으로 아이템이 DB에 저장되는 것은 맞지만,
그와는 별개로 DB 부하 때문에 유저 정보를 매 번마다 DB에서 Load 할 수는 없습니다.
따라서 보통 유저가 게임에 접속하는 순간, 
DB에서 해당 유저의 모든 정보(아이템, 스킬, 업적 등)를 싹 긁어와 
서버 메모리에서 따로 관리하게 됩니다.

GetRewardById는 위 그림을 예제로 들어보겠습니다.
특정 던전을 완료하면 나오는 보상 목록에 아이템이 5개 있는 것을 알 수 있습니다.
보상 목록은 기본적으로 고정이고, 데이터시트에 이미 박혀 있는 상황이겠죠.
따라서 GetRewardById(던전ID)를 입력하면, 데이터시트에 박혀 있는 5개의 고정 아이템ID를 리턴할겁니다.
이렇게 아이템 리스트가 고정이라면, 굳이 Lock을 사용하지 않아도 무방합니다. (아무도 데이터 수정을 하지 않기 때문)

그러나 경우에 따라 운영자가 운영툴로 특정 던전 입장을 유도하기 위해,
특정 던전에 보너스 아이템을 설정할 수도 있을겁니다.
그러면 완료 시 습득하는 아이템이 5개가 아니라 6개가 될 수도 있다는 얘기고,
매우 드물지만 가끔 데이터 Write가 일어날 수 있다는 얘기가 됩니다.
이렇게 되면 Lock을 걸지 않고 데이터에 접근할 수 없게 되겠죠.

0

장민창님의 프로필 이미지

2020. 06. 26. 22:46

아! 예시를 들어 설명해주사니 정말 이해가 잘됩니다. 감사합니다!!

바로 이해했어요!

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기