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