일기

인벤토리

Realuda72 2025. 2. 6. 21:36

 새 프로젝트에서 인벤토리와 아이템을 담당하게 되었다.

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