์๋ ํด๋ผ์ด์ธํธ ์ฌ์ค์ ๋ฐ์ดํฐ ๋ณต๊ตฌ - Node.js SDK
์ด ํ์ด์ง์ ๋ด์ฉ
์ด ํ์ด์ง์์๋ ์๋ ๋ณต๊ตฌ ํด๋ผ์ด์ธํธ ์ฌ์ค์ ๋ชจ๋๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ผ์ด์ธํธ ์ฌ์ค์ ํ ๋๊ธฐํ๋์ง ์์ ์์ญ ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ๋ณต๊ตฌํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ค๋ช ํฉ๋๋ค.
์๋ ๋ณต๊ตฌ์๋ ์๋นํ ์์ ์ฝ๋, ์คํค๋ง ์๋ณด ๋ฐ ์ฌ์ฉ์ ์ง์ ์ถฉ๋ ํด๊ฒฐ ๋ก์ง์ด ํ์ํฉ๋๋ค. ๋๊ธฐํ๋์ง ์์ ๋ฐ์ดํฐ๋ฅผ ์์ ์ ์๊ณ ๋ค๋ฅธ ์๋ ํด๋ผ์ด์ธํธ ์ฌ์ค์ ๋ฐฉ๋ฒ์ด ์ฌ์ฉ ์ฌ๋ก์ ๋ง์ง ์๋ ๊ฒฝ์ฐ์๋ง ๋๊ธฐํ๋์ง ์์ realm ๋ฐ์ดํฐ์ ์๋ ๋ณต๊ตฌ๋ฅผ ์ํํด์ผ ํฉ๋๋ค.
์ฌ์ฉ ๊ฐ๋ฅํ ๋ค๋ฅธ ํด๋ผ์ด์ธํธ ์ฌ์ค์ ๋ชจ๋์ ๋ํ ์์ธํ ๋ด์ฉ์ ํด๋ผ์ด์ธํธ Realm ์ฌ์ค์ ์ ์ฐธ์กฐํ์ธ์.
์๋ ๋ณต๊ตฌ์ ์ธ๋ถ ์ฌํญ์ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์คํค๋ง ์ ๋ฐ๋ผ ํฌ๊ฒ ๋ฌ๋ผ์ง๋๋ค. ๊ทธ๋ฌ๋ ์๋ ๋ณต๊ตฌ์ ๋์์ด ๋ ์ ์๋ ๋ช ๊ฐ์ง ๊ธฐ์ ์ด ์์ต๋๋ค. ๊ฐ์ฒด ์ ๋ต๋ณ ๋ณ๊ฒฝ ์ฌํญ ์ถ์ ์น์ ์์๋ ํด๋ผ์ด์ธํธ ์ฌ์ค์ ์ค์ ๋๊ธฐํ๋์ง ์์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ณต๊ตฌ ํ๋ ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ ๋ณด์ฌ ์ค๋๋ค.
๊ฒฝ๊ณ
ํ๋ก๋์ ํ๊ฒฝ์์ ์์์ ์ธ ์คํค๋ง ๋ณ๊ฒฝ ๋ฐฉ์ง
์์์ ์ธ ์คํค๋ง ๋ณ๊ฒฝ ํ ๋๊ธฐํ๋์ง ์์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋ณต๊ตฌํ ๊ฒ์ผ๋ก ๊ธฐ๋ํ์ง ๋ง์ธ์. ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ๋ณด์กดํ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ์์์ ์ธ ์คํค๋ง ๋ณ๊ฒฝ์ ์ ํ ์ํํ์ง ์๋ ๊ฒ์ ๋๋ค.
์ค์
์์์ ์ธ ์คํค๋ง ๋ณ๊ฒฝ์๋ ์ฑ ์คํค๋ง ์ ๋ฐ์ดํธ๊ฐ ํ์ํฉ๋๋ค.
์์์ ์ธ ์คํค๋ง ๋ณ๊ฒฝ ํ ๋ค์์ ์ํํฉ๋๋ค:
๋ชจ๋ ํด๋ผ์ด์ธํธ๋ ํด๋ผ์ด์ธํธ ์ฌ์ค์ ์ ์ํํด์ผ ํฉ๋๋ค.
์์์ ์ธ ์คํค๋ง ๋ณ๊ฒฝ์ ์ํฅ์ ๋ฐ๋ ํด๋ผ์ด์ธํธ ๋ชจ๋ธ์ ์ ๋ฐ์ดํธํด์ผ ํฉ๋๋ค.
๊ฐ์ฒด ์ ๋ต๋ณ ๋ณ๊ฒฝ ์ฌํญ ์ถ์
๊ฐ์ฒด์ ๋ฐ๋ฅธ ํด๋ผ์ด์ธํธ ์ฌ์ค์ ๋ฐ์ดํฐ ๋ณต๊ตฌ์ ๋ณ๊ฒฝ ์ฌํญ ์ถ์ ์ ์ฌ์ฉํ๋ฉด ์ด๋ฏธ Realm ํ์ผ์ ๊ธฐ๋ก๋์์ง๋ง ์์ง ๋ฐฑ์๋์ ๋๊ธฐํ๋์ง ์์ ๋ฐ์ดํฐ๋ฅผ ๋ณต๊ตฌํ ์ ์์ต๋๋ค.
์ด ์ ๋ต์์๋ ๊ฐ Realm ๊ฐ์ฒด ๋ชจ๋ธ์ "๋ง์ง๋ง ์ ๋ฐ์ดํธ ์๊ฐ"์ ์ถ๊ฐํ์ฌ ๊ฐ ๊ฐ์ฒด๊ฐ ๋ง์ง๋ง์ผ๋ก ๋ณ๊ฒฝ๋ ์๊ฐ์ ์ถ์ ํฉ๋๋ค. ์์ญ์ด ์ธ์ ์ํ๋ฅผ ๋ฐฑ์๋์ ๋ง์ง๋ง์ผ๋ก ์ ๋ก๋ํ๋์ง ํ์ธํ๊ธฐ ์ํด ๊ด์ฐฐํ ๊ฒ์ ๋๋ค.
๋ฐฑ์๋๊ฐ ํด๋ผ์ด์ธํธ ์ฌ์ค์ ์ ํธ์ถํ๋ฉด ๋ฐฑ์๋์์ ๋ง์ง๋ง ๋๊ธฐํ ์ดํ ์ญ์ , ์์ฑ ๋๋ ์ ๋ฐ์ดํธ๋ ๊ฐ์ฒด๋ฅผ ์ฐพ์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ฐฑ์ ์์ญ์์ ์ ์์ญ์ผ๋ก ํด๋น ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํฉ๋๋ค.
๋ค์ ๋จ๊ณ๋ ๋์ ์์ค์์ ํ๋ก์ธ์ค๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
ํด๋ผ์ด์ธํธ ์ฌ์ค์ ์ค๋ฅ: ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ฐฑ์๋์์ ํด๋ผ์ด์ธํธ ์ฌ์ค์ ์ค๋ฅ ์ฝ๋๋ฅผ ์์ ํฉ๋๋ค.
์ ๋ต ๊ตฌํ: SDK๊ฐ ์ ๋ต ๊ตฌํ์ ํธ์ถํฉ๋๋ค.
์์ญ์ ๋ชจ๋ ์ธ์คํด์ค ๋ซ๊ธฐ : ํด๋ผ์ด์ธํธ ์ฌ์ค์ ์ด ๋ฐ์ํ๋ ์์ญ์ ์ด๋ ค ์๋ ๋ชจ๋ ์ธ์คํด์ค๋ฅผ ๋ซ์ต๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ํคํ ์ฒ๋ก ์ธํด ์ด๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ด๋ ค์ด ๊ฒฝ์ฐ(์: ์ฑ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒด์ ๋ฆฌ์ค๋์์ ๋์์ ๋ง์ Realm ์ธ์คํด์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ) ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค์ ์์ํ๋ ๊ฒ์ด ๋ ์ฌ์ธ ์ ์์ต๋๋ค. ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก ๋๋ ๋ํ ์์์์ ์ฌ์ฉ์์ ๋ํ ์ง์ ์์ฒญ์ ํตํด ์ด ์์ ์ ์ํํ ์ ์์ต๋๋ค.
Realm ์ ๋ฐฑ์ ํ์ผ๋ก ์ด๋: Realm.App.Sync.initiateClientReset() ์ ์ ๋ฉ์๋. ์ด ๋ฉ์๋๋ ํด๋ผ์ด์ธํธ ์์ญ ํ์ผ์ ํ์ฌ ๋ณต์ฌ๋ณธ์ ๋ฐฑ์ ํ์ผ๋ก ์ด๋ํฉ๋๋ค.
์์ญ ์ ์ ์ธ์คํด์ค ์ด๊ธฐ : ์ผ๋ฐ์ ์ธ ๋๊ธฐํ ๊ตฌ์ฑ์ ์ฌ์ฉํ์ฌ ์์ญ์ ์ ์ธ์คํด์ค๋ฅผ ์ฝ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ๋ฌ ์์ญ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ฐฑ์ ํ์ผ ์ด๋ฆ์์ ํด๋ผ์ด์ธํธ ์ฌ์ค์ ์ด ๋ฐ์ํ ์์ญ์ ์๋ณํ ์ ์์ต๋๋ค.
๋ฐฑ์๋์์ ๋ชจ๋ Realm ๋ฐ์ดํฐ ๋ค์ด๋ก๋ : ๊ณ์ํ๊ธฐ ์ ์ Realm์ ์ ์ฒด ๋ฐ์ดํฐ ์ธํธ๋ฅผ ๋ค์ด๋ก๋ํฉ๋๋ค. ์ด๊ฒ์ด SyncConfiguration ๊ฐ์ฒด์ ๊ธฐ๋ณธ ๋์์ ๋๋ค.
์์ญ ๋ฐฑ์ ์ด๊ธฐ:
SyncConfiguration.error
์ฝ๋ฐฑ ํจ์์ ์ธ์๋ก ์ ๋ฌ๋error.config
๊ฐ์ฒด๋ฅผ ์ฌ์ฉํฉ๋๋ค.๋๊ธฐํ๋์ง ์์ ๋ณ๊ฒฝ ์ฌํญ ๋ง์ด๊ทธ๋ ์ด์ : ๋ณต๊ตฌํ ๋ฐ์ดํฐ์ ๋ํ ๋ฐฑ์ ์์ญ์ ์ฟผ๋ฆฌํฉ๋๋ค. ๊ทธ์ ๋ฐ๋ผ ์ ์์ญ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ , ์ญ์ ๋๋ ์ ๋ฐ์ดํธํฉ๋๋ค.
์์
์ด ์์์๋ ๊ฐ์ฒด๋ณ ๋ณ๊ฒฝ ์ฌํญ ์ถ์ ์๋ ํด๋ผ์ด์ธํธ ์ฌ์ค์ ๋ฐ์ดํฐ ๋ณต๊ตฌ ์ ๋ต์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ ์ค๋๋ค.
์ฐธ๊ณ
์ด ์์ ์ ์ ํ ์ฌํญ
์ด ์์ ๋ ๋จ์ผ Realm ๊ฐ์ฒด ์ ํ์ ํฌํจํ๋ ๋จ์ผ Realm์ด ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์๋ง ์ ์ฉ๋ฉ๋๋ค. ๊ฐ ์ถ๊ฐ ๊ฐ์ฒด ์ ํ์ ๋ํด ๋ณ๋์ Realm์์ ๋๊ธฐํ ์ถ์ ์น์ ์ ์ค๋ช ๋ ๋๋ก ๋ค๋ฅธ ๋๊ธฐํ ๋ฆฌ์ค๋๋ฅผ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
์ด ์์ ์์๋ ๊ฐ ๊ฐ์ฒด ๊ฐ ๋ง์ง๋ง์ผ๋ก ์ ๋ฐ์ดํธ๋ ์๊ฐ์ ์ถ์ ํฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ฐฑ์ ์์ญ์ ๋ง์ง๋ง ๋๊ธฐํ์ ์ฑ๊ณตํ ํ ํ๋๊ฐ ์ ๋ฐ์ดํธ๋ ๊ฒฝ์ฐ ๋ณต๊ตฌ ์์ ์ ์ ์์ญ์ ์ ์ฒด ๊ฐ์ฒด๋ฅผ ๋ฎ์ด์๋๋ค. ์ด๋ก ์ธํด ๋ค๋ฅธ ํด๋ผ์ด์ธํธ๊ฐ ์ ๋ฐ์ดํธํ ํ๋๋ฅผ ์ด ํด๋ผ์ด์ธํธ์ ์ด์ ๋ฐ์ดํฐ๋ก ๋ฎ์ด์ธ ์ ์์ต๋๋ค. Realm ๊ฐ์ฒด์ ์ค์ํ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋ ํ๋๊ฐ ์ฌ๋ฌ ๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ ๋์ ๊ฐ ํ๋ ์ ๋ง์ง๋ง ์ ๋ฐ์ดํธ ์๊ฐ์ ์ถ์ ํ๊ณ ๊ฐ ํ๋๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ๋ณต๊ตฌํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋ฐ์ดํฐ ๋ณต๊ตฌ๋ฅผ ํตํด ์๋ ํด๋ผ์ด์ธํธ ์ฌ์ค์ ์ ์ํํ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋์ฒด ์ ๋ต ์น์ ์ ์ฐธ์กฐํ์ธ์.
์คํค๋ง์ ๋ง์ง๋ง ์ ๋ฐ์ดํธ ์๊ฐ ํฌํจ
Realm ๊ฐ์ฒด ์คํค๋ง์ ์ ์์ฑ์ ์ถ๊ฐํ์ฌ ๋ง์ง๋ง์ผ๋ก ์ ๋ฐ์ดํธ๋ ์๊ฐ์ ์ถ์ ํฉ๋๋ค. ์คํค๋ง๋ก Realm ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ฑฐ๋ ์ ๋ฐ์ดํธํ ๋๋ง๋ค ์ ๋ฐ์ดํธ ์๊ฐ๊ณผ ํจ๊ป ํ์์คํฌํ๋ฅผ ํฌํจํ์ธ์.
์ผ๋ฐ์ ์ผ๋ก Realm ๊ฐ์ฒด๊ฐ ๋ง์ง๋ง์ผ๋ก ์์ ๋ ์์ ์ ๊ฐ์งํ ์ ์๋ ๋ฐฉ๋ฒ์ ์์ต๋๋ค. ์ด๋ก ์ธํด ๋ฐฑ์๋์ ๋๊ธฐํ๋ ๋ณ๊ฒฝ ์ฌํญ์ ํ์ธํ๊ธฐ๊ฐ ์ด๋ ต์ต๋๋ค. Realm ๊ฐ์ฒด ๋ชจ๋ธ์ ํ์์คํฌํ lastUpdated
์ ์ถ๊ฐํ๊ณ ๋ณ๊ฒฝ์ด ๋ฐ์ํ ๋๋ง๋ค ํด๋น ํ์์คํฌํ๋ฅผ ํ์ฌ ์๊ฐ์ผ๋ก ์
๋ฐ์ดํธํ๋ฉด ๊ฐ์ฒด๊ฐ ๋ณ๊ฒฝ๋ ์์ ์ ์ถ์ ํ ์ ์์ต๋๋ค.
const DogSchema = { name: "Dog", properties: { name: "string", age: "int?", lastUpdated: "int", }, };
์๋ ํด๋ผ์ด์ธํธ ์ฌ์ค์ ์ ์ฌ์ฉํ๋๋ก Realm ๊ตฌ์ฑ
Realm์ SyncConfiguration ์์ clientReset
ํ๋ ๋ฅผ ์๋ ๋ชจ๋ ๋ก ์ค์ ํ๋ค ํ๊ณ error
์ฝ๋ฐฑ ํจ์๋ฅผ ํฌํจํฉ๋๋ค. ํด๋ผ์ด์ธํธ ์ฌ์ค์ ์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ์ฝ๋ฐฑ ์์ฑ ์น์
์์ ์ค๋ฅ ์ฝ๋ฐฑ ํจ์๋ฅผ ์ ์ํฉ๋๋ค.
const config = { schema: [DogSchema], sync: { user: app.currentUser, partitionValue: "MyPartitionValue", clientReset: { mode: "manual", }, error: handleSyncError, // callback function defined later }, };
๋ณ๋์ Realm์์ ๋๊ธฐํ ์ถ์
๊ฐ์ฒด๊ฐ ๋ณ๊ฒฝ๋ ์์ ์ ์๊ณ ์๋ค๋ ๊ฒ๋ง์ผ๋ก๋ ํด๋ผ์ด์ธํธ ์ฌ์ค์ ์ค์ ๋ฐ์ดํฐ๋ฅผ ๋ณต๊ตฌํ๋ ๋ฐ ์ถฉ๋ถํ์ง ์์ต๋๋ค. ๋ํ ์์ญ์ด ๋ง์ง๋ง์ผ๋ก ๋๊ธฐํ๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์๋ฃํ ์์ ์ ์์์ผ ํฉ๋๋ค. ์ด ๊ตฌํ ์์์์๋ ๋ณ๊ฒฝ ๋ฆฌ์ค๋์ ์์ ์ด๋ฃจ๋ LastSynced
๋ผ๋ ๋ณ๋์ ์์ญ์ ์๋ ์ฑ๊ธํค ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ์์ญ์ ๋๊ธฐํ๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋๋ ์์ ์ ๊ธฐ๋กํฉ๋๋ค.
LastSynced Realm์ ์ ์ํ์ฌ ์์ญ์ด ๋๊ธฐํ๋๋ ๊ฐ์ฅ ์ต๊ทผ ์๊ฐ์ ์ถ์ ํฉ๋๋ค.
const LastSyncedSchema = { name: "LastSynced", properties: { realmTracked: "string", timestamp: "int?", }, primaryKey: "realmTracked", }; const lastSyncedConfig = { schema: [LastSyncedSchema] }; const lastSyncedRealm = await Realm.open(lastSyncedConfig); lastSyncedRealm.write(() => { lastSyncedRealm.create("LastSynced", { realmTracked: "Dog", }); });
๋ณ๊ฒฝ ๋ฆฌ์ค๋๋ฅผ ๋ฑ๋กํ์ฌ Dog collection์ ๋ณ๊ฒฝ ์ฌํญ์ ๊ตฌ๋ ํฉ๋๋ค. ๋๊ธฐํ ์ธ์ ์ด ์ฐ๊ฒฐ๋์ด ์๊ณ ๋ชจ๋ ๋ก์ปฌ ๋ณ๊ฒฝ ์ฌํญ์ด ์๋ฒ์ ๋๊ธฐํ๋ ๊ฒฝ์ฐ์๋ง LastSynced ๊ฐ์ฒด๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค.
// Listens for changes to the Dogs collection realm.objects("Dog").addListener(async () => { // only update LastSynced if sync session is connected // and all local changes are synced if (realm.syncSession.isConnected()) { await realm.syncSession.uploadAllLocalChanges(); lastSyncedRealm.write(() => { lastSyncedRealm.create("LastSynced", { realmTracked: "Dog", timestamp: Date.now(), }); }); } });
ํด๋ผ์ด์ธํธ ์ฌ์ค์ ์ ์ฒ๋ฆฌํ๋ ์ฝ๋ฐฑ ๋ง๋ค๊ธฐ
์ด์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ชจ๋ ๊ฐ์ฒด์ ๋ํ ์ ๋ฐ์ดํธ ์๊ฐ๊ณผ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ง์ง๋ง์ผ๋ก ๋๊ธฐํ๋ฅผ ์๋ฃํ ์๊ฐ์ ๊ธฐ๋กํ์ผ๋ฏ๋ก ์๋ ๋ณต๊ตฌ ํ๋ก์ธ์ค๋ฅผ ๊ตฌํํ ์ฐจ๋ก์ ๋๋ค. ์ด ์์ ์์๋ ๋ ๊ฐ์ง ์ฃผ์ ๋ณต๊ตฌ ์์ ์ ์ฒ๋ฆฌํฉ๋๋ค.
๋ฐฑ์ ์์ญ์์ ๋๊ธฐํ๋์ง ์์ ์ฝ์ ๋ฐ ์ ๋ฐ์ดํธ ๋ณต์
๋ฐฑ์ ์์ญ์์ ์ด์ ์ ์ญ์ ๋ ๊ฐ์ฒด๋ฅผ ์ ์์ญ์์ ์ญ์ ํฉ๋๋ค.
์๋ ์ฝ๋ ์ํ์์ ์ด๋ฌํ ์์ ์ ๊ตฌํ์ ๋ฐ๋ผ๊ฐ ์ ์์ต๋๋ค.
async function handleSyncError(_session, error) { if (error.name === "ClientReset") { const realmPath = realm.path; // realm.path will not be accessible after realm.close() realm.close(); // you must close all realms before proceeding // pass your realm app instance and realm path to initiateClientReset() Realm.App.Sync.initiateClientReset(app, realmPath); // Redownload the realm realm = await Realm.open(config); const oldRealm = await Realm.open(error.config); const lastSyncedTime = lastSyncedRealm.objectForPrimaryKey( "LastSynced", "Dog" ).timestamp; const unsyncedDogs = oldRealm .objects("Dog") .filtered(`lastUpdated > ${lastSyncedTime}`); // add unsynced dogs to synced realm realm.write(() => { unsyncedDogs.forEach((dog) => { realm.create("Dog", dog, "modified"); }); }); // delete dogs from synced realm that were deleted locally const syncedDogs = realm .objects("Dog") .filtered(`lastUpdated <= ${lastSyncedTime}`); realm.write(() => { syncedDogs.forEach((dog) => { if (!oldRealm.objectForPrimaryKey("Dog", dog._id)) { realm.delete(dog); } }); }); // make sure everything syncs and close old realm await realm.syncSession.uploadAllLocalChanges(); oldRealm.close(); } else { console.log(`Received error ${error.message}`); } }
๋์ฒด ์ ๋ต
๊ฐ๋ฅํ ๋์ฒด ๊ตฌํ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ฐฑ์ ์ํ๋ก ์ ์ฒด ๋ฐฑ์๋ ๋ฎ์ด์ฐ๊ธฐ: "๋ง์ง๋ง ์ ๋ฐ์ดํธ ์๊ฐ" ๋๋ "๋ง์ง๋ง ๋๊ธฐํ ์๊ฐ" ์์ด ๋ฐฑ์ ์์ญ์ ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ์ ์์ญ์ผ๋ก ์ ์ํธํฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ผ๋ก๋ ๋๊ธฐํ๋์ง ์์ ์ญ์ ๋ฅผ ๋ณต๊ตฌํ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ๋ง์ง๋ง ๋๊ธฐํ ์ดํ ๋ค๋ฅธ ํด๋ผ์ด์ธํธ๊ฐ ๋ฐฑ์๋์ ๊ธฐ๋ก๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฎ์ด์๋๋ค. ๊ฐ ์์ญ์ ํ ๋ช ์ ์ฌ์ฉ์๋ง ์ฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ถ์ฅ๋ฉ๋๋ค.
ํ๋๋ณ ๋ณ๊ฒฝ ์ฌํญ ์ถ์ : ๋ชจ๋ ๊ฐ์ฒด ์ '๋ง์ง๋ง ์ ๋ฐ์ดํธ ์๊ฐ'์ ์ถ์ ํ๋ ๋์ ๋ชจ๋ ํ๋ ์ '๋ง์ง๋ง ์ ๋ฐ์ดํธ ์๊ฐ'์ ์ถ์ ํฉ๋๋ค. ๋ค๋ฅธ ํด๋ผ์ด์ธํธ์ ํ๋ ์ฐ๊ธฐ๋ฅผ ์ด์ ๋ฐ์ดํฐ๋ก ๋ฎ์ด์ฐ์ง ์์ผ๋ ค๋ฉด ์ด ๋ก์ง์ ์ฌ์ฉํ์ฌ ํ๋๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ์ ๋ฐ์ดํธํฉ๋๋ค. ํ๋ ์์ค์์ ์ถฉ๋์ ํด๊ฒฐํด์ผ ํ๋ ๊ฐ์ฒด๋น ํ๋๊ฐ ๋ง์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ถ์ฅ๋ฉ๋๋ค.
๊ฐ์ฒด์ ๋ณ๋๋ก ์ ๋ฐ์ดํธ ์ถ์ : ๊ฐ ๊ฐ์ฒด์ ์คํค๋ง์์ '๋ง์ง๋ง ์ ๋ฐ์ดํธ ์๊ฐ'์ ์ถ์ ํ๋ ๋์ ์คํค๋ง์
Updates
๋ผ๋ ๋ค๋ฅธ ๋ชจ๋ธ์ ๋ง๋ญ๋๋ค.Updates
์ ์ธ) ๊ฐ์ฒด์ ํ๋๊ฐ ์ ๋ฐ์ดํธ๋ ๋๋ง๋ค ๊ธฐ๋ณธ ํค, ํ๋ ๋ฐ ์ ๋ฐ์ดํธ ์๊ฐ์ ๊ธฐ๋กํฉ๋๋ค. ํด๋ผ์ด์ธํธ๋ฅผ ์ฌ์ค์ ํ๋ ๋์ ๋ฐฑ์ Realm์์ ํด๋น ํ๋์ ์ต์ ๊ฐ์ ์ฌ์ฉํ์ฌ "๋ง์ง๋ง ๋๊ธฐํ ์๊ฐ" ์ดํ์ ๋ฐ์ํ ๋ชจ๋Update
์ด๋ฒคํธ๋ฅผ "๋ค์ ์์ฑ"ํฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ์ค๋๋ ๋ฐ์ดํฐ๋ก ํ๋๋ฅผ ๋ฎ์ด์ฐ์ง ์๊ณ ์ ์์ญ์์ ๋๊ธฐํ๋์ง ์์ ๋ชจ๋ ๋ก์ปฌ ๋ณ๊ฒฝ ์ฌํญ์ ๋ณต์ ํด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์์ฃผ ์์ฑํ๋ ๊ฒฝ์ฐ ์ ๋ฐ์ดํธ collection์ ์ ์ฅํ๋ ๋ฐ ๋น์ฉ์ด ๋ง์ด ๋ค ์ ์์ต๋๋ค. ๊ฐ์ฒด ๋ชจ๋ธ์ 'lastUpdated' ํ๋๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด ๋ฐ๋์งํ์ง ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ถ์ฅ๋ฉ๋๋ค.