Project_xxx

[Project_] R - 로그인, 캐릭터 생성에 대한 고민

wakelight23 2025. 2. 14. 21:37

패킷에 기반하여 구현해본 결과

message C_Register {
  string email = 1;
  string pw = 2;
  string pwCheck = 3;
}

message S_Register {
  bool isSuccess = 1;
  string msg = 2;
}

message C_Login {
  string email = 1;
  string pw = 2;
}

message S_Login {
  bool isSuccess = 1;
  string msg = 2;
  repeated OwnedCharacters ownedCharacters = 3;
}

message C_CreateCharacter {
  string nickname = 1;
  int32 class = 2;
}

message S_CreateCharacter {
  bool isSuccess = 1;
  string msg = 2;
}

● 클라이언트에서 email, pw, pwCheck을 입력해서 데이터를 보내주면 서버에서 비밀번호, 비밀번호 재확인을
    서버에서 검증하여 회원가입을 진행

 

● 클라이언트에서 받은 데이터로 서버에서 DB에 저장하고 클라이언트에 성공 메시지를 전송

 

● DB에 User의 데이터가 저장되어 있기 때문에 로그인이 가능하다.

 

OwnedCharacters: (nickname_string, class_int) => {
    return { nickname: nickname_string, class: class_int };
  },

- payloadData에 OwnedCharacters를 정의하여 여기서는 DB에서 사용자가 캐릭터를 생성했는지를
  nickname, class_code를 가져와서 있다면 바로 Town으로 접속하고, 없다면 캐릭터 생성 창으로 이동한다.

 

 

고민했던 부분

● 회원가입을 진행할 때, Users 데이터를 저장함과 동시에 Players 테이블에 player_id와 user_id를 저장하고

nickname, class_code를 nullable 상태로 둔 데이터를 미리 생성한다.

 

● OwnedCharacters에 nickname, class_code가 null 값으로 받기 때문에 비어있는 판정을 받으므로
   캐릭터 선택창으로 넘어간다.

 

● 클라이언트에서 nickname을 입력하고 class_code 데이터를 서버에 전해주면 서버는 DB에 해당 데이터를
   UPDATE 문을 사용해서 데이터를 최신화한다.

 

→ 이렇게 구현했을 때 nullable을 사용하게 되는데 문제가 되는 부분이 있는가에 대해 고민하게 되었다.

 

 

문제점으로 나올 수 있는 것은

● 동시성 문제가 가장 크게 다가올 듯 하다. 현재 구현하는 프로젝트는 온라인 서버 기반의 게임이기 때문에
   여러 클라이언트가 동시에 캐릭터 생성, 로그인 시도를 했을 때 문제가 생길 수 있을 거 같다

 

아직 발생한 문제는 아니지만

● 발생하지 않은 문제로 벌써부터 고려를 하고 구현을 미루는 것은 문제가 될 수 있기 때문에
   일단은 구현한대로 사용하다가 문제가 발생했을 때 어떤 문제가 어떻게 발생했는지 차차 해결하는 것이
   좋을 듯 하다.