기능
NetworkAuthenticator는 Mirror 네트워크에서 서버와 클라이언트 간의 인증 절차를 처리하기 위한 추상 클래스입니다.
- 클라이언트가 서버에 접속할 때 인증을 요구하거나 거부할 수 있게 함
- 인증 로직을 커스터마이징할 수 있도록 제공됨 (예: 닉네임 중복 검사, 토큰 검증 등)
기본 흐름 (Client ↔ Server)
- 클라이언트 접속 시
- OnClientAuthenticate() 호출됨
- 인증 요청 메시지(AuthRequestMessage)를 서버에 전송
- 서버에서 인증 처리
- OnServerAuthenticate(conn)은 기본적으로 아무 동작 안 함
- 대신 OnAuthRequestMessage(conn, msg) 등 메시지 핸들러에서 인증 처리
- 인증 성공 시:
- conn.authenticationData에 사용자 데이터 저장 가능
- ServerAccept(conn) 호출
- 인증 실패 시:
- conn.isAuthenticated = false
- ServerReject(conn) 호출
- 클라이언트 수신 처리
- 서버가 보낸 응답 메시지(AuthResponseMessage)를 받음
- 성공이면 ClientAccept(), 실패면 NetworkManager.StopHost() 등 호출
구조적 포인트
메서드 | 위치 | 설명 |
OnStartServer() | Server | 인증 메시지 핸들러 등록 |
OnServerAuthenticate(conn) | Server | 접속 시 자동 호출. 인증 메시지 기다리기 용 |
OnAuthRequestMessage(conn, msg) | Server | 인증 메시지를 수신하고 처리 |
ServerAccept(conn) | Server | 인증 성공 시 호출 |
ServerReject(conn) | Server | 인증 실패 시 호출 |
OnStartClient() | Client | 인증 응답 메시지 핸들러 등록 |
OnClientAuthenticate() | Client | 서버 접속 직후 자동 호출. 인증 메시지 송신 |
OnAuthResponseMessage(msg) | Client | 서버 응답 수신 후 인증 결과 처리 |
ClientAccept() | Client | 인증 성공 처리 |
NetworkManager.StopHost() | Client | 인증 실패 시 연결 종료 처리용 |
사용 예시
예시1: 단순 인증 (MirrorNetworkAuthenticator)
- 별다른 데이터 없이 인증 요청 및 응답만 주고받고 바로 Accept()
예시2: 닉네임 중복 검사 (ChatAuthenticator)
- 클라이언트가 authUsername 전송
- 서버는 기존 이름과 중복 검사 → 성공 시 수락, 실패 시 거절
- conn.authenticationData에 사용자 이름 저장 (추후 활용 가능)
요약 흐름도
클라이언트
입력한 이름 → AuthRequestMessage 전송 → 서버 응답 받음 → 성공: ClientAccept() / 실패: StopHost()
서버
클라이언트 접속 → 메시지 수신 대기 → 이름 중복 확인 → - 중복X: 저장 + 응답 + ServerAccept() - 중복O: 응답 + 1초 뒤 ServerReject()
확장 아이디어
- DB 연동해서 로그인/회원가입 기능 구현 가능
- AuthRequestMessage에 비밀번호, 토큰 등 추가 가능
- authenticationData는 NetworkBehaviour.OnStartServer()에서 conn.authenticationData as string으로 참조 가능
'유니티 > 서버' 카테고리의 다른 글
Unity 기반 게임에서 서버와 클라이언트를 어떻게 나누고 운영하느냐 (0) | 2025.06.16 |
---|---|
[TargetRpc] VS [ClientRpc] (0) | 2025.06.16 |
[Command] vs [ClientRpc] 차이 비교 (0) | 2025.06.16 |
미러 동기화 예제 코드 (0) | 2025.06.16 |
Photon Fusion 2의 Authority (RpcSources, RpcTargets) (0) | 2025.06.16 |