Docs Menu

๋™๊ธฐํ™” ์„ค์ •

์ด ํŽ˜์ด์ง€์—์„œ๋Š” Device Sync๋ฅผ ํ™œ์„ฑํ™”ํ•˜๊ฑฐ๋‚˜ ๊ตฌ์„ฑํ•  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์„ค์ •์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๋™๊ธฐํ™”๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ ํ•˜๋ ค๋Š” ์—ฐ๊ฒฐ๋œ Atlas cluster ๋ฐ์ดํ„ฐ ์†Œ์Šค ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

Device Sync ๊ฐ€ ํ™œ์„ฑํ™”๋œ ๋™์•ˆ์—๋Š” ์ด ํ•„๋“œ ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํด๋Ÿฌ์Šคํ„ฐ ๋ฅผ ์„ ํƒํ•˜๋ ค๋ฉด ๋จผ์ € ๋™๊ธฐํ™”๋ฅผ ์ข…๋ฃŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ 

Device Sync ๋ฅผ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ์†Œ์Šค ์š”๊ตฌ ์‚ฌํ•ญ

Device Sync ๋ฅผ ํ™œ์„ฑํ™” ํ•˜๋ ค๋ฉด App Services App ์— ๋‹ค์Œ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜๋Š” ์—ฐ๊ฒฐ๋œ ๋ฐ์ดํ„ฐ ์†Œ์Šค ๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ค‘์š”

๋™๊ธฐํ™” ์œ ํ˜•์€ ํŒŒํ‹ฐ์…˜ ๊ธฐ๋ฐ˜ ๋™๊ธฐํ™” ์•ฑ์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•ฑ์˜ ๋™๊ธฐํ™” ์œ ํ˜•์„ ์„ ํƒํ•˜๋Š” ๊ธฐ๋Šฅ ์€ ํ”„๋กœ์ ํŠธ ์— ๊ธฐ์กด ํŒŒํ‹ฐ์…˜ ๊ธฐ๋ฐ˜ ๋™๊ธฐํ™” ์•ฑ ์ด ํ•˜๋‚˜ ์ด์ƒ ์žˆ๋Š” ์กฐ์ง์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒŒํ‹ฐ์…˜ ๊ธฐ๋ฐ˜ ๋™๊ธฐํ™” ๋Š” ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฉฐ ์ƒˆ๋กœ์šด ๋™๊ธฐํ™” ๊ตฌ์„ฑ์— ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  ๋ชจ๋“  ์ƒˆ๋กœ์šด ๋™๊ธฐํ™” ๊ตฌ์„ฑ์€ ์ž๋™์œผ๋กœ ๊ถŒ์žฅ Flexible Sync ๋ชจ๋“œ ๋กœ ๊ธฐ๋ณธ๊ฐ’ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

Device Sync ๋ฅผ ํ™œ์„ฑํ™” ํ•˜๋ฉด ๋‹ค์Œ ๋™๊ธฐํ™” ๋ชจ๋“œ ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Flexible Sync ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ ์—์„œ ์ฟผ๋ฆฌ๋ฅผ ์ •์˜ํ•˜๊ณ  ์ฟผ๋ฆฌ ์™€ ์ผ์น˜ํ•˜๋Š” ๊ฐ์ฒด๋งŒ ๋™๊ธฐํ™” ํ•  ์ˆ˜ ์ฟผ๋ฆฌ. ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๊ตฌ๋…์„ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • ์ฟผ๋ฆฌ ์œ ์ง€ ๊ด€๋ฆฌ

    • ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋Œ€์‘

    • ์ฟผ๋ฆฌ ์ถ”๊ฐ€, ๋ณ€๊ฒฝ ๋˜๋Š” ์‚ญ์ œ

    Flexible Sync๋Š” ์ƒˆ๋กœ์šด ๋™๊ธฐํ™” ๊ตฌ์„ฑ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ๋ชจ๋“œ ์ž…๋‹ˆ๋‹ค.

  • ํŒŒํ‹ฐ์…˜ ๊ธฐ๋ฐ˜ ๋™๊ธฐํ™” ๋Š” ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์ด์ „ ๋™๊ธฐํ™” ๋ชจ๋“œ ์ด๋ฉฐ ์ƒˆ ๋™๊ธฐํ™” ๊ตฌ์„ฑ์— ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

    ์ด๋ฏธ ์ด์ „ ํŒŒํ‹ฐ์…˜ ๊ธฐ๋ฐ˜ ๋™๊ธฐํ™” ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๊ธฐ์กด ์•ฑ ์ด ์žˆ๋Š” ๊ฒฝ์šฐ, Flexible Sync ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์€ SDK ๋ฒ„์ „์„ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๊ฒƒ ์™ธ์—๋Š” ํด๋ผ์ด์–ธํŠธ ์•ฑ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ์ž๋™ ํ”„๋กœ์„ธ์Šค ์ž…๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ Device Sync ๋ชจ๋“œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ฐธ์กฐํ•˜์„ธ์š”.

Device Sync ๊ฐ€ ํ™œ์„ฑํ™”๋œ ๋™์•ˆ์—๋Š” ๋™๊ธฐํ™” ์œ ํ˜•์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ๋จผ์ € ๋™๊ธฐํ™”๋ฅผ ์ข…๋ฃŒํ•˜๊ฑฐ๋‚˜ ์ผ์‹œ ์ค‘์ง€ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ ๋ชจ๋“œ๋Š” Device Sync๊ฐ€ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์Šคํ‚ค๋งˆ๋ฅผ ์ถ”๋ก ํ•˜๊ณ  ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ตฌ์„ฑ ์„ค์ •์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๊ฐœ๋ฐœ์„ ๊ฐ„์†Œํ™”ํ•˜์ง€๋งŒ ํ”„๋กœ๋•์…˜์—์„œ๋Š” ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ ๋ชจ๋“œ์—์„œ๋Š” ํด๋ผ์ด์–ธํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ์—์„œ ์ง์ ‘ ์Šคํ‚ค๋งˆ๋ฅผ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๊ฐœ๋ฐœ ์†๋„๊ฐ€ ๋นจ๋ผ์ง‘๋‹ˆ๋‹ค.

์˜์—ญ์„ ๋™๊ธฐํ™”ํ•˜๋ฉด Atlas App Services๋Š” ๋™๊ธฐํ™”๋œ ๋ชจ๋“  ๊ฐ์ฒด ์œ ํ˜•์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ด๋ฆ„(๊ฐœ๋ฐœ ๋ชจ๋“œ๋งŒ ํ•ด๋‹น)์œผ๋กœ ์ง€์ •๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ž์ฒด ์ปฌ๋ ‰์…˜์— ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ์—์„œ ๊ฐ์ฒด ๋ชจ๋ธ์„ ์—…๋ฐ์ดํŠธํ•˜๋ฉด App Services๋Š” ์ผ์น˜ํ•˜๋„๋ก ์ปฌ๋ ‰์…˜ ์Šคํ‚ค๋งˆ๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์•ฑ์„ ๊ฐœ๋ฐœํ•˜๋ฉด์„œ ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ์˜ ๊ฐ์ฒด๋ฅผ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ ๋ชจ๋“œ์—์„œ ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๊ทœ์น™์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ์€ ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๊ทœ์น™์„ ๋ฌด์‹œํ•œ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํด๋ผ์ด์–ธํŠธ ๋ชจ๋ธ์„ ๋ณ€๊ฒฝํ•˜์—ฌ ๋ฐฑ์—”๋“œ ์Šคํ‚ค๋งˆ๋ฅผ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ Realm ๊ฐ์ฒด ์Šคํ‚ค๋งˆ๊ฐ€ ์•ฑ ์„œ๋น„์Šค ์Šคํ‚ค๋งˆ์— ๋งคํ•‘๋˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๋ ค๋ฉด ๋ฐ์ดํ„ฐ ๋ชจ๋ธ ๋งคํ•‘์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๋™๊ธฐํ™”๋œ ๊ฐ์ฒด ์Šคํ‚ค๋งˆ ์ˆ˜์ •์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‹ค์Œ์„ ์ฐธ์กฐํ•˜์„ธ์š”: ๋ฐ์ดํ„ฐ ๋ชจ๋ธ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ

์ค‘์š”

ํ”„๋กœ๋•์…˜ ์•ฑ์˜ ๊ฐœ๋ฐœ ๋ชจ๋“œ ๋น„ํ™œ์„ฑํ™”

๊ฐœ๋ฐœ ๋ชจ๋“œ๋Š” ํ”„๋กœ๋•์…˜์šฉ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ์— ์ ํ•ฉํ•˜์ง€ ์•Š์€ ๊ฐœ๋ฐœ ์œ ํ‹ธ๋ฆฌํ‹ฐ์ž…๋‹ˆ๋‹ค. ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ์•ฑ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ธฐ ์ „์— ๊ฐœ๋ฐœ ๋ชจ๋“œ๋ฅผ ๊บผ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

2023๋…„ 9์›” 13์ผ ์ดํ›„์— ์ƒ์„ฑ๋œ ๊ฐœ๋ฐœ ๋ชจ๋“œ์˜ App Services ์•ฑ์€ ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ์—์„œ ๋™๊ธฐํ™”๋œ ๊ฐ์ฒด ์Šคํ‚ค๋งˆ๋กœ ํ˜ธํ™˜์„ฑ์ด ์†์ƒ๋˜๋Š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•ฑ์ด 2023๋…„ 9์›” 13์ผ ์ด์ „์— ์ƒ์„ฑ๋œ ๊ฒฝ์šฐ ์ง€์›ํŒ€์— ๋ฌธ์˜ํ•˜์—ฌ ์ด ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ „์ œ ์กฐ๊ฑด

  • 2023๋…„ 9์›” 13์ผ ์ดํ›„์— ์ƒ์„ฑ๋œ App Services ์•ฑ

  • Flexible Sync ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•œ MongoDB 5.0 ์ด์ƒ ๋ฒ„์ „

  • ์ตœ์†Œ SDK ๋ฒ„์ „:

    • Realm C++ SDK v1.0.0

    • Realm Flutter SDK v1.6.0

    • Realm Java SDK v10.16.2

    • Realm Kotlin SDK v11.1.1

    • Realm .NET SDK v11.6.0

    • Realm Node.js SDK v12.2.0

    • Realm React Native SDK v12.2.0

    • Realm Swift SDK v10.42.2

์ฐธ๊ณ 

2023๋…„ 9์›” 13์ผ ์ด์ „์— ์ƒ์„ฑ๋œ ์•ฑ

2023๋…„ 9์›” 13์ผ ์ด์ „์— ์ƒ์„ฑ๋œ ์•ฑ์˜ ๊ฒฝ์šฐ App Services UI์—์„œ ๊ฐ์ฒด ์Šคํ‚ค๋งˆ๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ ์—…๋ฐ์ดํŠธ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ์—์„œ ํ˜ธํ™˜์„ฑ์ด ์†์ƒ๋˜๋Š” ๋ณ€๊ฒฝ์„ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค:

  1. ๋กœ์ปฌ ์˜์—ญ๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ฐฑ์—”๋“œ์— ๋™๊ธฐํ™”๋œ ๋ฐ์ดํ„ฐ์—๋Š” ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋™๊ธฐํ™”๋˜์ง€ ์•Š์€ ๋กœ์ปฌ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ์ œ๊ฑฐ๋˜๋ฉฐ ๋ณต๊ตฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

  2. ๋กœ์ปฌ ๊ฐ์ฒด ๋ชจ๋ธ์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

  3. ์—…๋ฐ์ดํŠธ๋œ ๊ฐ์ฒด ๋ชจ๋ธ๋กœ ์˜์—ญ์„ ์—ฝ๋‹ˆ๋‹ค.

  4. ํด๋ผ์ด์–ธํŠธ ์•ฑ์„ ์‹คํ–‰ํ•˜์—ฌ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฐฑ์—”๋“œ์— ๋™๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.

Realm ํŒŒ์ผ์„ ์‚ญ์ œํ•˜๋ ค๋ฉด Realm SDK ์ „์šฉ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค:

๊ฐœ๋ฐœ ๋ชจ๋“œ๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ฉด ๋‘ ๊ฐ€์ง€ ๋ถ€์ž‘์šฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค:

์•ฑ์— ์ต๋ช… ์ธ์ฆ์ด ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๊ฐœ๋ฐœ ๋ชจ๋“œ๋ฅผ ํ™œ์„ฑํ™”ํ•œ ํ›„ ์ต๋ช… ์ธ์ฆ์„ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ ๋ชจ๋“œ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•  ๋•Œ๊นŒ์ง€ UI์—์„œ ๋ฐฐํฌ ์ดˆ์•ˆ์„ ๋‹ค์‹œ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ CLI ๋˜๋Š” Admin API๋ฅผ ํ†ตํ•ด ์ˆ˜๋™์œผ๋กœ ๋ฐฐํฌ ์ดˆ์•ˆ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ ๋ชจ๋“œ๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ฉด ๋™๊ธฐํ™”๋œ ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. App Services๋Š” ๋ชจ๋“  ์œ ํ˜•์˜ ๋™๊ธฐํ™”๋œ ๊ฐ์ฒด์— ๋Œ€ํ•ด ์ด ๊ฐœ๋ฐœ ๋ชจ๋“œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ƒˆ ์ปฌ๋ ‰์…˜์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์˜ˆ์‹œ

๊ฐœ๋ฐœ ๋ชจ๋“œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ myapp์œผ๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. iOS ํด๋ผ์ด์–ธํŠธ์— Person ๋ชจ๋ธ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Person ๊ฐ์ฒด์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ํฌํ•จ๋œ ์˜์—ญ์„ ๋™๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.{2} ๊ฐœ๋ฐœ ๋ชจ๋“œ๋Š” ๋ชจ๋ธ๊ณผ ์—ฐ๊ฒฐ๋œ ์„œ๋ฒ„ ์ธก ์Šคํ‚ค๋งˆ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์ฒด๊ฐ€ myapp.Person collection์— ๋™๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค.

App Services๋Š” ๊ฐ๊ฐ์˜ ์ƒˆ ๊ฐ์ฒด ์œ ํ˜•์— ๋Œ€ํ•ด ๊ณ„์†ํ•ด์„œ ์ƒˆ๋กœ์šด ์„œ๋ฒ„ ์ธก ์Šคํ‚ค๋งˆ์™€ ์ปฌ๋ ‰์…˜์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๋‚˜์ค‘์— Dog ๊ฐ์ฒด๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ํ•ด๋‹น ๊ฐ์ฒด๋Š” App Services์—์„œ ์ƒ์„ฑํ•  ์ƒˆ myapp.Dog ์ปฌ๋ ‰์…˜๊ณผ ๋™๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค.

Flexible Sync๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ ํด๋ผ์ด์–ธํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด Flexible Sync ๊ตฌ๋…์—์„œ ์ฟผ๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ํ•„๋“œ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ๋… ์ฟผ๋ฆฌ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ•„๋“œ๋ฅผ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ

ํ•  ์ผ ๋ชฉ๋ก ์•ฑ์—์„œ assignee ๋˜๋Š” owner๋ฅผ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅํ•œ ํ•„๋“œ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ์—์„œ assignee ๋˜๋Š” owner๊ฐ€ ๋กœ๊ทธ์ธํ•œ ์‚ฌ์šฉ์ž์™€ ์ผ์น˜ํ•˜๋Š” ์ž‘์—…์„ ์ฟผ๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ๋Š” ๊ตฌ์„ฑํ•  ๋•Œ ์ง€์ •ํ•œ ๋ฒ”์œ„์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฒ”์œ„๋Š” ๋‘ ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค:

  • ๊ธ€๋กœ๋ฒŒ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ: ์•ฑ ์Šคํ‚ค๋งˆ์˜ ๋ชจ๋“  ์ปฌ๋ ‰์…˜์— ๊ฑธ์ณ ๋ฒ”์œ„๊ฐ€ ์ง€์ •๋ฉ๋‹ˆ๋‹ค.

  • ์ปฌ๋ ‰์…˜ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ: ์•ฑ์˜ ๋‹จ์ผ ์ปฌ๋ ‰์…˜์œผ๋กœ ๋ฒ”์œ„๊ฐ€ ์ง€์ •๋ฉ๋‹ˆ๋‹ค.

์ฟผ๋ฆฌ ๊ฐ€๋Šฅํ•œ ํ•„๋“œ์˜ ๋ฒ”์œ„๋ฅผ ํŠน์ • ์ปฌ๋ ‰์…˜์œผ๋กœ ์ง€์ •ํ•˜๋ฉด ๋™๊ธฐํ™” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ฐฑ์—… Atlas ์ €์žฅ์†Œ์˜ ์šฉ๋Ÿ‰์ด ์ค„์–ด๋“ญ๋‹ˆ๋‹ค.

๊ทœ์น™๊ณผ ๊ถŒํ•œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ปฌ๋ ‰์…˜๋ณ„๋กœ ๋ณด๋‹ค ์„ธ๋ถ„ํ™”๋œ ์•ก์„ธ์Šค ์ œ์–ด๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธ€๋กœ๋ฒŒ ๋ฐ ์ปฌ๋ ‰์…˜ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ ๋ชจ๋‘์— ๋Œ€ํ•ด ์ปฌ๋ ‰์…˜ ์ˆ˜์ค€ ๊ทœ์น™ ๋ฐ ๊ถŒํ•œ์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ ๋ชจ๋“œ๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ฉด ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋™์•ˆ ํด๋ผ์ด์–ธํŠธ ์ฟผ๋ฆฌ์— ๋‚˜ํƒ€๋‚˜๋Š” ํ•„๋“œ๋Š” ์ฟผ๋ฆฌ ์ค‘์ธ ์ปฌ๋ ‰์…˜์— ๋Œ€ํ•œ ์ปฌ๋ ‰์…˜ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ๋กœ ์ž๋™์œผ๋กœ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.

์ž…๋ ฅํ•˜๋Š” ํ•„๋“œ ์ด๋ฆ„์€ ์ž„์˜์˜ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค. ๊ฐ์ฒด ์œ ํ˜•์— ์ œ๊ณตํ•œ ํ•„๋“œ ์ด๋ฆ„๊ณผ ์ด๋ฆ„์ด ์ผ์น˜ํ•˜๊ณ  ๋‹ค๋ฅธ ์ž๊ฒฉ ๊ธฐ์ค€์„ ์ถฉ์กฑํ•˜๋Š” ํ•„๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ํ•„๋“œ๋ฅผ Device Sync์—์„œ ์ฟผ๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Device Sync๊ฐ€ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋งŒ ์ธ๋ฑ์‹ฑ๋œ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ฑ์—์„œ Device Sync๊ฐ€ ์ด๋ฏธ ์‹คํ–‰ ์ค‘์ธ ๊ฒฝ์šฐ, ๋™๊ธฐํ™”๋ฅผ ์ข…๋ฃŒํ•˜๊ณ ๋‹ค์‹œ ํ™œ์„ฑํ™”ํ•  ๋•Œ ์ธ๋ฑ์‹ฑ๋œ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ๋ฅผ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋™๊ธฐํ™”๋ฅผ ๋‹ค์‹œ ํ™œ์„ฑํ™”ํ•œ ํ›„ ์žฌ์—ฐ๊ฒฐ์„ ์‹œ๋„ํ•˜๋Š” ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ์— ๋Œ€ํ•ด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์žฌ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

Flexible Sync๋Š” ์ฟผ๋ฆฌ ๊ฐ€๋Šฅํ•œ ํ•„๋“œ๋กœ ์Šค์นผ๋ผ ์œ ํ˜•์ด ์žˆ๋Š” ์ตœ์ƒ์œ„ ์ดˆ๊ธฐ(primitive) ํ•„๋“œ๋งŒ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด๋Ÿฌํ•œ ์ดˆ๊ธฐ ๋ฐฐ์—ด์„ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ๋กœ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Flexible Sync๋Š” ๋‚ด์žฅ๋œ ๊ฐ์ฒด ๋˜๋Š” ๊ฐ์ฒด ๋ฐฐ์—ด์„ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ๋กœ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ธ๋ฑ์‹ฑ๋œ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ๋Š” ๋ฐ์ดํ„ฐ ์œ ํ˜•์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ธ๋ฑ์‹ฑ๋œ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ๋Š” ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: int64, string, ObjectId, UUID.

ํŒ

๋‹ค์Œ๋„ ์ฐธ๊ณ ํ•ฉ๋‹ˆ๋‹ค: Realm ์ฟผ๋ฆฌ ์–ธ์–ด - Flexible Sync ์ œํ•œ ์‚ฌํ•ญ

์ด๋Ÿฌํ•œ ํ•„๋“œ์— ๋Œ€ํ•ด ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ฟผ๋ฆฌ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‹ค์Œ์„ ์ฐธ์กฐํ•˜์„ธ์š”: Flexible Sync RQL ์ œํ•œ ์‚ฌํ•ญ

App Services๋Š” Realm ์ฟผ๋ฆฌ ์–ธ์–ด ๋ฐ ๊ธฐํƒ€ ๋ชฉ์ ์„ ์œ„ํ•ด ์ผ๋ถ€ ํ‚ค์›Œ๋“œ๋ฅผ ๋ณ„๋„๋กœ ๋ณด์กดํ•ฉ๋‹ˆ๋‹ค. ๋ณด์กด๋œ ํ‚ค์›Œ๋“œ๋Š” ํ•„๋“œ ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

App Services์—์„œ๋Š” ๋Œ€๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์Œ ํ‚ค์›Œ๋“œ๋ฅผ ๋ณด์กดํ•ฉ๋‹ˆ๋‹ค.

  • ๊ฐœ์ธ์ •๋ณด ์ •์ฑ…์—

  • asc

  • ascending

  • beginswith

  • between

  • contains

  • desc

  • descending

  • ๋ณ„๊ฐœ

  • endswith

  • falsepredicate

  • inf

  • infinity

  • like

  • limit

  • nan

  • nil

  • null

  • or

  • sort

  • subquery

  • truepredicate

์˜ˆ์‹œ

descending, Descending, DESCENDING ๋˜๋Š” DeScEnDiNG์„ ํ•„๋“œ ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ App Services๋Š” ์ง€์ •๋œ ์ •ํ™•ํ•œ ๋Œ€/์†Œ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์Œ ํ‚ค์›Œ๋“œ๋ฅผ ๋ณ„๋„๋กœ ๋ณด์กดํ•ฉ๋‹ˆ๋‹ค.

  • ALL

  • ANY

  • B64

  • ๊ฑฐ์ง“

  • ์ธ

  • none

  • NOT

  • SOME

  • true

  • ๋ชจ๋‘

  • any

  • ๊ฑฐ์ง“

  • ์ธ

  • none

  • not

  • oid

  • some

  • true

  • uuid

์˜ˆ์‹œ

๋‘ ๋Œ€๋ฌธ์ž๊ฐ€ ๋ชจ๋‘ ๋ณ„๋„๋กœ ๋ณด์กด๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ true ๋˜๋Š” TRUE๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์ง€๋งŒ True ๋˜๋Š” tRUE๋Š” ํ•„๋“œ ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ๋Š” Atlas ํด๋Ÿฌ์Šคํ„ฐ์— ์ถ”๊ฐ€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฏ€๋กœ ์“ฐ๊ธฐ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํ•„์š”ํ•œ ๋งŒํผ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ๊ฐ€ ์žˆ์–ด์•ผ ํ•˜๋ฉฐ, ํ•„์š”ํ•œ ์ตœ์†Œ ์ปฌ๋ ‰์…˜ ์ˆ˜๋กœ ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋งŽ์€ ์•ฑ์ด ๋‹จ์ผ ์ปฌ๋ ‰์…˜์— ์ตœ๋Œ€ 10๊ฐœ๊นŒ์ง€ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ๋ฅผ ์ ์šฉํ•˜์—ฌ ์Šคํ† ๋ฆฌ์ง€ ์‚ฌ์šฉ๋Ÿ‰๊ณผ ์ฟผ๋ฆฌ ์œ ์—ฐ์„ฑ ๊ฐ„์— ์ ์ ˆํ•œ ๊ท ํ˜•์„ ๋งž์ถ”๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, 3๊ฐœ์˜ ๊ธ€๋กœ๋ฒŒ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ์™€ 7๊ฐœ์˜ ์ปฌ๋ ‰์…˜ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์ปฌ๋ ‰์…˜์— ์ ์šฉ๋˜๋Š” ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ๋Š” 10๊ฐœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

ํ•˜๋‚˜์˜ ์ปฌ๋ ‰์…˜์—์„œ๋งŒ ์ฟผ๋ฆฌํ•˜๋ ค๋Š” ํ•„๋“œ๊ฐ€ ์žˆ์ง€๋งŒ ํ•ด๋‹น ํ•„๋“œ๊ฐ€ ๊ธ€๋กœ๋ฒŒ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ, ๋ถˆํ•„์š”ํ•˜๊ฒŒ Atlas ์ €์žฅ ๊ณต๊ฐ„์„ ์†Œ๋ชจํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ชจ๋“  ์ปฌ๋ ‰์…˜์— user ํ•„๋“œ๊ฐ€ ์žˆ์ง€๋งŒ ํ•œ ์ปฌ๋ ‰์…˜์˜ ๋™๊ธฐํ™” ์ฟผ๋ฆฌ์—๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ํ•„๋“œ๋ฅผ ์ปฌ๋ ‰์…˜ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ๋กœ ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•˜๋ฉด ์ €์žฅ์†Œ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒ”์œ„๋ฅผ ์ค„์ด๋ฉด ๋™๊ธฐํ™”์—์„œ user ํ•„๋“œ๋ฅผ ์ฟผ๋ฆฌํ•˜์ง€ ์•Š๋Š” ๋‹ค๋ฅธ ์ปฌ๋ ‰์…˜์˜ ํ•ด๋‹น ํ•„๋“œ์— ๋Œ€ํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ ๊ด€๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์ €์žฅ์†Œ ์‚ฌ์šฉ๋Ÿ‰์„ ์ค„์ด๊ฑฐ๋‚˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์•ฑ์—์„œ ๋ถˆํ•„์š”ํ•œ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅํ•œ ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•˜๋Š” ์ž‘์—…์˜ ์˜ํ–ฅ์— ์œ ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ ์ถ”๊ฐ€ ๋˜๋Š” ์ œ๊ฑฐ์˜ ๊ฒฐ๊ณผ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์ถ”๊ฐ€ ๊ณ ๋ ค ์‚ฌํ•ญ์€ Flexible Sync ์‚ฌ์šฉ ์‹œ ์„ฑ๋Šฅ ๋ฐ ์Šคํ† ๋ฆฌ์ง€ ์ตœ์ ํ™”๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์ธ๋ฑ์‹ฑ๋œ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ํŠน์ • ์œ ํ˜•์˜ ์ž‘์—… ๋ถ€ํ•˜์— ๋Œ€ํ•œ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ธ๋ฑ์‹ฑ๋œ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ๋Š” ๋ณด๋‹ค ํšจ์œจ์ ์œผ๋กœ ์ฟผ๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ธ€๋กœ๋ฒŒ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ ๋กœ, ํ–ฅ์ƒ๋œ ๋™๊ธฐํ™” ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ๊ธ€๋กœ๋ฒŒ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ๋ฅผ ์ธ๋ฑ์‹ฑ๋œ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฟผ๋ฆฌ ๊ฐ€๋Šฅํ•œ ํ•„๋“œ๋ฅผ ์ธ๋ฑ์‹ฑํ•˜๋ฉด {โ€œstore_idโ€: 1} ๋˜๋Š” {โ€œuser_idโ€: โ€œ641374b03725038381d2e1fbโ€}์™€(๊ณผ) ๊ฐ™์€ ๋‹จ์ผ ํ•„๋“œ์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ์ฟผ๋ฆฌ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค.

์ธ๋ฑ์‹ฑ๋œ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ๋Š” ๋ชจ๋“  ๋™๊ธฐํ™” ์ปฌ๋ ‰์…˜์˜ ์Šคํ‚ค๋งˆ์— ๋ฐ˜๋“œ์‹œ ํ‘œ์‹œ๋˜์–ด์•ผ ํ•˜๋ฉฐ ๋™์ผํ•œ ์œ ํšจํ•œ ๋ฐ์ดํ„ฐ ํ˜•์‹์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ธ๋ฑ์‹ฑ๋œ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ๊ฐ€ store_id์ธ ๊ฒฝ์šฐ ๋™๊ธฐํ™”ํ•˜๋Š” ๋ชจ๋“  ์ปฌ๋ ‰์…˜์— ํ‘œ์‹œ๋˜์–ด์•ผ ํ•˜๋ฉฐ ๋ชจ๋“  ์ปฌ๋ ‰์…˜์—์„œ ๋™์ผํ•œ ์œ ํšจํ•œ ํ˜•์‹์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ ํ•ฉํ•œ ํ•„๋“œ ์œ ํ˜•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ ํ•ฉํ•œ ํ•„๋“œ ์œ ํ˜•์„ ์ฐธ์กฐํ•˜์„ธ์š”.

ํด๋ผ์ด์–ธํŠธ์—์„œ ์ธ๋ฑ์‹ฑ๋œ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ธ๋ฑ์‹ฑ๋œ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ๋ฅผ ๊ตฌ์„ฑํ•œ ํ›„์—๋Š” ํด๋ผ์ด์–ธํŠธ ๊ธฐ๊ธฐ์—์„œ ๊ธฐ์กด ๊ฐ์ฒด์˜ ์ธ๋ฑ์‹ฑ๋œ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ ๊ฐ’์„ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ธ๋ฑ์‹ฑ๋œ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ๊ฐ€ store_id์ธ ๊ฒฝ์šฐ ํด๋ผ์ด์–ธํŠธ๋Š” ์ด ๊ฐ’์„ ์ง์ ‘ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์€ ๊ฐ™์€ ๊ธฐ๊ฐ„ ๋™์•ˆ ๊ฐ์ฒด์— ์ ์šฉ๋œ ๋‹ค๋ฅธ ์—…๋ฐ์ดํŠธ์™€ ์ถฉ๋Œํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ธฐ๊ธฐ์—์„œ ์ธ๋ฑ์‹ฑ๋œ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋ ค๊ณ  ํ•˜๋ฉด ๋ณด์ƒ ์“ฐ๊ธฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ค๋ฅ˜์™€ ์ด๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ๋™์ž‘์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ Flexible Sync ์˜ค๋ฅ˜ ๋ฌธ์„œ์—์„œ ErrorCompensatingWrite๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

Atlas ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ด ๊ฐ’์„ ์ง์ ‘ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฝ๊ณ 

Atlas๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด์˜ ์ธ๋ฑ์‹ฑ๋œ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋ฉด ๋™์‹œ์— ์ด๋ค„์ง„ ๊ฐ์ฒด์— ๋Œ€ํ•œ ํด๋ผ์ด์–ธํŠธ ์—…๋ฐ์ดํŠธ๋ฅผ ๋ฎ์–ด์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ธ๋ฑ์‹ฑ๋œ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ์— ๋Œ€ํ•œ ํด๋ผ์ด์–ธํŠธ ์ธก ์ฟผ๋ฆฌ

์•ฑ์—์„œ ์ธ๋ฑ์‹ฑ๋œ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, Flexible Sync ๊ตฌ๋…์˜ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ์ฟผ๋ฆฌ์—๋Š” ์ƒ์ˆ˜์— ๋Œ€ํ•ด == ๋˜๋Š” IN ๋น„๊ต๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธ๋ฑ์‹ฑ๋œ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ๊ฐ€ ํ•œ ๋ฒˆ ์ด์ƒ ๋ฐ˜๋“œ์‹œ ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด user_id == 641374b03725038381d2e1fb ๋˜๋Š” store_id IN {1,2,3}์ž…๋‹ˆ๋‹ค.

์ธ๋ฑ์‹ฑ๋œ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ๊ฐ€ == ๋˜๋Š” IN์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์ˆ˜์™€ ํ•œ ๋ฒˆ ์ด์ƒ ์ง์ ‘ ๋น„๊ต๋˜๋Š” ๊ฒฝ์šฐ, ์„ ํƒ์ ์œผ๋กœ AND ๋น„๊ต๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด store_id IN {1,2,3} AND region=="Northeast" ๋˜๋Š” store_id == 1 AND (active_promotions < 5 OR num_employees < 10) ์ž…๋‹ˆ๋‹ค.

์ธ๋ฑ์‹ฑ๋œ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ์— ๋Œ€ํ•œ ์œ ํšจํ•˜์ง€ ์•Š์€ Flexible Sync ์ฟผ๋ฆฌ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฟผ๋ฆฌ๊ฐ€ ํฌํ•ฉ๋ฉ๋‹ˆ๋‹ค.

  • ์ธ๋ฑ์‹ฑ๋œ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ๋Š” ๋‚˜๋จธ์ง€ ์ฟผ๋ฆฌ์™€ ํ•จ๊ป˜ AND์„(๋ฅผ) ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด store_id IN {1,2,3} OR region=="Northeast"์€(๋Š”) AND ๋Œ€์‹  OR์„(๋ฅผ) ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์œ ํšจํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ store_id == 1 AND active_promotions < 5 OR num_employees < 10์€(๋Š”) AND์ด(๊ฐ€) ์ „์ฒด ์ฟผ๋ฆฌ๊ฐ€ ์•„๋‹ˆ๋ผ ์˜†์— ์žˆ๋Š” ํ…€์—๋งŒ ์ ์šฉ๋˜๋ฏ€๋กœ ์œ ํšจํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ์ธ๋ฑ์‹ฑ๋œ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ๊ฐ€ ๋™๋“ฑ ์—ฐ์‚ฐ์ž์— ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ.์˜ˆ๋ฅผ ๋“ค์–ด store_id > 2 AND region=="Northeast"๋Š” > ์—ฐ์‚ฐ์ž๋งŒ ์ธ๋ฑ์‹ฑ๋œ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ์— ์‚ฌ์šฉํ•˜๊ณ  ๋™๋“ฑ ๋น„๊ต๋Š” ์—†๊ธฐ ๋•Œ๋ฌธ์— ์œ ํšจํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ์ธ๋ฑ์‹ฑ๋œ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ๊ฐ€ ์ฟผ๋ฆฌ์—์„œ ์™„์ „ํžˆ ๋ˆ„๋ฝ๋œ ๊ฒฝ์šฐ.์˜ˆ๋ฅผ ๋“ค์–ดregion=="Northeast" ๋˜๋Š” truepredicate๋Š” ์ธ๋ฑ์‹ฑ๋œ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์œ ํšจํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋™๊ธฐํ™”๊ฐ€ ํ™œ์„ฑํ™”๋œ ์ƒํƒœ์—์„œ ๋™๊ธฐํ™” ๊ตฌ์„ฑ์„ ์—…๋ฐ์ดํŠธํ•˜์—ฌ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ ์ด๋ฆ„์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋‹ค์Œ ์‚ฌํ•ญ์— ์œ ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:

์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๊ธฐ๊ธฐ๊ฐ€ Device Sync ๊ธฐ๋ก์—์„œ ํ•„๋“œ๊ฐ€ ์ถ”๊ฐ€๋œ ์‹œ์ ์„ ๋”ฐ๋ผ์žก์€ ๊ฒฝ์šฐ์—๋งŒ ํ•ด๋‹น ํ•„๋“œ์—์„œ ๊ธฐ๊ธฐ๋ฅผ ๋™๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด ํ•ด๋‹น ํ•„๋“œ๋ฅผ ์—ฌ์ „ํžˆ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ๊ธฐ๊ธฐ์˜ Device Sync ์„ธ์…˜์ด ์ œ๊ฑฐ๋˜๋ฉฐ ํด๋ผ์ด์–ธํŠธ ์žฌ์„ค์ •์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ œ๊ฑฐ๋œ ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํด๋ผ์ด์–ธํŠธ์—๋Š” ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ๋ฅผ ์ œ๊ฑฐํ•  ๋•Œ ํด๋ผ์ด์–ธํŠธ ์žฌ์„ค์ •์ด ํŠธ๋ฆฌ๊ฑฐ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด ๋จผ์ € ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ์—์„œ ํ•ด๋‹น ํ•„๋“œ์˜ ์‚ฌ์šฉ์„ ์ œ๊ฑฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•˜๊ธฐ ์ „์— ๋™๊ธฐํ™”๋ฅผ ์ข…๋ฃŒํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ด๋Ÿฌํ•œ ๊ณ ๋ ค ์‚ฌํ•ญ์ด ์ ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋™๊ธฐํ™”๋ฅผ ์ข…๋ฃŒํ•˜๋ฉด ์•ฑ๊ณผ ๋™๊ธฐํ™”๋œ ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ์— ํด๋ผ์ด์–ธํŠธ ์žฌ์„ค์ •์ด ํŠธ๋ฆฌ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.

Atlas Device Sync๋Š” ๋™๊ธฐํ™”๋œ ํด๋Ÿฌ์Šคํ„ฐ์— ๋Œ€ํ•œ ๋ชจ๋“  ์š”์ฒญ์— ์—ญํ•  ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๊ทœ์น™์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทœ์น™์€ ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋™๊ธฐํ™”ํ•˜๊ณ , ๋ณด๊ณ , ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๊ฒฐ์ •ํ•˜๋Š” ๋™์  JSON ํ‘œํ˜„์‹์ž…๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ ์—ญํ•  ๊ธฐ๋ฐ˜ ๊ถŒํ•œ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๋ฐ์ดํ„ฐ ์ˆ˜์ง‘์€ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ์‚ฝ์ž… ์ „์šฉ ์›Œํฌ๋กœ๋“œ๊ฐ€ ๋งŽ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•œ ๋™๊ธฐํ™” ์ „๋žต์ž…๋‹ˆ๋‹ค. ํ•˜๋‚˜ ์ด์ƒ์˜ ์ปฌ๋ ‰์…˜์— ๋Œ€ํ•ด ์ด ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Atlas time-series ์ปฌ๋ ‰์…˜์„ ํฌํ•จํ•œ ๋ชจ๋“  ์ปฌ๋ ‰์…˜ ์œ ํ˜•์— ๋Œ€ํ•œ ์“ฐ๊ธฐ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์„ผ์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ž์ฃผ ๋กœ๊ทธํ•˜๋Š” IoT ์•ฑ์€ ์“ฐ๊ธฐ ์›Œํฌ๋กœ๋“œ๊ฐ€ ๋งŽ๊ณ  ์ฝ๊ธฐ ์›Œํฌ๋กœ๋“œ๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ธฐ๊ธฐ๊ฐ€ ์˜ค๋žœ ์‹œ๊ฐ„ ๋™์•ˆ ์˜คํ”„๋ผ์ธ ์ƒํƒœ์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘์€ ์–‘๋ฐฉํ–ฅ ๋™๊ธฐํ™”์— ํ•„์š”ํ•œ ์ผ๋ถ€ ์ฒ˜๋ฆฌ๋ฅผ ์šฐํšŒํ•˜์—ฌ Atlas ์ปฌ๋ ‰์…˜์— ๋Œ€ํ•œ ์“ฐ๊ธฐ ์†๋„๋ฅผ ํฌ๊ฒŒ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ๋ฆฌํ…Œ์ผ ์•ฑ์˜ ์ธ๋ณด์ด์Šค ๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ด๋ฒคํŠธ ๋กœ๊น… ๋“ฑ ๋ถˆ๊ฐ€๋ณ€์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๋Š” ์ž‘์—…์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ๋‘ ์‚ฌ์šฉ ์‚ฌ๋ก€ ๋ชจ๋‘ ์ถฉ๋Œ ํ•ด๊ฒฐ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ฐœ๋ณ„ ์ปฌ๋ ‰์…˜์— ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์•ฑ์—์„œ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘์„ ์‚ฌ์šฉํ•˜์—ฌ ์ผ๋ถ€ ๋ฐ์ดํ„ฐ๋ฅผ ์“ธ ์ˆ˜ ์žˆ์ง€๋งŒ ๋‹ค๋ฅธ ์ปฌ๋ ‰์…˜์—์„œ๋Š” ์–‘๋ฐฉํ–ฅ Flexible Sync๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ ์ปฌ๋ ‰์…˜์€ ๋ฐ์ดํ„ฐ ์“ฐ๊ธฐ ์ „์šฉ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ปฌ๋ ‰์…˜์— ๋Œ€ํ•ด์„œ๋Š” Flexible Sync ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  MongoDB ๋ฐ์ดํ„ฐ ์†Œ์Šค์— ์—ฐ๊ฒฐ์„ ์‚ฌ์šฉํ•˜์„ธ์š”.

๋ฐ์ดํ„ฐ ์ˆ˜์ง‘์„ ํ™œ์„ฑํ™”ํ•œ ํ›„ ํด๋ผ์ด์–ธํŠธ SDK๋ฅผ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ ์•ฑ์— ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ Realm SDK๊ฐ€ ๋‹ค์Œ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค:

Atlas Device Sync๋Š” ์ด ๋ฐ์ดํ„ฐ์˜ ์ˆ˜๋ช… ์ฃผ๊ธฐ๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ ๋™๊ธฐํ™”๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์œ ์ง€๋œ ํ›„ ๊ธฐ๊ธฐ์—์„œ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ ์ตœ๋Œ€ ์˜คํ”„๋ผ์ธ ์‹œ๊ฐ„์€ ๋™๊ธฐํ™” ์„ธ์…˜ ๊ฐ„์— ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์˜คํ”„๋ผ์ธ ์ƒํƒœ์ผ ์ˆ˜ ์žˆ๋Š” ์‹œ๊ฐ„์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋ฉด ์˜คํ”„๋ผ์ธ ์•ก์„ธ์Šค์™€ ๋™๊ธฐํ™”๋œ Atlas ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์Šคํ† ๋ฆฌ์ง€์˜ ๊ท ํ˜•์„ ๋งž์ถœ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ํด๋ผ์ด์–ธํŠธ ์ตœ๋Œ€ ์˜คํ”„๋ผ์ธ ์‹œ๊ฐ„์„ ์ฐธ์กฐํ•˜์„ธ์š”.

ํด๋ผ์ด์–ธํŠธ ๋ณต๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ธฐ๊ธฐ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต๊ตฌํ•˜๋Š” ๋™์•ˆ ํด๋ผ์ด์–ธํŠธ ์žฌ์„ค์ •์„ ์ž๋™์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋™๊ธฐํ™”๋˜์ง€ ์•Š์€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ๋ณต๊ตฌ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋‚ด๋ณด๋‚ธ ์•ฑ์˜ sync ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋™๊ธฐํ™” ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

app/
โ””โ”€โ”€ sync/
โ””โ”€โ”€ config.json

์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ ๋™๊ธฐํ™” ๊ตฌ์„ฑ์€ Flexible Sync๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์•ฑ์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

sync/config.json
{
"type": "flexible",
"development_mode_enabled": <Boolean>,
"service_name": "<Data Source Name>",
"database_name": "<Development Mode Database Name>",
"state": <"enabled" | "disabled">,
"client_max_offline_days": <Number>,
"is_recovery_mode_disabled": <Boolean>,
"queryable_fields_names": [
<Array of String Field Names>
],
"indexed_queryable_fields_names": [
<Array of String Field Names>
],
"collection_queryable_fields_names": <Map[String][]String>
"permissions": "<Deprecated, Do Not Use>"
}

๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” permissions ํ•„๋“œ๊ฐ€ ๋‚ด๋ณด๋‚ธ ์•ฑ์˜ ๊ตฌ์„ฑ์— ์—ฌ์ „ํžˆ ๋‚˜ํƒ€๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์•ฑ์ด ์•„์ง ํ†ตํ•ฉ ๊ทœ์น™ ์‹œ์Šคํ…œ์œผ๋กœ ์ž๋™ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜๋˜์ง€ ์•Š์•˜์Œ์„ ์˜๋ฏธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ฑ์„ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ๋•Œ๊นŒ์ง€ ์ด ํ•„๋“œ๋ฅผ ์‚ญ์ œํ•˜์ง€ ๋งˆ์„ธ์š”.

sync/config.json
{
"type": "flexible",
"development_mode_enabled": <Boolean>,
"service_name": "<Data Source Name>",
"database_name": "<Development Mode Database Name>",
"state": <"enabled" | "disabled">,
"client_max_offline_days": <Number>,
"is_recovery_mode_disabled": <Boolean>,
"queryable_fields_names": ["<Field Name>", ...],
"indexed_queryable_fields_names": ["<Field Name>", ...],
"collection_queryable_fields_names": {
"<Collection Name>": ["<Field Name>", ...],
...
}
}
ํ•„๋“œ
์„ค๋ช…
type
string

๋™๊ธฐํ™” ๋ชจ๋“œ์ž…๋‹ˆ๋‹ค. ๋™๊ธฐํ™” ๋ชจ๋“œ์—๋Š” Flexible Sync ๋ฐ ํŒŒํ‹ฐ์…˜ ๊ธฐ๋ฐ˜ ๋™๊ธฐํ™”, ์ด๋ ‡๊ฒŒ ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. Flexible Sync๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ํŒŒํ‹ฐ์…˜ ๊ธฐ๋ฐ˜ ๋™๊ธฐํ™”์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ํŒŒํ‹ฐ์…˜ ๊ธฐ๋ฐ˜ ๋™๊ธฐํ™”๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

Flexible Sync ๊ตฌ์„ฑ์„ ์œ„ํ•œ ์œ ํšจํ•œ ์˜ต์…˜์ž…๋‹ˆ๋‹ค:

  • "flexible"

development_mode_enabled
boolean

true์ธ ๊ฒฝ์šฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•ด ๊ฐœ๋ฐœ ๋ชจ๋“œ๊ฐ€ ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์„ ํ™œ์„ฑํ™”ํ•˜๋ฉด App Services๋Š” ๋™๊ธฐํ™”๋œ ๊ฐ์ฒด๋ฅผ ํŠน์ • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(database_name์— ์ง€์ •๋จ)์— ์ž๋™์œผ๋กœ ์ €์žฅํ•˜๊ณ , ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ปฌ๋ ‰์…˜ ์Šคํ‚ค๋งˆ์— ๊ฐ์ฒด ์œ ํ˜•์„ ๋ฏธ๋Ÿฌ๋งํ•ฉ๋‹ˆ๋‹ค.

service_name
string

๋™๊ธฐํ™”ํ•  Atlas ํด๋Ÿฌ์Šคํ„ฐ ๋ฐ์ดํ„ฐ ์†Œ์Šค์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ์„œ๋ฒ„๋ฆฌ์Šค ์ธ์Šคํ„ด์Šค์™€๋Š” ๋™๊ธฐํ™”๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

database_name
string

App Services๊ฐ€ ๊ฐœ๋ฐœ ๋ชจ๋“œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋™๊ธฐํ™”๋œ ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. App Services๋Š” ๋™๊ธฐํ™”๋œ ๊ฐ ์œ ํ˜•์— ๋Œ€ํ•œ ์Šคํ‚ค๋งˆ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๊ณ  ๊ฐ ๊ฐ์ฒด ์œ ํ˜•์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋‚ด์˜ collection์— ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค.

state
string

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ๋™๊ธฐํ™” ํ”„๋กœํ† ์ฝœ์˜ ํ˜„์žฌ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.

์œ ํšจํ•œ ์˜ต์…˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • "enabled"

  • "disabled"

client_max_offline_days
number

๋ฐฑ์—”๋“œ ์••์ถ• ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ด์ „ ๋ฒ„์ „์˜ ์˜์—ญ์—์„œ ๋™๊ธฐํ™”์— ํ•„์š”ํ•œ ์ผ๋ถ€ ํด๋ผ์ด์–ธํŠธ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ ๊ทน์ ์œผ๋กœ ์ œ๊ฑฐํ•˜๊ธฐ ์ „์— ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ผ์ˆ˜์ž…๋‹ˆ๋‹ค.

is_recovery_mode_disabled
boolean

false์ธ ๊ฒฝ์šฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•ด ๋ณต๊ตฌ ๋ชจ๋“œ๊ฐ€ ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋Šฅ์ด ํ™œ์„ฑํ™”๋œ ์ƒํƒœ์—์„œ ์ด ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๋Š” Realm SDK๋Š” ํด๋ผ์ด์–ธํŠธ ์žฌ์„ค์ •์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ๋™๊ธฐํ™”๋˜์ง€ ์•Š์€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ณต๊ตฌํ•˜๋ ค๊ณ  ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. ๋ณต๊ตฌ ๋ชจ๋“œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

queryable_fields_names
string[]
indexed_queryable_fields_names
string[]

์ธ๋ฑ์‹ฑ๋œ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ ๋กœ ์‚ฌ์šฉํ•  ํ•„๋“œ ์ด๋ฆ„์˜ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ์€ ๋ฐฐ์—ด์ด์ง€๋งŒ ๋™๊ธฐํ™”๋Š” ํ˜„์žฌ ์ธ๋ฑ์‹ฑ๋œ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ๋ฅผ ํ•˜๋‚˜๋งŒ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ๋ฐฐ์—ด์—๋Š” ์ตœ๋Œ€ ํ•˜๋‚˜์˜ ์š”์†Œ๋งŒ ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ธ๋ฑ์‹ฑ๋œ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ๋Š” ์Šคํ‚ค๋งˆ์— ์กด์žฌํ•ด์•ผ ํ•˜๋ฉฐ ๋™๊ธฐํ™”ํ•˜๋Š” ๋ชจ๋“  collection์—์„œ ๋™์ผํ•œ ์ ํ•ฉํ•œ ํ•„๋“œ ์œ ํ˜• ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ธ๋ฑ์‹ฑ๋œ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ ์ด๋ฆ„์€ ๊ธ€๋กœ๋ฒŒ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ์ด๋ฏ€๋กœ queryable_fields_names ์—๋„ ํ‘œ์‹œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

collection_queryable_fields_names
{ [collectionName: string]: string[] }

์ปฌ๋ ‰์…˜ ์ด๋ฆ„์—์„œ ๊ฐ ์ปฌ๋ ‰์…˜์— ๋Œ€ํ•œ ์ปฌ๋ ‰์…˜ ์ˆ˜์ค€ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅ ํ•„๋“œ ๋ชฉ๋ก์œผ๋กœ์˜ ๋งต์ž…๋‹ˆ๋‹ค.

last_disabled
number

๋™๊ธฐํ™”๊ฐ€ ๋งˆ์ง€๋ง‰์œผ๋กœ ์ผ์‹œ ์ค‘์ง€๋˜๊ฑฐ๋‚˜ ๋น„ํ™œ์„ฑํ™”๋œ ๋‚ ์งœ์™€ ์‹œ๊ฐ„์œผ๋กœ ์œ ๋‹‰์Šค ์‹œ๊ฐ„(1์›” 1, 1970, 00:00:00 UTC) ์ดํ›„์˜ ์‹œ๊ฐ„(์ดˆ)์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

asymmetric_tables
string[]

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์“ธ ์ˆ˜๋Š” ์žˆ์ง€๋งŒ ์ฝ์„ ์ˆ˜๋Š” ์—†๋Š” ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ ์„ ํ†ตํ•ด ๋น„๋Œ€์นญ์œผ๋กœ ์ •์˜๋œ ์ปฌ๋ ‰์…˜ ์ด๋ฆ„์˜ ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค.