영구적 데이터 저장 DB = MySQL
● 현재 제작 중인 게임에서는 회원가입, 로그인을 통해 사용자의 데이터를 DB에 저장하고
캐릭터를 생성할 때, DB에 nickname, classCode를 저장한다.
- nickname은 중복이 불가능한 string 형태의 데이터
- classCode는 캐릭터의 종류를 선택하는 int형 데이터
● 캐릭터를 생성할 때 MySQL에 level, exp, stamina, pick_speed, move_speed, ability_point를
기본값을 설정하고 데이터 row를 생성한다.

● 캐릭터 생성할 때 MySQL에 인벤토리를 생성하고, item_id는 nullable로 설정하여 아이템이 들어올 자리를
만들어둔다.

게임을 접속했을 때 사용하는 noSQL DB = Redis
● 사용자가 로그인 후 캐릭터가 로비(Town)에 들어오면 캐릭터(플레이어)가 자동으로 생성되며, 이때
Redis에 접속 정보를 저장해 둔다.
= playerSession

● 추가적으로 사용자가 로그인되어 있다는 것을 서버가 인식하기 위한 데이터도 저장해 둔다.
= userSession

앞으로 구현 방향
● 현재는 사용자가 서버에 접속하고 클라이언트를 통해 게임을 접속했을 때 예시로 어떤 식으로 데이터가
들어가는지에 대한 테스트 적인 부분이다.
● 연결이 확인되었으니 이제는 클라이언트가 지역 이동을 했을 때 cuurentSector를 변경해 주는 작업과
캐릭터(player)에 대한 대부분의 데이터를 Redis에 위와 같이 Hash 형태로 저장해 두었다가 지역 이동 시
사용하는 처리가 필요하다.
● 즉, Client → Server → Redis 이렇게 저장되다가 클라이언트가 접속 종료를 했을 때 MySQL과 연동하여
영구적으로 보관이 필요한 데이터들은 Update를 사용하여 지금까지 플레이 기록을 저장하는 방향으로
구현하고자 한다.
● 주의해야 할 점은 DB 접근을 최소화한다고 해서 너무 MySQL을 업데이트하지 않는 것은 클라이언트가
비정상 종료나 Server에 onEnd가 들어오지 않았을 경우 문제가 생길 수 있으니 추가적으로 시간을 설정해서
주기적으로 MySQL을 업데이트하는 방식을 고려해야 한다.
'Project_xxx' 카테고리의 다른 글
| [Project_] R - 로그인, 캐릭터 생성에 대한 고민 (0) | 2025.02.14 |
|---|---|
| [Project_] R - 서버 설계 (Session) (0) | 2025.02.11 |
| [Projcet_] TDO - Trouble Shooting (0) | 2025.01.31 |
| [Project_] MG - Trouble Shooting (0) | 2025.01.16 |
| [Project_] TD - Final (0) | 2025.01.02 |