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

literate_t님의 프로필 이미지
literate_t

작성한 질문수

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

채팅 실습

DB에서 플레이어 정보를 긁어오는 부분에 대한 질문입니다!

작성

·

25

0

안녕하세요!

16:02에서 플레이? 플레이어 정보를 DB에서 긁어온다고 하셨는데요. DB에서 특정 유저의 정보를 가져오려면 unique id, id+password 조합이든, 식별 값이 필요할 거라 생각합니다. 이는 DummyClient OnConnected()에서 C_LOGIN 패킷을 만들 때 함께 보내줘도 될까요? 만약 그렇다면,

로그인은 웹 등의 게임 외부 환경에서 먼저 진행될텐데, 웹 등의 외부 환경에서 로그인 성공 이후 게임 파일을 실행할 때 id, password(해싱된 값)를 같이 넘겨주고 그 정보로 Handle_C_LOGIN에서 해당 유저의 정보를 가져오면 되는 걸까요?

제가 C# 강의 해당 강의까지는 들을 여력이 안 돼서, 여쭙습니다. C# 클라 <-> C++ 서버 헤딩할 때 적지 않은 시간이 쓰일 거 같아, 구현하지 않는 부분에 대해서는 흐름이라도 명확하게 가져가려고 합니다.

답변 2

1

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

포폴을 만들거면 그냥 인증은 무시하세요.
말로 설명하기 복잡한데 인증 서버를 먼저 거치고 (웹 방식)
거기서 어떤 식으로든(JWT 등) 토큰을 발급해서
그것을 들고 다시 게임서버로 입장해야 합니다.

게임서버 입장 시에는 이미 인증을 받은 유저이므로
password는 따로 필요없고요, accountId를 가지고 해당하는 캐릭터를 긁어오면 됩니다.
그리고 password 해싱이 아니라 accountDbId를 해싱한 JWT 토큰을 만드는게 합리적입니다.

literate_t님의 프로필 이미지
literate_t
질문자

인증 부분은 어쩔 수 없이 웬만하면 스킵하려고 했습니다. db에서 데이터를 가져올 때는 account_id를 이용하면 되는군요.

그럼 account_id를 해싱한 토큰을 가지고 게임 서버로 입장하고, 게임 서버는 토큰 값에서 account_id를 추출해 account_id를 이용해 서버에서 캐릭터를 긁어오면 될까요?

인증 과정은 절대 방법은 없겠지만 강사님께서 말씀해주신 흐름이 이런 흐름인지 마지막으로 확인하고자 합니다.

늘 좋은 강의 감사합니다🙏

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

네 그렇습니다.
Player 테이블 설계를 할 때

int playerDbId;
int accountDbId;
...

를 포함하고, PK는 playerDbId로 하되, accountDbId에 인덱스를 걸어주면 됩니다.

literate_t님의 프로필 이미지
literate_t
질문자

감사합니다!

0

안녕하세요, 인프런 AI 인턴입니다. literate_t님께서 질문해주신 내용에 대해 답변 드리겠습니다.

게임 서버에서 특정 유저의 정보를 DB에서 가져오기 위해서는 말씀하신 것처럼 unique id나 id+password 등의 식별 값이 필요합니다. 게임 서버에서는 이러한 식별 정보를 기반으로 DB에 쿼리를 실행하여 해당 유저의 정보를 조회할 수 있습니다.

게임 외부에서의 로그인이 먼저 이루어지고, 로그인 성공 후 게임 클라이언트를 실행하면서 필요한 인증 정보를 함께 전달하는 방식은 일반적으로 많이 사용되는 방법입니다. 게임 실행 시 전달받은 id와 password(혹은 해싱된 값)을 기반으로 서버에 인증 요청을 보내고, 서버에서 해당 정보를 검토하여 유저의 정보를 가져오게 됩니다.

다른 유사한 질문 및 설명은 다음 링크들도 참고하시면 도움이 될 것입니다:

  1. 새 계정을 생성해서 접속해도 같은 플레이어로 선택되는 문제 - 사용자 계정과 DB 연동에 관련한 문제 해결 과정이 포함되어 있습니다.

  2. HP 연동 질문있습니다 - DB와 서버 메모리 간의 데이터 동기화 문제에 관한 논의가 있습니다.

이러한 방식으로 서버와 클라이언트를 연결하고 사용자의 데이터를 활용해 나가시면 도움이 될 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

literate_t님의 프로필 이미지
literate_t

작성한 질문수

질문하기