Roblox는 각 사용자에게 그들이 상호작용하는 게임이나 앱마다 고유한 도메인 범위 사용자 ID를 부여합니다. 이 페이지에서는 도메인 범위 식별 방법과 게임 코드에서 User 유형을 사용하는 방법에 대해 설명합니다.
사용자 식별에 중요한 다음 개념을 이해해야 합니다:
| 개념 | 설명 |
|---|---|
| 사용자 | Roblox의 지속적인 계정입니다. |
| 플레이어 | 현재 실행 중인 게임의 데이터 모델 내에서 사용자를 나타냅니다 (자세한 내용은 플레이어 참조). |
| User 데이터 유형 | 특정 도메인 내에서 사용자의 정체성을 나타내는 데이터 유형입니다. 이것은 게임 코드에서 사용자를 참조하기 위한 표준 식별자입니다. |
| 도메인 범위 사용자 ID | 특정 도메인 내에서 사용자를 고유하게 식별하는 숫자 식별자입니다. 이 식별자는 각 게임과 앱마다 다릅니다. |
도메인 범위 사용자 ID
도메인 범위 사용자 ID는 특정 게임 또는 앱 내에서 사용자에게 할당되는 고유한 식별자입니다. 전역 사용자 ID와 달리, 도메인 범위 사용자 ID는 이를 발급한 도메인 내에서만 의미가 있으며, 동일한 사용자는 그들이 상호작용하는 각 게임이나 앱마다 다른 도메인 범위 사용자 ID를 갖게 됩니다. 범위 ID 롤아웃 이전에 게임에 참여한 플레이어는 그 게임에서 기존의 전역 사용자 ID를 유지합니다 (자세한 내용은 복귀 플레이어 참조).
도메인 유형은 Enum.DomainType으로 표현됩니다:
| 도메인 유형 | 범위 지정 | 예시 |
|---|---|---|
| Enum.DomainType.EXPERIENCE | 특정 게임(유니버스) | 게임 내에서 플레이어의 ID |
| Enum.DomainType.OAUTH | 특정 OAuth 애플리케이션 | 외부 도구 내에서 사용자의 ID |
도메인 범위 ID 작동 방식
플레이어가 게임에 참여하면 해당 게임에 고유한 도메인 범위 사용자 ID를 부여받습니다. 동일한 플레이어가 다른 게임에 참여하면 다른 도메인 범위 사용자 ID를 받습니다. 이는 다음을 의미합니다:
- 도메인 범위 사용자 ID는 기존의 전역 사용자 ID와 유사한 정수입니다.
- 도메인 범위 사용자 ID는 기존의 전역 사용자 ID와 충돌하지 않습니다.
- 동일한 숫자 값이 서로 다른 도메인에서 서로 다른 사용자에게 나타날 수 있습니다. 고유한 키는 도메인 유형, 도메인 ID 및 도메인 범위 사용자 ID의 조합입니다.
예제 시나리오
다음 예제는 서로 다른 게임이 동일한 사용자를 참조하는 방법을 보여줍니다:
| 시나리오 | 사용자 맥락 | 게임에서 본 사용자 ID |
|---|---|---|
| 사용자가 게임 A에 연결함 | 복귀 플레이어 (범위 ID 이전에 방문함) | 123 (전역 ID, 변경 없음) |
| 사용자가 게임 B에 연결함 | 범위 ID 롤아웃 이후 처음 방문 | 500789 (게임 B의 도메인 범위 사용자 ID) |
| 사용자가 게임 C에 연결함 | 범위 ID 롤아웃 이후 처음 방문 | 302441 (게임 C의 도메인 범위 사용자 ID) |
복귀 플레이어
플레이어가 이미 범위 사용자 ID 롤아웃 이전에 게임에 참여한 경우, 그 게임에서 기존의 전역 사용자 ID를 유지합니다. 이는 기존 데이터 저장소 키, 리더보드 및 인벤토리가 변경 없이 계속 작동하도록 보장합니다.
사용자 유형으로 작업하기
User는 게임 코드에서 사용자를 식별하는 표준 방법입니다. User 값은 도메인 범위 사용자 ID와 도메인 유형, 도메인 ID를 함께 가지고 있으므로, 정체성 맥락이 항상 식별자와 함께 전송됩니다. 전체 API 세부정보는 User 참조를 참조하세요.
플레이어로부터 사용자 가져오기
User를 얻는 주된 방법은 연결된 Player를 통해 Player.User를 사용하는 것입니다:
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
local user = player.User
print("도메인 사용자 ID:", user.Id)
print("도메인 유형:", user.DomainType)
print("도메인 ID:", user.DomainId)
end)
ID로 사용자 생성하기
현재 게임 내에서 알려진 사용자 ID로 User를 만들려면 User.fromId()를 사용합니다:
local user = User.fromId(knownUserId)
엔진 API와 함께 사용자 사용하기
사용자 ID 매개변수를 허용하는 엔진 API는 User 값을 직접 허용합니다. User를 사용하는 것이 권장됩니다:
-- 두 형태 모두 작동합니다:BadgeService:AwardBadge(player.User, badgeId) -- 권장BadgeService:AwardBadge(player.UserId, badgeId)
-- 두 형태 모두 작동합니다:local target = Players:GetPlayerByUserId(player.User) -- 권장local target = Players:GetPlayerByUserId(someUserId)
수치 사용자 ID가 사용자 ID를 허용하는 엔진 API에 전달되면, 내부적으로 자동으로 User로 래핑됩니다.
사용자 ID를 반환하는 엔진 API
사용자 ID를 반환하는 엔진 API는 동일한 필드 이름과 유형을 계속 사용합니다. 반환된 각 ID는 사용자가 범위 ID 롤아웃 이전에 게임에 참여했는지 여부에 따라 전역 ID 또는 도메인 범위 사용자 ID 중 하나입니다:
- 복귀 플레이어 (범위 ID 출시 이전에 처음 참여) — API는 사용자의 전역 사용자 ID를 반환합니다.
- 신규 플레이어 (범위 ID 출시 이후 처음 참여) — API는 사용자의 도메인 범위 사용자 ID를 반환합니다.
전역 및 도메인 범위 사용자 ID는 충돌하지 않는 표준 정수이며, 이러한 수치 필드를 읽는 기존 코드는 계속 작동합니다.
사용자 정체성 저장하기
단일 게임 내의 데이터 저장소 키에 대해서는 user.Id를 직접 사용합니다:
local key = ("player_%d"):format(player.User.Id)PlayerDataStore:SetAsync(key, data)
다른 시스템에서 읽을 수 있는 값이거나 전체 도메인 문맥이 필요한 경우, User를 User:ToString()으로 직렬화합니다:
local encoded = player.User:ToString()SomeDataStore:SetAsync("support_ticket_user", encoded)-- 나중에 문자열에서 복원local user = User.fromString(encoded)
직렬화 보장에 대한 더 많은 세부정보는 User 참조를 참조하세요.
모범 사례
- 새 코드에서 표준 식별자로 Player.User를 사용하세요.
- 하나의 도메인에서 수치 사용자 ID를 사용하여 다른 도메인의 사용자를 식별하지 마세요.