구독

*이 콘텐츠는 AI(베타)를 사용해 번역되었으며, 오류가 있을 수 있습니다. 이 페이지를 영어로 보려면 여기를 클릭하세요.

게임 내 구독을 통해 사용자에게 월간 비용으로 반복적인 혜택을 제공할 수 있습니다. 구독은 패스와 유사하지만, 패스의 혜택은 무기한 부여되는 반면, 구독의 혜택은 사용자가 월간 요금을 지불해야만 제공됩니다.

Roblox의 구독은 다음과 같은 특성을 가지고 있습니다:

  • 자동 갱신: 구독은 자동으로 갱신되며, 일회성 구매가 아니며, 현지 통화 또는 로벅스(Robux)로 가격이 책정될 수 있습니다.
  • 로벅스 지급: 구독이 현지 통화로 구매되었든 로벅스로 구매되었든, 귀하는 로벅스에서 구독 수익을 받습니다. 자세한 내용은 구독으로 수익 얻기를 참조하십시오.
  • 단일 계층: 게임 내 모든 구독은 사용자가 동시에 소유할 수 있습니다. 상호 배타적인 구독은 지원되지 않습니다.
  • 지역 가격 책정: 지역 가격 책정은 로벅스로 판매되는 구독에 대해 기본적으로 활성화되며 끌 수 없습니다. 현지 통화로 판매되는 구독에는 지역 가격 책정이 적용되지 않습니다.

구독 가이드라인

구독을 생성하기 전에 Roblox 서비스 약관와 지역 법률을 준수하는지 확인하십시오. 사기를 포함한 사용자에게 잘못된 제안을 하거나 우리의 커뮤니티 기준을 위반하는 게임은 삭제될 것입니다.

다음 가이드라인을 준수해야 합니다:

  • 명확하고 구별 가능한 구독 옵션 제공: 구독 옵션을 서로 구별할 수 있도록 짧고 간결하며 자가 설명적인 이름을 사용하십시오. 게임 내에서 장사할 때 각 옵션의 가격과 기간을 명시하십시오.
  • 플랫폼과 장치에 걸쳐 동일한 혜택 제공: 구독이 어디서 구매되었든 사용자가 특정 구독 플랜에 대해 동일한 혜택을 받도록 보장하십시오.
  • 서로 그리고 전체 게임 제공과 잘 맞도록 구독 설계: 상호 배타적인 "브론즈", "실버", "골드"와 같은 동일한 혜택의 계층화는 현재 지원되지 않습니다. 구독이 뚜렷한 혜택 세트를 나타내도록 하십시오.
  • 구독의 전체 기간 동안 혜택 제공: 구독 제공이 활성화되면 설명된 혜택을 준수하고 비공식적으로 혜택을 철회하지 마십시오.
  • 인게임에서 다른 플랫폼(모바일, 웹 등)에서 구매하도록 사용자 유도하지 않기: 사용자와 플랫폼 외부에서 소통할 자유는 있지만, Roblox 앱을 사용하여 다른 곳에서 구매하도록 유도하는 것은 금지되어 있습니다.
  • 사용자가 결제 이후 추가 요구 사항에 따라 구독 혜택을 제한하지 않기: 사용자가 추가 작업(예: 소셜 미디어에 게시)을 수행해야 결제한 혜택에 접근할 수 있다는 요구는 금지됩니다. 이 가이드라인은 구독 구매로 생성하고 마케팅할 수 있는 배틀 패스에는 영향을 미치지 않습니다.

로벅스 대 현지 통화

구독은 로벅스 또는 현지 통화로 가격이 책정될 수 있습니다. 아래 표는 두 결제 옵션을 비교합니다.

로벅스현지 통화
자격모든 제작자신분증이나 전화번호로 인증된 계정 필요
플랫폼모든 플랫폼에서 사용 가능웹, 앱 스토어 및 구글 플레이에서 사용 가능
국가Roblox를 지원하는 모든 국가에서 사용 가능아르헨티나, 중국, 콜롬비아, 인도, 인도네시아,
일본, 러시아, 대만, 터키, 아랍에미리트, 우크라이나 및 베트남에서 사용 불가능
가격49 로벅스 이상$2.99, $4.99, $7.99, $9.99, 또는 $14.99
지역 가격 책정기본적으로 활성화됨사용 불가능
지급액매월 구독 수익의 70%첫 달 70%, 이후 매월 100%

구독 생성

구독을 생성하려면:

  1. 크리에이터 대시보드에서 게임으로 이동하여 수익화구독을 선택합니다.
  2. 구독 생성을 클릭합니다.
  3. 표지 이미지를 업로드합니다.
  4. 고유한 이름을 입력합니다. 동일한 게임에 두 개의 같은 이름의 구독을 가질 수는 없습니다.
  5. 제공하는 혜택을 명확하게 설명하는 설명을 입력합니다.
  6. 다음 결제 옵션 중 하나를 선택합니다:
    • 구독자가 로벅스 지불: 사용자가 로벅스로 반복 구독 요금을 지불합니다. 이 옵션을 선택하면 49 로벅스 이상으로 사용자 지정 가격을 입력해야 합니다. 구독에 대한 지역 가격 책정은 기본적으로 활성화되어 있으며 끌 수 없습니다.
    • 구독자가 현지 통화 지불: 사용자가 현지 통화로 반복 구독 요금을 지불합니다. 이 옵션을 선택하면 5개의 가격 계층 중 하나에서 구독 가격을 선택해야 합니다.
  7. 다음 제품 유형 중 하나를 선택합니다:
    • 내구성: 사용 후 또는 소유 후에도 지속되는 영구 아이템, 예를 들어 무기와 같은 물리적 아이템입니다. 구독에 서로 다른 유형의 물품 묶음이 포함되어 있고 그 중 하나 이상이 내구성이 있다면, 예를 들어 칼과 물약이 포함된 가치 팩과 같은 경우, 제품 유형으로 내구성을 선택하십시오.
    • 소모품: 사용 후 또는 소유 후에 만료되는 임시 재구매 가능 아이템으로, 시간이 지나면서 만료되는 일시적인 부스트를 제공하는 소모성 물약 등이 있습니다.
    • 통화: 사용자가 게임 내 아이템을 구매하는 데 사용할 수 있는 모든 교환 수단입니다.
  8. 구독 생성을 클릭합니다.

구독 활성화

게임당 최대 50개의 구독을 활성 및 비활성 구독으로 가질 수 있습니다.

구독을 판매하려면 활성화하려는 구독 옆의 **⋮**를 클릭하고 활성화를 선택합니다. 활성 구독은 게임 상세 페이지의 상점 탭에서 자동으로 판매 가능하며, MarketplaceService 기능을 통해 게임에 추가할 수 있습니다.

구독을 첫 번째로 활성화하기 전에 게임 이름의 축약된 버전을 확인해야 합니다. 이 축약된 게임 이름은 사용자가 구독할 때 사용자에게 표시되며, 구독 생성에서 생성한 구독 이름과 함께 표시됩니다.

구독 상태

구독에는 두 가지 가능 상태가 있습니다:

  • 활성: 활성 구독은 판매 가능하며, 구독자는 다음 기간 시작 시 자신의 구독을 갱신할 수 있습니다.
  • 비활성: 비활성 구독은 판매할 수 없습니다.

구독의 상태를 변경하려면 구독 타일 오른쪽 상단의 **⋯**를 클릭하고 활성화(현재 비활성인 경우) 또는 판매 중지(현재 활성인 경우)를 선택하십시오.

판매 중지를 선택하면 기존 구독자가 구독을 갱신하도록 허용할지 또는 현재 구독자에 대한 향후 갱신을 취소할지 선택할 수 있습니다. 게임에서 관련 구독 혜택을 영구적으로 제거할 계획이 없다면 기존 구독자가 구독을 갱신하도록 허용하는 것이 좋습니다.

구독 편집

수정할 수 있는 필드는 결제 방법에 따라 달라집니다.

편집 가능한 필드로벅스에서 판매되는 구독현지 통화에서 판매되는 구독
표지 이미지
이름아니오아니오
설명
결제 방법예(현지 통화로 전환 가능)예(로벅스로 전환 가능)
가격예(60일마다 한 번)아니오
제품 유형아니오아니오
활성 상태

결제 방법 변경은 신규 구독에만 영향을 미칩니다. 기존 구독자는 원래 결제 방법을 유지하며 전환하려면 취소하고 재구독해야 합니다.

구독 삭제

구독을 삭제하려면 삭제하려는 구독 옆의 **⋮**를 클릭하고 삭제를 선택합니다.

활성 구독을 삭제하면 활성 구독자에게 전액 환불이 이루어지며 귀하에게는 로벅스가 발생하지 않습니다. 대부분의 경우 구독을 삭제하려면 먼저 판매 중지를 하고 모든 갱신을 취소하는 옵션을 선택하고 현재 기간이 끝날 때까지 기다리는 것을 권장합니다.

구독 삭제는 확인을 위해 구독 ID의 마지막 네 자리가 필요합니다.

게임에 구독 통합하기

사용자의 구독 상태 확인

다음 코드 샘플은 게임에서 구독 감지를 구현합니다:


-- 서버에서 이 코드를 실행하십시오
local MarketplaceService = game:GetService("MarketplaceService")
local Players = game:GetService("Players")
local SUBSCRIPTION_ID = "EXP-11111111" -- 귀하의 구독 ID로 교체하십시오
local function grantAward(player: Player)
-- 여기서 구독과 관련된 보상을 부여해야 합니다
end
local function revokeAwardIfGranted(player: Player)
-- 이 메서드는 구독이 _없는_ 모든 플레이어에게 호출됩니다
-- 코드가 구독을 데이터 스토어에 저장하거나 '철회'가 필요한 혜택을 제공하는 경우
-- 이 메서드를 사용하여 철회를 처리해야 합니다
end
local function checkSubStatus(player)
local success, response = pcall(function()
return MarketplaceService:GetUserSubscriptionStatusAsync(player, SUBSCRIPTION_ID)
end)
if not success then
warn(`플레이어의 구독 확인 중 오류 발생: {response}`)
return
end
if response.IsSubscribed then
grantAward(player)
else
revokeAwardIfGranted(player)
end
end
local function onUserSubscriptionStatusChanged(player: Player, subscriptionId: string)
if subscriptionId == SUBSCRIPTION_ID then
checkSubStatus(player)
end
end
Players.PlayerAdded:Connect(checkSubStatus)
Players.UserSubscriptionStatusChanged:Connect(onUserSubscriptionStatusChanged)

패스를 구독으로 교체

게임에서 구독을 도입하는 한 가지 방법은 기존 패스를 구독으로 교체하는 것입니다. 새로운 기능이나 보상을 추가하지 않고 구독을 신속하게 구현하고자 할 경우 좋은 옵션입니다.

패스를 구독으로 교체할 때 유의해야 할 점은 다음과 같습니다:

  • 기존 패스 보유자는 계속해서 결제한 혜택을 받아야 합니다.
  • 패스의 판매를 중단하여 새로운 사용자가 대신 구독을 구매할 수 있게 해야 합니다.
  • 구독은 철회될 수 있으므로, 패스가 이전에 데이터 스토어로 혜택을 지속시킨 경우, 이러한 혜택을 "되돌려야" 합니다. 이 점은 모든 패스 구현에 적용되는 것은 아니지만, 더 복잡한 구현의 경우 적용될 수 있습니다.

패스를 구독으로 교체하는 다음 코드 샘플을 참조하십시오:


-- 서버에서 이 코드를 실행하십시오
local MarketplaceService = game:GetService("MarketplaceService")
local Players = game:GetService("Players")
local LEGACY_GAME_PASS_ID = 1234 -- 구독으로 교체할 패스의 ID로 교체하십시오
local SUBSCRIPTION_ID = "EXP-11111111" -- 귀하의 구독 ID로 교체하십시오
local function awardBenefit(player: Player)
-- 여기서 구독을 수여해야 합니다
end
local function revokeBenefitIfGranted(player: Player)
-- 이 메서드는 구독이 _없는_ 모든 플레이어에게 호출됩니다
-- 코드가 구독을 데이터 스토어에 저장하거나 '철회'가 필요한 혜택을 제공하는 경우
-- 이 메서드를 사용하여 철회를 처리해야 합니다
end
local function checkSubscriptionStatus(player: Player)
local success, result = pcall(function()
return MarketplaceService:GetUserSubscriptionStatusAsync(player, SUBSCRIPTION_ID)
end)
if not success then
print(`구독 상태를 가져오는 중 오류 발생: {result}`)
return
end
if result.IsSubscribed then
awardBenefit(player)
else
revokeBenefitIfGranted(player)
end
end
local function onPlayerAdded(player: Player)
local success, result = pcall(function()
return MarketplaceService:UserOwnsGamePassAsync(player.UserId, LEGACY_GAME_PASS_ID)
end)
if not success then
print(`패스 상태를 가져오는 중 오류 발생: {result}`)
return
end
if result then
-- 플레이어가 이전 패스를 구매한 경우, 구독 상태를 조회할 필요 없이
-- 제공된 혜택을 영원히 가지고 있으므로
awardBenefit(player)
return
end
checkSubscriptionStatus(player)
end
local function onUserSubscriptionStatusChanged(player: Player, subscriptionId: string)
if subscriptionId == SUBSCRIPTION_ID then
checkSubscriptionStatus(player)
end
end
local function onPromptGamePassPurchaseFinished(player: Player, purchasedPassID: number, purchaseSuccess: boolean)
if purchaseSuccess and purchasedPassID == LEGACY_GAME_PASS_ID then
awardBenefit(player)
end
end
Players.PlayerAdded:Connect(onPlayerAdded)
Players.UserSubscriptionStatusChanged:Connect(onUserSubscriptionStatusChanged)
-- 패스가 여전히 판매 중인 경우 구매한 패스를 계속 청취합니다
MarketplaceService.PromptGamePassPurchaseFinished:Connect(onPromptGamePassPurchaseFinished)

구독 구매 프로세스 유도

사용자는 게임 상세 페이지의 상점 탭에서 직접 구독을 구매할 수 있지만, 게임 내에서도 구독을 구매할 수 있는 방법을 추가해야 합니다.

구독 구매를 유도할 때, UserSubscriptionStatusChanged 이벤트가 플레이어가 이미 구독을 소유하고 있을 경우 발생하여, 플레이어가 게임에 이미 있는 동안 게임 상세 페이지의 상점 탭에서 구독을 구매하는 경우를 처리하는 데 도움이 됩니다.

클라이언트에서 구독 구매를 유도할 수 있지만, 사용자가 이미 구독을 가지고 있는지 확인하는 GetUserSubscriptionStatusAsync는 서버에서 수행해야 합니다.

클라이언트가 구독 상태를 요청하는 데 사용할 수 있는 RemoteFunction을 생성하는 코드 샘플은 다음과 같습니다:


-- 이 코드는 서버에서 실행되어야 합니다
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- 클라이언트가 구독 상태를 요청하는 데 사용할 수 있는 RemoteFunction 생성
local getSubscriptionStatusRemote = Instance.new("RemoteFunction")
getSubscriptionStatusRemote.Name = "GetSubscriptionStatus"
getSubscriptionStatusRemote.Parent = ReplicatedStorage
getSubscriptionStatusRemote.OnServerInvoke = function(player: Player, subscriptionId: string)
assert(typeof(subscriptionId) == "string")
return MarketplaceService:GetUserSubscriptionStatusAsync(player, subscriptionId)
end

-- 이 코드는 클라이언트에서 실행되어야 합니다
local MarketplaceService = game:GetService("MarketplaceService")
local Players = game:GetService("Players")
local SUBSCRIPTION_ID = "EXP-11111111" -- 귀하의 구독 ID로 교체하십시오
local getSubscriptionStatusRemote = ReplicatedStorage:WaitForChild("GetSubscriptionStatus")
local purchaseSubscriptionButton = script.Parent.PromptPurchaseSubscription -- 귀하의 버튼으로 교체하십시오
local function playerHasSubscription()
-- 구독이 패스를 교체하고 있다면, 여기서 패스가 소유되었는지도 체크해야 합니다
local success, result = pcall(function()
return getSubscriptionStatusRemote:InvokeServer(SUBSCRIPTION_ID)
end)
if not success then
print(`구독 상태를 가져오는 중 오류 발생: {result}`)
return
end
return result.IsSubscribed
end
-- 플레이어가 이미 구독을 가지고 있는 경우 버튼을 숨깁니다
local function hideButtonIfPlayerHasSubscription()
if playerHasSubscription() then
purchaseSubscriptionButton.Visible = false
end
end
local function onPromptSubscriptionPurchaseFinished(player: Player, subscriptionId: string, didTryPurchasing: boolean)
if didTryPurchasing then
-- 구독이 등록되는 데 시간이 걸릴 수 있으므로, 구매가 완료되었는지를 10초 후에 확인합니다.
-- 그리고 완료되었으면 버튼을 숨깁니다.
task.delay(10, hideButtonIfPlayerHasSubscription)
end
end
-- 플레이어가 이미 구독을 가지고 있다면 버튼을 전혀 표시하고 싶지 않습니다.
hideButtonIfPlayerHasSubscription()
purchaseSubscriptionButton.Activated:Connect(function()
MarketplaceService:PromptSubscriptionPurchase(Players.LocalPlayer, SUBSCRIPTION_ID)
-- 플레이어가 이미 구독을 가지고 있다면 버튼을 숨깁니다.
hideButtonIfPlayerHasSubscription()
end)
MarketplaceService.PromptSubscriptionPurchaseFinished:Connect(onPromptSubscriptionPurchaseFinished)

기타 관련 함수

MarketplaceService에서 사용할 수 있는 기타 관련 함수는 다음과 같습니다:

구독으로 수익 얻기

현지 통화로 가격이 책정된 구독의 경우, 선택한 기본 플랫폼 가격에 따라 로벅스를 US $0.01 에서 1 로벅스의 비율로 획득합니다. 첫 달에는 **구독 금액의 70%**를 받고, **두 번째 달부터는 100%**를 받습니다. 이 수익 분배는 모든 플랫폼에서 일관됩니다.

예를 들어, 월별 구독 가격이 USD $5일 경우:

  • 첫 달: 350 로벅스(500 * 0.7 = 350)를 얻습니다.
  • 두 번째 달부터: 500 로벅스의 전체 금액(500 * 1.0 = 500)을 계속 얻습니다.

로벅스로 가격이 책정된 구독의 경우, 매월 **구독 금액의 70%**를 얻습니다. 이 수익 분배는 모든 플랫폼에서 일관됩니다.

예를 들어, 월별 구독 가격이 500 로벅스인 경우:

  • 첫 달: 350 로벅스(500 * 0.7 = 350)를 얻습니다.
  • 두 번째 달부터: 350 로벅스(500 * 0.7 = 350)를 계속 얻습니다.

현지 통화로 판매된 구독에서 얻는 수익은 30일 보류 기간의 적용을 받으며, 구독의 전체 기간이 종료된 후 로벅스 잔고에 추가됩니다.

로벅스로 판매된 구독의 수익은 패스 및 개발자 제품과 동일한 보류 기간, 즉 약 5일의 보류 기간을 따릅니다.

환불

현지 통화로 구독한 경우, 사용자가 은행이나 앱 스토어를 통해 30일 보류 기간 내에 환불을 요청할 경우, 보류가 취소되고 해당 거래에 대한 지급액을 받을 수 없습니다.

보류 기간 외에 받은 환불은 환불된 거래의 지급 금액이 로벅스 잔고에서 차감됩니다. 귀하의 게임이 그룹에 소속되어 있고 해당 그룹의 잔고가 차감할 금액보다 적을 경우, 나머지 금액은 그룹 소유자의 로벅스 잔고에서 차감됩니다.

사용자가 활성 구독을 취소하거나 갱신하지 않는 경우, 자동으로 환불되지 않습니다. 사용자는 수동으로 환불 요청을 해야 하며, 이는 사례별로 처리됩니다. 사용자 구독 환불 프로세스에 대한 자세한 내용은 도움 센터를 참조하십시오.

지급액

구독 지급액은 로벅스 잔고내 거래에서 확인할 수 있습니다.

구독그룹 구독 지급액은 입금된 로벅스 항목 아래에 표시되며, 환불은 지출된 로벅스 아래 지급 환불로 그룹화됩니다. 구독 및 그룹 구독 하위 페이지에서는 각각의 카테고리에 대한 추가 정보를 제공합니다.

개별 사용자에 대한 환불 정보를 보려면 GetUserSubscriptionPaymentHistoryAsync를 사용하십시오.

구독 분석

구독 분석은 개별 구독의 성공을 평가하고, 트렌드를 식별하며, 잠재적인 미래 수익을 예측하는 데 도움을 줍니다. 구독은 최초 활성화 이후 구독 분석 페이지에 추가되며, 비활성화되거나 삭제되더라도 제거되지 않습니다. 미리 만들어진 분석은 크리에이터 대시보드에서 접근할 수 있으며, 웹훅을 사용하여 실시간으로 구독 업데이트를 캡처할 수도 있습니다.

크리에이터 대시보드를 통한 분석

크리에이터 대시보드에서 구독 분석에 액세스하려면:

  1. 크리에이터 대시보드내 창작물 페이지로 이동하여 게임을 선택합니다.
  2. 수익화구독으로 이동합니다.
  3. 분석 탭을 선택합니다.

구독 분석은 다음 지표를 추적합니다:

  • 구독: 게임 내 활성 구독의 총 수.
  • 추정 수익: 수수료 이후 게임에서 얻은 순수익. 환불 정보는 포함되어 있지 않습니다.
  • 구독자 분포: 다양한 유형의 구독자.
    • 신규: 첫 구독자에 의한 구독 구매 수.
    • 갱신: 이전 기간에 구매한 갱신 구독 수.
    • 부활: 이전에 취소한 사용자에 의해 구매한 신규 구독 수.
  • 취소: 갱신되지 않은 구독 수. 사용자 취소, 제작자에 의한 구독 비활성화 등의 모든 취소를 포함합니다.
    • 취소는 환불과 다릅니다. 취소된 구독은 더 이상 갱신되지 않지만 청구 주기 동안은 전액 지불되며, 환불은 지불된 구독 금액을 사용자에게 반환합니다.
  • 플랫폼별 구독: 각 플랫폼에서 구매된 구독 수.
  • 플랫폼 수익: 각 플랫폼에서 구매된 구독을 통해 얻은 순수익.

이 정보는 트렌드 탭의 날짜 범위에 따라 차트 형태로 표시되며, 이력 탭 아래의 전체 제공 구독 목록으로 표시됩니다.

웹훅을 통한 분석

Cloud API 웹훅 기능은 취소, 구매, 환불 및 갱신의 네 가지 구독 이벤트에 대한 트리거를 포함합니다. 이러한 알림은 즉시 발생하므로, 실시간으로 반응하거나 사용자 지정 분석을 생성할 수 있습니다. 웹훅 설정 방법에 대한 자세한 내용은 웹훅 알림을 참조하십시오.

©2026 Roblox Corporation. Roblox 및 Roblox 로고, 'Powering Imagination'은 미국 및 기타 국가 내 당사의 등록 및 미등록 상표입니다.