- 개요
DBMS 대신, 프로젝트에 할당된 메모리를 통해 사용자의 정보 + 네트워크 연결 정보를 저장하도록 설계한다
단, 저장할 정보의 엔티티 클래스는 생성하여 제공할 정보의 규격을 설정한다
- 서버 사이드
1) ServerConnection 클래스

ServerConnection 엔티티 클래스는 네트워크 연결 정보를 저장한다
구성은 다음과 같다
- ConnectionId : 해당 네트워크 연결 정보의 아이디
- User : 연결된 사용자
- NetPeer : 해당 네트워크 연결의 종단점
- GameId : 전역 고유 식별자
2) User 클래스

User 엔티티 클래스는 연결된 사용자의 정보를 저장한다
구성은 다음과 같다
- Id : 연결된 사용자의 아이디
- Password : 연결된 사용자의 비밀번호
- Score : 해당 사용자의 점수
- IsOnline : 해당 사용자의 접속여부
3) IRepository 인터페이스

프로젝트에서 Repository 계열 클래스들은 DB를 대신하여 메모리에 정보를 저장하는 역할을 수행한다
따라서 IRepository 인터페이스를 상속받아 구현하며 오버라이드해야 하는 함수들은 위와 같다
4) IUserRepository 인터페이스

IUserRepository 인터페이스는 Repository 인터페이스를 상속받아 구현하며
추가적으로 사용자의 접속여부를 설정하는 함수를 추가하였다
5) InMemoryUserRepository 클래스

InMemoryUserRepository 클래스는 접속한 사용자의 정보를 저장하는 DB로 사용한다
IUserRepository 인터페이스를 상속받아 구현하며 멤버변수로 User를 저장하는 List를 사용한다

생성자를 위와 같이 구성하여 List에 임의의 3개의 User 인스턴스를 저장한다


부모 인터페이스들로부터 상속받은 함수들을 위와 같이 오버라이드한다
6) UsersManager 클래스

UserManager 클래스는 접속한 사용자들을 관리하고 추적하는 매니저 클래스로 사용한다
멤버변수의 구성은 위와 같다
- _userRepository 멤버변수 : 접속한 사용자의 정보를 저장하고 있는 DB 클래스
- _connections 멤버변수 : 접속한 네트워크 ID와 네트워크 연결 정보를 연결하여 저장하는 딕셔너리

생성자를 위와 같이 구성하여 멤버변수로 갖고 있는 접속한 사용자의 DB 클래스를 설정한다

LoginOrRegister 함수의 로직은 위와 같다
인자로 받은 userName에 해당하는 사용자를 가져와 기존의 사용자인지 + 새로운 사용자인지 판단한다
이후 로직에 맞춰 작업을 수행하고 수행 결과에 따라 false와 true를 반환한다
7) Container 클래스

Container 클래스의 ConfigureServices 함수를 위와 같이 수정하여
InMemoryUserRepository를 대상으로 싱글톤을 생성한다
8) AuthRequestHandler 클래스

위와 같이 2개의 멤버변수를 추가한다
- _logger : AuthRequestHandler를 대상으로 로그를 찍기 위한 ILogger
- _userManager : 접속한 사용자들을 관리하고 추적하기 위한 매니저 클래스

생성자를 위와 같이 생성하여 멤버변수의 값을 설정한다

Handle 함수를 위와 같이 설정하여 로그를 찍는 작업과 접속한 사용자에 대한 로그인 작업+ 등록 작업을 수행한다
'유니티 엔진 - 게임 프로젝트 > 데디케이트 기반 모바일 게임' 카테고리의 다른 글
| 사용자 인증 - 최종) 클라이언트의 패킷 핸들링 (0) | 2025.12.02 |
|---|---|
| 사용자 인증 - 2) 로그인한 사용자 핸들링 (0) | 2025.12.02 |
| 서버 - 최종) 서버의 패킷 처리 구조 설계 (0) | 2025.11.18 |
| 서버 - 1) 서버 구조 설계 (0) | 2025.11.18 |
| 로그인 처리 - 최종) 로그인을 통한 클라이언트 -> 서버로의 패킷 전송 (0) | 2025.11.17 |