Saving & Loading Data
๊ฐ์
DataStore๋ฅผ ํ์ฉํ๋ฉด ํ๋ ์ด์ด์ ๋ ๋ฒจ, ๊ฒฝํ์น, ๋ณด์ ๊ณจ๋ ๋ฑ ํต์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ๋ถ๋ฌ์ฌ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ํ๋ ์ด์ด์ ์งํ ์ํ๋ฅผ ์ง์์ ์ผ๋ก ์ ์งํ๋ฉฐ, RPG์ ๊ฐ์ ์ก์ฑ ์์๊ฐ ํฌํจ๋ ๊ฒ์์ ์ ์ํ ์ ์์ต๋๋ค.
์ฌ์ฉ ๋ฐฉ๋ฒ
์ง์๋๋ ๋ฐ์ดํฐ ํ์
number
O
string
O
bool
O
table
O
object
์ง์๋์ง ์์ต๋๋ค.
ํจ์
์ง์๋์ง ์์ต๋๋ค.
๊ธฐ๋ณธ ๊ตฌ์กฐ
DataStoreService์ GetDataStore์ ์ฌ์ฉํ์ฌ ์ง์ ๋ ์ด๋ฆ์ DataStore ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ผ๋ฉฐ, DataStore ๊ฐ์ฒด์ ํค-๊ฐ(Key-Value) ํ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ฑฐ๋ ๋ถ๋ฌ์ฌ ์ ์์ต๋๋ค.
Key (ํค): ๋ฐ์ดํฐ๋ฅผ ์๋ณํ๋ ๊ณ ์ ํ ์ด๋ฆ (์: PlayerGold)
Value (๊ฐ): ์ ์ฅํ ๋ฐ์ดํฐ (์: 1000)
์ถ๊ฐ์ ์ผ๋ก ํด๋น ํค์ ๋ถ๊ฐ์ ์ธ ์ ๋ณด๋ฅผ ์ ์ฅํ ์๋ ์์ต๋๋ค.
UserIds (๋ฐฐ์ด): ๋ฐ์ดํฐ์ ๊ด๋ จํ UserId ๋ฆฌ์คํธ
Metadata (ํ ์ด๋ธ) : ๋ถ๊ฐ์ ์ผ๋ก ์ ์ฅํ ๋ฉํ๋ฐ์ดํฐ ์ ๋ณด
์ ๋ ๋ถ๊ฐ์ ๋ณด๋ DataStoreKeyInfo๋ฅผ ํตํด ์ฝ์ด์ฌ ์ ์์ต๋๋ค.
GetDataStore(name)
์ด๋ฆ์ ํด๋นํ๋ Datastore ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ค๊ธฐ
GetAsync(key)
Datastore ๊ฐ์ฒด์์ ํค์ ํด๋นํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๊ธฐ
SetAsync(key, value, userIds(*optional), datastoreSetOption(*optional) )
Datastore ๊ฐ์ฒด์์ ํค์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ (๋ฎ์ด์ฐ๊ธฐ)
IncrementAsync(key, delta, userIds(*optional), datastoreSetOption(*optional))
Datastore ๊ฐ์ฒด์์ ํค์ ํด๋นํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฆ๊ฐ (number ํ์ ์ ๋ํด์๋ง ๋์)
UpdateAsync(key, callback)
Datastore ๊ฐ์ฒด์์ ํค์ ํด๋นํ๋ ๋ฐ์ดํฐ๋ฅผ callback์ ํตํด ์ ๋ฐ์ดํธ
RemoveAsync(key)
Datastore ๊ฐ์ฒด์์ ํค์ ํด๋นํ๋ ๋ฐ์ดํฐ๋ฅผ ์ญ์
๋ฐ์ดํฐ ์คํ ์ด ๊ฐ์ ธ์ค๊ธฐ
์ ์ฅํ๊ธฐ
๋ถ๋ฌ์ค๊ธฐ
์
๋ฐ์ดํธ ํ๊ธฐ
DataStore๋ฅผ ์ด์ฉํด ํ๋ ์ด์ด ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋, ๋จ์ํ GetAsync์ SetAsync๋ง ์ฌ์ฉํ ๊ฒฝ์ฐ ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ๋์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ธ ๋ ๊ฒฝ์ ์ํ(race condition)๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ์ด๋ก ์ธํด ํ ์ฌ์ฉ์๊ฐ ์ ์ฅํ ๊ฐ์ด ๋ค๋ฅธ ์ฌ์ฉ์์ ์ ์ฅ ์์ฒญ์ ์ํด ๋ฎ์ด์จ์ง๊ฑฐ๋, ์ผ๋ถ ๋ฐ์ดํฐ๊ฐ ์์ค๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด GetAsync๋ก ๊ฐ์ ๊ฐ์ ธ์ ์ฒ๋ฆฌํ๋ ๋์ค, ๋ค๋ฅธ ์ด๋ฒคํธ๋ ์๋ฒ์์ SetAsync๊ฐ ํธ์ถ๋์ด ๊ฐ์ด ์ ๋ฐ์ดํธ ๋๋ ๊ฒฝ์ฐ, ์ฒ๋ฆฌ์ค์ ์ ๋ฐ์ดํธ ๋์๋์ง ์ฌ๋ถ๋ฅผ ํ์ธ ํ ์ ์์ด ๊ณผ๊ฑฐ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ํ์ฌ ๊ณ์ฐ๋ ๊ฐ์ด ๋ฎ์ด์จ์ง๋ฉด์ ์ง์ ์ ์ ๋ฐ์ดํธ ๋ ๋ด์ฉ์ด ๋ ๋ผ๊ฐ๊ฒ ๋ฉ๋๋ค.
์ด๋ฌํ ๊ฒฝ์ ์ํ๋ฅผ ๋ฐฉ์งํ๊ณ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด์๋ ๋ณด๋ค ์์ ํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ฐฉ์์ด ํ์ํฉ๋๋ค.
IncrementAsync
์ซ์ ๊ฐ์ ๋จ์ํ ์ฆ๊ฐ(ํน์ ๊ฐ์)์ํค๋ ๊ฒฝ์ฐ์๋ IncrementAsync๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. IncrementAsync๋ ๋ด๋ถ์ ์ผ๋ก ์์์ ์ฐ์ฐ์ ์ง์ํ์ฌ, ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ๋์์ ๊ฐ์ ์ฆ๊ฐ์์ผ๋ ๋ฐ์ดํฐ ์ถฉ๋ ์์ด ์์ ํ๊ฒ ๋์ ํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ฝ์ธ, ๊ฒฝํ์น, ์ ์ ๋ฑ ๋จ์ ๋์ ์ด ํ์ํ number ๋ฐ์ดํฐ์๋ IncrementAsync๊ฐ ๊ฐ์ฅ ๊ฐ๋จํ๊ณ ํจ์จ์ ์ธ ์ ํ์ ๋๋ค.
UpdateAsync
ํ์ง๋ง IncrementAsync๋ number ํํ ๋ฐ์ดํฐ์๋ง ์ ํจํ๊ณ ๋จ์ํ ์ฆ๊ฐ ์ฐ์ฐ์ธ์ ๊ณฑ์ , ๋๋์ , ๊ธฐํ ๋ถ๊ธฐ ์ฒ๋ฆฌ๋ฑ ๋ณต์กํ ํํ์ ๋ฐ์ดํฐ ์ ๋ฐ์ดํธ๋ฅผ ์ ๊ณตํ์ง ๋ชปํฉ๋๋ค.
UpdateAsync ํจ์๋ ๋ฐ์ดํฐ์คํ ์ด์์ ๊ฐ์ ์ฝ๊ณ , ๋ณ๊ฒฝํ๊ณ , ๋ค์ ์ ์ฅํ๋ ๊ณผ์ ์ ์์์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋๋ก ์ค๊ณ๋์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋์ ์ ๊ทผ ์ํฉ์์๋ ๋ฐ์ดํฐ ์์ค ์์ด ์์ ์ ์ผ๋ก ๊ฐ์ ๊ฐฑ์ ํ ์ ์์ต๋๋ค.
UpdateAsync๋ ์ฝ๋ฐฑ(callback) ํจ์๋ฅผ ์ธ์๋ก ๋ฐ์, ํ์ฌ ์ ์ฅ๋ ๊ฐ์ ์ฝ๋ฐฑ์ ์ ๋ฌํ ํ ์ฝ๋ฐฑ์ด ๋ฐํํ๋ ๊ฐ์ ๋ฐ์ดํฐ์คํ ์ด์ ์ ์ฅํฉ๋๋ค. ๋ง์ฝ ๋์์ ์ฌ๋ฌ ์์ฒญ์ด ๋ค์ด์ ๋ฐ์ดํฐ ์ถฉ๋์ด ๋ฐ์ํ๋ฉด, UpdateAsync๋ ์๋์ผ๋ก ์ต์ ๊ฐ์ ๋ค์ ๋ถ๋ฌ์ ์ฝ๋ฐฑ์ ์ฌ์คํํ์ฌ ์ถฉ๋์ ํด๊ฒฐํฉ๋๋ค. ์ด ๊ณผ์ ์ ๋ฐ์ดํฐ๊ฐ ์์ ํ๊ฒ ๊ฐฑ์ ๋ ๋๊น์ง ๋ฐ๋ณต๋ฉ๋๋ค.
์ฝ๋ฐฑ ํจ์๋ ๋ฐ์ดํฐ ํธ๋์ญ์ ์ ์์ ์ฑ๊ณผ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ๋ ACID(Aromicity, Consistency, Isolation, Duration) ์ฒ๋ฆฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ฉฐ, ๋ฐํ๊ฐ์ ๋ฐ๋ผ ์ ๋ฐ์ดํธ์ ์ค์ ์ ์ฉ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ฝ๋ฐฑ ํจ์์์ nil์ ๋ฐํํ๋ฉด ํด๋น ์ ๋ฐ์ดํธ๋ ์ทจ์๋ฉ๋๋ค. ์ด๋ฅผ ํ์ฉํด ์กฐ๊ฑด๋ถ ๋ฐ์ดํฐ ์ ๋ฐ์ดํธ, ๋ฌด๊ฒฐ์ฑ ๊ฒ์ฌ ๋ฑ ๋ค์ํ ๋ก์ง์ ๊ตฌํํ ์ ์์ต๋๋ค.
๋ฐ์ดํฐ ์ญ์ ํ๊ธฐ
RemoveAsync๋ฅผ ์ด์ฉํ๋ฉด DataStore์ ์ ์ฅ๋ ๊ฐ์ ์ญ์ ํ ์ ์์ต๋๋ค.
์ ์ฒด ์ฝ๋ ์์
๋ค์ ์ฝ๋๋ ํ๋ ์ด์ด๊ฐ ๊ฒ์์ ์ ์ฅํ ๋, ์๋ฒ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๊ณ , ์ ์ฅ๋ ๊ฐ์ด ์์ผ๋ฉด ์ด๊ธฐ๊ฐ์ ์ค์ ํ ํ, ํด๋น ๊ฐ์ ํ๋ ์ด์ด์ Attribute๋ก ํ ๋นํฉ๋๋ค.
์ดํ, ์ ์ฅ ํจ์๊ฐ ํธ์ถ๋๋ฉด, Attribute์ ์ค์ ๋ ํ์ฌ ๊ฐ์ ์๋ฒ์ ์ ์ฅํฉ๋๋ค.
LoadPlayerDataWhenEnter(player)
ํ๋ ์ด์ด๊ฐ ๊ฒ์์ ์ ์ํ๋ฉด ํธ์ถ\
DataManager:LoadPlayerData(player)
์๋ฒ์์ ์ ์ฅ๋ ํ๋ ์ด์ด ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ด(GetAsync)
์ ์ฅ๋ ๊ฐ์ด ์์ผ๋ฉด ์ด๊ธฐ๊ฐ(InitValue)์ ์ค์ ํ ์๋ฒ์ ์ ์ฅ
๋ถ๋ฌ์จ ๊ฐ์ ํ๋ ์ด์ด์ Attribute๋ก ์ค์ \
DataManager:SavePlayerData(player)
ํ๋ ์ด์ด์ Attribute ๊ฐ์ ์ฝ๊ณ ์๋ฒ์ ์ ์ฅ(SetAsync)
PlayerRemoving ์ด๋ฒคํธ๋ฅผ ํตํด ํ๋ ์ด์ด๊ฐ ๊ฒ์์ ๋ ๋ ๋ ์๋ ์ ์ฅ ์ฒ๋ฆฌ
ํ์ฉ ์์
DataStore์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ฑฐ๋ ๋ถ๋ฌ์ฌ ๋ Key ๊ฐ์ ์ด๋ป๊ฒ ์ค์ ํ๋๋์ ๋ฐ๋ผ ๊ฐ๋ณ ์ ์ ๋ฐ์ดํฐ ๋ฟ๋ง ์๋๋ผ ๊ฒ์ ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ ์๋ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, Key ๊ฐ์ Player.Name ๋์ RaceGameLeaderBoard์ ๊ฐ์ ํ์์ผ๋ก ์ค์ ํ๋ฉด, ํน์ ํ๋ ์ด์ด์ ๋ฐ์ดํฐ๊ฐ ์๋ ์๋ฒ์ ์ ์ฅ๋ ๋ญํน ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
์ด๋ฌํ ๋ฐฉ์์ผ๋ก, ๋ฆฌ๋๋ณด๋, ์ด๋ฒคํธ ์งํ ์ํ, ์๋ฒ ์ค์ ๋ฑ๊ณผ ๊ฐ์ ๊ฒ์ ์ ์ญ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ๋ถ๋ฌ์ฌ ์ ์์ต๋๋ค.
ํผ๋ธ๋ฆฌ์ ๋ฐ ํ
์คํธ ํ๊ฒฝ์ ๋์ ์ฐจ์ด
ํผ๋ธ๋ฆฌ์ ํ ๋ชจ๋ฐ์ผ ํ๊ฒฝ์์๋ ์ค์ ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ๋ถ๋ฌ์ต๋๋ค. ๋ฐ๋ฉด, ์คํ๋์ค ํ ์คํธ ํ๊ฒฝ์์๋ ๋ฐ์ดํฐ๋ฅผ ๋ก์ปฌ์ ์์ ์ ์ฅํ๋ฉฐ, ์คํ๋์ค ์ข ๋ฃ ์ ํด๋น ๋ฐ์ดํฐ๋ ์๋์ผ๋ก ์ญ์ ๋ฉ๋๋ค.
์ฃผ์ ์ฌํญ
๋ฐ์ดํฐ ๋ก๋ฉ์ด ์๋ฃ๋๊ธฐ ์ ์ ํ๋ ์ด์ด๊ฐ ๊ฒ์์ ์งํํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์์ผ๋ฏ๋ก, ๋ก๋ฉ์ด ์๋ฃ๋ ๋๊น์ง ๋ก๋ฉ UI๋ฅผ ํ์ํ์ธ์.
์ ์ฅํ ๋ฐ์ดํฐ๋ ๊ฐ๊ธ์ ์๊ณ ๋จ์ํ ๊ตฌ์กฐ๋ก ์ค๊ณํ์ธ์.
๊ณผ๋ํ ์์ฒญ์ ๋ฐ์ดํฐ ์ ์ฅ ์คํจ๋ฅผ ์ ๋ฐํ ์ ์์ผ๋ฏ๋ก, ์งง์ ์๊ฐ ๋ด ๋ฐ๋ณต ์ ์ฅ์ ๋ฐฉ์งํ์ธ์.
API ํธ์ถ์ ๋ถ๋น 150ํ๋ฅผ ์ด๊ณผํ ์ ์์ต๋๋ค. ์ด๊ณผ ์์ฒญ์ ์๋ฒ์ ์ ํ์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
๊ฐ์์ค๋ฌ์ด ๊ฒ์ ์ข ๋ฃ๋ ์๋ฒ ์ถฉ๋๋ก ์ธํด ๋ฐ์ดํฐ๊ฐ ์์ค๋ ์ ์์ผ๋ฏ๋ก ์ฃผ๊ธฐ์ ์ผ๋ก ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋๋ก ๊ตฌํํ์ธ์.
์ ์ฅ ๋๋ ๋ถ๋ฌ์ค๊ธฐ๊ฐ ์คํจํ ์ ์์ผ๋ฏ๋ก, pcall์ ์ฌ์ฉํ์ฌ ์ค๋ฅ๋ฅผ ๋ฐฉ์งํ๊ณ ์ฌ์๋ ๋ก์ง์ ์ถ๊ฐํ์ธ์.
Last updated