본문 바로가기
■ 로블록스 개발 노트/개발일지

[로블록스]#9 - 데이터 저장

by Popbox 2025. 12. 30.

[로블록스]#9 - 데이터 저장

게임을 껐다가 다시 켰다.
그런데 모든 것이 초기화된다면?
이번 글에서는 로블록스에서 데이터를 저장하고 불러오는 핵심 시스템, DataStore를 Unity 개발자 관점에서 정리해본다.


 

 

1. 왜 DataStore가 중요한가

로블록스 게임은 기본적으로 온라인 게임이다.

그래서 다음 데이터는 반드시 서버에서 저장되어야 한다.

  • 재화(Gold)
  • 레벨
  • 아이템 보유 여부
  • 스킨 / 업적

LocalScript에서 저장한 데이터는
게임을 나가면 전부 사라진다.

 

 

 


2. DataStoreService 기본 개념

로블록스의 저장 시스템은 DataStoreService가 담당한다.

local DataStoreService = game:GetService("DataStoreService")
local PlayerDataStore = DataStoreService:GetDataStore("PlayerData")
    

Unity로 치면, 백 엔드 서비스 PlayFab / Firebase의 아주 간단한 버전이라고 생각하면 된다.

 

 

 


3. 데이터 불러오기 (PlayerAdded)

플레이어가 게임에 접속하면 서버에서 데이터를 불러온다.

game.Players.PlayerAdded:Connect(function(player)
    local data
    local success, err = pcall(function()
        data = PlayerDataStore:GetAsync(player.UserId)
    end)

    if success and data then
        player.leaderstats.Gold.Value = data.Gold
    else
        player.leaderstats.Gold.Value = 0
    end
end)
    

pcall을 반드시 사용하는 이유는 저장/불러오기가 실패할 수 있기 때문이다.

> Roblox 공식 문서에서도 DataStore는 무조건 pcall 사용 권장

> Unity에서 try-catch문법과 같다.

 

 

Unity 개발자 기준 정리

개념 C# Lua
예외 처리 try–catch pcall
에러 객체 Exception string
다중 반환 불가 가능
성능 비교적 무거움 가벼움

 

 

 


4. 데이터 저장하기 (PlayerRemoving)

플레이어가 나갈 때 데이터를 저장한다.

game.Players.PlayerRemoving:Connect(function(player)
    local data = {
        Gold = player.leaderstats.Gold.Value
    }

    local success, err = pcall(function()
        PlayerDataStore:SetAsync(player.UserId, data)
    end)
end)
    

서버 종료 시(점검 등)를 대비해 BindToClose도 함께 사용해야 한다.

 

Unity Roblox
OnApplicationQuit() BindToClose()
에디터/빌드 종료 서버 종료
로컬 앱 기준 멀티플레이 서버 기준

 

 

 


5. 왜 SetAsync만 쓰면 위험한가

같은 계정이 여러 서버에서 동시에 저장이 발생하면 데이터가 덮어써질 수 있다.

>가장 마지막 저장만 살아남음

>중간 진행/보상 증발 가능성

실전에서는
UpdateAsync가 기본이다.

PlayerDataStore:UpdateAsync(player.UserId, function(oldData)
    oldData = oldData or {}
    oldData.Gold = player.leaderstats.Gold.Value
    return oldData
end)
    

 

 

 

항목 SetAsync UpdateAsync
덮어쓰기 무조건 불가
동시성 안전 불가 가능
부분 수정 불가 가능
재시도 불가 가능
실전 권장 권장 안함 매우 권장

 

 

 


6. DataStore 사용 시 반드시 지켜야 할 규칙

  • 저장은 서버 Script에서만
  • pcall로 실패 대비
  • 빈번한 저장 금지
  • 데이터 구조는 테이블로
  • UpdateAsync 우선 사용

DataStore는 편하지만, 무제한이 아니다.

 

 

 


7. Unity 개발자가 가장 많이 하는 실수

  • LocalScript에서 저장 시도
  • pcall을 생략
  • 접속 중 수시 저장
  • 숫자만 단일로 저장

DataStore 호출은, “로그아웃 시 한 번”, “중요 이벤트 후” 정도가 적당하다.

 

 

 


8. 다음 글 예고

다음 글에서는 게임 구조 설계, 즉 로비 → 게임 → 보상 흐름을 다룰 예정이다.

이제 “만드는 법”이 아니라
“어떻게 굴릴 것인가”


반응형

댓글