새 프로젝트에서 인벤토리와 아이템을 담당하게 되었다.
ERD
inventory
id | int | not null | auto_increment |
charId | int | not null | unique |
itemId | int | not null | unique |
rarity | int | not null | default = 0 |
equiped | bool | not null | default = false |
유저가 가진 아이템들의 목록을 담은 테이블이다. 아이템의 희귀도와 장비 여부는 가변이기 때문에 여기에 저장한다.
item
id | int | not null | auto_increment |
name | varchar | null | |
itemType | int | ||
stat | float | ||
price | int |
모든 아이템들의 정보를 담은 테이블이다. 아이템은 name, itemType, stat, price의 값을 가진다.
- itemType은
- 0: 소모성 아이템
- 1: 비소모성 아이템
- 2: 머리
- 3: 상의
- 4: 하의
- 5: 신발
- 6: 무기
- stat은 아직 아이템이 어떻게 구현될지 미정이기 때문에 일단 모두 0으로 둔다.
- price는 상점에서 판매되는 가격이다.
구현해야 하는 기능
- 창고에 아이템 입/출고
- 플레이어 장비 장착/해제
- 플레이어 인벤토리 정보를 클라이언트에 전달
문제
- 플레이어 인벤토리 정보를 서버로 가져와서 다뤄야 하나? 클라이언트의 인벤토리 조작이 있을때마다 DB에 직접 쿼리를 보낸다면 DB의 부하가 커질 것이다. 플레이어가 게임에 접속할 때 서버로 인벤토리 정보를 모두 가져와 저장한다면 DB의 부담은 줄겠지만 서버의 메모리 사용량이 늘어날 것이다.
어떤 방식을 택해야 효율적일지 잘 모르겠다. - 만약 인벤토리를 서버에 저장한다면 어떤 형태로 저장해야할까? item 클래스를 만들어뒀는데, 클래스 인스턴스 형태로 가지고 있는건 비효율적이라고 생각한다. itemId와 rarity, equiped 여부만 저장하면 되지 않을까?
- 던전과 아이템 쪽 기획이 전혀 되지 않았기 때문에 어떻게 변화할지 모른다. 예를 들어 플레이어가 던전에 입장할 때 인벤토리에서 아이템을 장비하고 들어가게 되는데, 이럴 때 DB를 어떻게 처리해야 할지 모르겠다.
'일기' 카테고리의 다른 글
javascript - hoisting (0) | 2025.02.05 |
---|---|
javascript - var, let, const (0) | 2025.02.04 |
(Javascript) 뒤에 있는 큰 수 찾기 (0) | 2025.02.03 |
운영체제 (0) | 2025.01.23 |
컴퓨터 메모리 (0) | 2025.01.21 |