Docs Menu
Docs Home
/
MongoDB ๋งค๋‰ด์–ผ
/

readConcern

์ด ํŽ˜์ด์ง€์˜ ๋‚ด์šฉ

  • ์ฝ๊ธฐ ๊ณ ๋ ค ์ˆ˜์ค€
  • readConcern Support
  • ๊ณ ๋ ค ์‚ฌํ•ญ

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

์“ฐ๊ธฐ ๊ณ ๋ ค ์‚ฌํ•ญ๊ณผ ์ฝ๊ธฐ ๊ณ ๋ ค ์‚ฌํ•ญ์„ ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์ผ๊ด€์„ฑ ๋ฐ ๊ฐ€์šฉ์„ฑ ๋ณด์žฅ ์ˆ˜์ค€์„ ์ ์ ˆํžˆ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: ๋” ๊ฐ•๋ ฅํ•œ ์ผ๊ด€์„ฑ ๋ณด์žฅ์„ ๊ธฐ๋‹ค๋ฆฌ๊ฑฐ๋‚˜ ์ผ๊ด€์„ฑ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์™„ํ™”ํ•˜์—ฌ ๋” ๋†’์€ ๊ฐ€์šฉ์„ฑ์„ ์ œ๊ณตํ•˜๋Š” ๋“ฑ).

๋ณต์ œ๋ณธ ์„ธํŠธ ๋ฐ ์ƒค๋“œ ํด๋Ÿฌ์Šคํ„ฐ๋Š” ๊ธ€๋กœ๋ฒŒ ๊ธฐ๋ณธ ์ฝ๊ธฐ ์šฐ๋ ค ์‚ฌํ•ญ ์„ค์ •์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋ช…์‹œ์ ์ธ ์ฝ๊ธฐ ๊ณ ๋ ค๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์€ ์ž‘์—…์—๋Š” ๊ธ€๋กœ๋ฒŒ ๊ธฐ๋ณธ ์ฝ๊ธฐ ๊ณ ๋ ค ์„ค์ •์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ setDefaultRWConcern์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ๊ธฐ ๊ณ ๋ ค ์ˆ˜์ค€์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

level
์„ค๋ช…

์ด ์ฟผ๋ฆฌ๋Š” ๋ณต์ œ ์„ธํŠธ ๊ตฌ์„ฑ์›์˜ ๊ณผ๋ฐ˜์ˆ˜์— ๋ฐ์ดํ„ฐ๊ฐ€ ๊ธฐ๋ก๋˜์—ˆ์Œ์„ ๋ณด์žฅํ•˜์ง€ ์•Š๊ณ  ์ธ์Šคํ„ด์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค(์ฆ‰, ๋กค๋ฐฑ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค).

๊ธฐ๋ณธ๊ฐ’์€ ํ”„๋ผ์ด๋จธ๋ฆฌ ๋ฐ ์„ธ์ปจ๋”๋ฆฌ์— ๋Œ€ํ•œ ์ฝ๊ธฐ์ž…๋‹ˆ๋‹ค.

๊ฐ€์šฉ์„ฑ: ์ฝ๊ธฐ ๊ณ ๋ ค "local"๋Š” ์ธ๊ณผ์ ์œผ๋กœ ์ผ๊ด€์ ์ธ ์„ธ์…˜๊ณผ ํŠธ๋žœ์žญ์…˜์˜ ์œ ๋ฌด์— ๊ด€๊ณ„์—†์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ "local" ๋„์›€๋ง ํŽ˜์ด์ง€๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์ด ์ฟผ๋ฆฌ๋Š” ๋ณต์ œ ์„ธํŠธ ๊ตฌ์„ฑ์›์˜ ๊ณผ๋ฐ˜์ˆ˜์— ๋ฐ์ดํ„ฐ๊ฐ€ ๊ธฐ๋ก๋˜์—ˆ์Œ์„ ๋ณด์žฅํ•˜์ง€ ์•Š๊ณ  ์ธ์Šคํ„ด์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค(์ฆ‰, ๋กค๋ฐฑ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค).

๊ฐ€์šฉ์„ฑ: ์ฝ๊ธฐ ๊ณ ๋ ค "available"๋Š” ์ธ๊ณผ์  ์ผ๊ด€์„ฑ ์„ธ์…˜ ๋ฐ ํŠธ๋žœ์žญ์…˜๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

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

์ž์„ธํ•œ ๋‚ด์šฉ์€ "available" ๋„์›€๋ง ํŽ˜์ด์ง€๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

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

์ฝ๊ธฐ ๊ณ ๋ ค 'majority'๋ฅผ ์ถฉ์กฑํ•˜๊ธฐ ์œ„ํ•ด, ๋ณต์ œ๋ณธ ์„ธํŠธ ๋ฉค๋ฒ„๋Š” ๊ณผ๋ฐ˜์ˆ˜ ์ปค๋ฐ‹ ํฌ์ธํŠธ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ๋ฉ”๋ชจ๋ฆฌ ๋‚ด ๋ณด๊ธฐ ํ™”๋ฉด์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ฝ๊ธฐ ๊ณ ๋ ค "majority"๋Š” ๋‹ค๋ฅธ ์ฝ๊ธฐ ๊ณ ๋ ค์™€ ์„ฑ๋Šฅ ๋น„์šฉ์ด ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€์šฉ์„ฑ:

์ฝ๊ธฐ ๊ณ ๋ ค "majority"๋Š” ์ธ๊ณผ์ ์œผ๋กœ ์ผ๊ด€์ ์ธ ์„ธ์…˜๊ณผ ํŠธ๋žœ์žญ์…˜์˜ ์œ ๋ฌด์— ๊ด€๊ณ„์—†์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์š”๊ตฌ ์‚ฌํ•ญ: ์ฝ๊ธฐ ๊ณ ๋ ค ์ˆ˜์ค€์„ "majority"๋กœ ์„ค์ •ํ•˜๋ ค๋ฉด ๋ณต์ œ๋ณธ ์„ธํŠธ๊ฐ€ WiredTiger ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์ค‘ ๋ฌธ์„œ ํŠธ๋žœ์žญ์…˜์—์„œ ์‹คํ–‰๋˜๋Š” ์ž‘์—…์˜ ๊ฒฝ์šฐ, ์ฝ๊ธฐ ๊ณ ๋ ค "majority"๋Š” ํŠธ๋žœ์žญ์…˜์ด ์“ฐ๊ธฐ ๊ณ ๋ ค 'majority'์™€ ํ•จ๊ป˜ ์ปค๋ฐ‹๋˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ๋ณด์ฆ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด "majority" ์ฝ๊ธฐ ๊ณ ๋ ค๊ฐ€ ํŠธ๋žœ์žญ์…˜์—์„œ ์ฝ์€ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ๋ณด์žฅ์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ "majority" ๋„์›€๋ง ํŽ˜์ด์ง€๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

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

์ฝ๊ธฐ ๊ณ ๋ ค ํ›„ ๊ณผ๋ฐ˜์ˆ˜์˜ ๋ณต์ œ๋ณธ ์„ธํŠธ ๋ฉค๋ฒ„๊ฐ€ ์ถฉ๋Œํ–ˆ๋‹ค๊ฐ€ ๋‹ค์‹œ ์‹œ์ž‘๋˜๋Š” ๊ฒฝ์šฐ, writeConcernMajorityJournalDefault๊ฐ€ ๊ธฐ๋ณธ ์ƒํƒœ์ธ true๋กœ ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฉด ์ฝ๊ธฐ ๊ณ ๋ ค์—์„œ ๋ฐ˜ํ™˜๋œ ๋ฌธ์„œ๊ฐ€ ์ง€์†๋ฉ๋‹ˆ๋‹ค.

writeConcernMajorityJournalDefault๋ฅผ false๋กœ ์„ค์ •ํ•˜๋ฉด MongoDB๋Š” w: "majority" ์“ฐ๊ธฐ๊ฐ€ ๋””์Šคํฌ ์ €๋„์— ์ž‘์„ฑ๋˜๋Š” ๊ฒƒ์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ์“ฐ๊ธฐ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ฃผ์–ด์ง„ ๋ณต์ œ๋ณธ ์„ธํŠธ์˜ ๋…ธ๋“œ ๊ณผ๋ฐ˜์ˆ˜ ์ด์ƒ์ด ์ผ์‹œ์ ์œผ๋กœ ์†์‹ค๋œ ๊ฒฝ์šฐ(์ถฉ๋Œ, ์žฌ์‹œ์ž‘ ๋“ฑ), "majority" ์“ฐ๊ธฐ ์ž‘์—…์ด ๋กค๋ฐฑ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ€์šฉ์„ฑ:
  • ์ฝ๊ธฐ ๊ณ ๋ ค "linearizable"๋Š” ์ธ๊ณผ์ ์œผ๋กœ ์ผ๊ด€์ ์ธ ์„ธ์…˜ ๋ฐ ํŠธ๋žœ์žญ์…˜๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

  • ์ฝ๊ธฐ ์ž‘์—…์— ์„ ํ˜•ํ™” ๊ฐ€๋Šฅํ•œ ์ฝ๊ธฐ ๊ณ ๋ ค๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์€ primary์—์„œ๋งŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

$out ๋˜๋Š” $merge ๋‹จ๊ณ„๋Š” ์ฝ๊ธฐ ๊ณ ๋ ค "linearizable"๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ฆ‰, db.collection.aggregate()์— "linearizable" ์ฝ๊ธฐ ๊ณ ๋ ค๋ฅผ ์ง€์ •ํ•˜๋ฉด ํŒŒ์ดํ”„๋ผ์ธ์— ๋‘˜ ์ค‘ ๊ทธ ์–ด๋–ค ๋‹จ๊ณ„๋„ ํฌํ•จํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์š”๊ตฌ ์‚ฌํ•ญ:

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

  • ์ด ์ฟผ๋ฆฌ๋Š” ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•œ ํ•„๋“œ๋ฅผ ์ฟผ๋ฆฌ์˜ ๊ฒ€์ƒ‰ ํ‚ค๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด _id ํ•„๋“œ์—์„œ ๊ฒ€์ƒ‰ํ•˜๊ฑฐ๋‚˜ $natural์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ๋™์‹œ ์—…๋ฐ์ดํŠธ๋Š” ์ฟผ๋ฆฌ์˜ ๊ฒ€์ƒ‰ ํ‚ค๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ๊ฒ€์ƒ‰ ํ‚ค์—๋Š” ๊ณ ์œ  ์ธ๋ฑ์Šค๊ฐ€ ์žˆ๊ณ  ์ฟผ๋ฆฌ๋Š” ํ•ด๋‹น ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์œ„์˜ ๊ธฐ์ค€ ์ค‘ ํ•˜๋‚˜๋ผ๋„ ์ถฉ์กฑ๋˜๋ฉด ์ฟผ๋ฆฌ๋Š” ์ผ๊ด€์ ์ธ ์Šค๋ƒ…์ƒท์„ ์ฝ์–ด ์ผ์น˜ํ•˜๋Š” ๋ฌธ์„œ ํ•˜๋‚˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

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

์ž์„ธํ•œ ๋‚ด์šฉ์€ "linearizable" ๋„์›€๋ง ํŽ˜์ด์ง€๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์ฝ๊ธฐ ๊ณ ๋ ค "snapshot"๊ฐ€ ์„ค์ •๋œ ์ฟผ๋ฆฌ๋Š” ์ตœ๊ทผ์— ์žˆ์—ˆ๋˜ ํŠน์ • ๋‹จ์ผ ์‹œ์ ์— ์ƒค๋“œ ์ „์ฒด์— ํ‘œ์‹œ๋œ ๊ณผ๋ฐ˜์ˆ˜ ์ด์ƒ์ด ์ปค๋ฐ‹ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ฝ๊ธฐ ๊ณ ๋ ค "snapshot"๋Š” ํŠธ๋žœ์žญ์…˜์ด ์“ฐ๊ธฐ ๊ณ ๋ ค "majority"๋กœ ์ปค๋ฐ‹๋˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ๋ณด์žฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

If a transaction is not part of a causally consistent session, upon transaction commit with write concern "majority", the transaction operations are guaranteed to have read from a snapshot of majority-committed data.
If a transaction is part of a causally consistent session, upon transaction commit with write concern "majority", the transaction operations are guaranteed to have read from a snapshot of majority-committed data that provides causal consistency with the operation immediately preceding the transaction start.

๊ฐ€์šฉ์„ฑ:

์ฝ๊ธฐ ๊ณ ๋ ค "snapshot"์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํŠธ๋žœ์žญ์…˜ ์ˆ˜์ค€์—์„œ ์ฝ๊ธฐ ๊ณ ๋ ค๋ฅผ ์„ค์ •ํ•œ ๋‹ค์ค‘ ๋ฌธ์„œ ํŠธ๋žœ์žญ์…˜ ๋‚ด ๋ชจ๋“  ์ฝ๊ธฐ ์ž‘์—…

  • ๋‹ค์ค‘ ๋ฌธ์„œ ํŠธ๋žœ์žญ์…˜ ์™ธ๋ถ€์˜ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฉ”์„œ๋“œ:

    • find

    • aggregate

    • distinct (์ƒค๋”ฉ๋˜์ง€ ์•Š์€ ์ปฌ๋ ‰์…˜์—์„œ)

    ๋‹ค๋ฅธ ๋ชจ๋“  ์ฝ๊ธฐ ์ž‘์—…์€ "snapshot"์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.

์ฝ๊ธฐ ๊ณ ๋ ค ์ˆ˜์ค€์— ๊ด€๊ณ„์—†์ด ๋…ธ๋“œ์˜ ์ตœ์‹  ๋ฐ์ดํ„ฐ๋Š” ์‹œ์Šคํ…œ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ตœ์‹  ๋ฒ„์ „์„ ๋ฐ˜์˜ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ ์ฝ๊ธฐ ๊ณ ๋ ค ์ˆ˜์ค€์— ๊ด€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‹ค์Œ์—์„œ ํ™•์ธํ•˜์„ธ์š”.

๋‹ค์ค‘ ๋ฌธ์„œ ํŠธ๋žœ์žญ์…˜์—์„œ ์‹คํ–‰๋˜์ง€ ์•Š๋Š” ์ž‘์—…์˜ ๊ฒฝ์šฐ, readConcern ์ˆ˜์ค€์„ ์ฝ๊ธฐ ๊ณ ๋ ค๋ฅผ ์ง€์›ํ•˜๋Š” ๋ช…๋ น๊ณผ ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•œ ์˜ต์…˜์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

readConcern: { level: <level> }

mongosh ๋ฉ”์„œ๋“œ์— db.collection.find()์— ๋Œ€ํ•œ ์ฝ๊ธฐ ๊ณ ๋ ค ์ˆ˜์ค€์„ ์ง€์ •ํ•˜๋ ค๋ฉด cursor.readConcern() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

db.collection.find().readConcern(<level>)

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

์ค‘์š”

๊ฐœ๋ณ„ ์ž‘์—…์—์„œ๋Š” ์ฝ๊ธฐ ๊ณ ๋ ค๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์„ค์ •ํ•˜๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ํŠธ๋žœ์žญ์…˜์— ๋Œ€ํ•œ ์ฝ๊ธฐ ๊ด€์‹ฌ์‚ฌ๋ฅผ ์„ค์ •ํ•˜๋ ค๋ฉด ์ฝ๊ธฐ ๊ณ ๋ ค/์“ฐ๊ธฐ ๊ณ ๋ ค/์ฝ๊ธฐ ์„ค์ •์„ ์ฐธ์กฐํ•˜์„ธ์š”.

ํŠธ๋žœ์žญ์…˜ ์‹œ์ž‘ ์‹œ ์ฝ๊ธฐ ๊ณ ๋ ค๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋‹ค์ค‘ ๋ฌธ์„œ ํŠธ๋žœ์žญ์…˜์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ๊ธฐ ๊ณ ๋ ค ์ˆ˜์ค€์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋‹ค์ค‘ ๋ฌธ์„œ ํŠธ๋žœ์žญ์…˜์˜ ์ผ๋ถ€์ธ ์“ฐ๊ธฐ ๋ช…๋ น์€ ํŠธ๋žœ์žญ์…˜ ์ˆ˜์ค€์˜ ์ฝ๊ธฐ ๊ณ ๋ ค๋ฅผ ์ง€์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํŠธ๋žœ์žญ์…˜ ๋‚ด์—์„œ ์ปฌ๋ ‰์…˜๊ณผ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ปฌ๋ ‰์…˜ ๋˜๋Š” ์ธ๋ฑ์Šค๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ ํŠธ๋žœ์žญ์…˜์€ ์ฝ๊ธฐ ๊ณ ๋ ค "local"์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ปฌ๋ ‰์…˜์„ ์•”์‹œ์ ์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ ํŠธ๋žœ์žญ์…˜์— ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ฝ๊ธฐ ๊ณ ๋ ค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŠธ๋žœ์žญ์…˜ ์‹œ์ž‘ ์‹œ ์ˆ˜์ค€์ด ์ง€์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ํŠธ๋žœ์žญ์…˜์€ ์„ธ์…˜ ์ˆ˜์ค€์˜ ์ฝ๊ธฐ ๊ณ ๋ ค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ์ด๊ฒƒ์ด ์„ค์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋Š” ํด๋ผ์ด์–ธํŠธ ์ˆ˜์ค€์˜ ์ฝ๊ธฐ ๊ณ ๋ ค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ ํŠธ๋žœ์žญ์…˜ ์ฝ๊ธฐ ๊ณ ๋ ค๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์ธ๊ณผ์ ์œผ๋กœ ์ผ๊ด€์ ์ธ ์„ธ์…˜์—์„œ ์‹คํ–‰ํ•˜๋Š” ์ž‘์—…์—๋Š” "local", "majority" ๋ฐ "snapshot" ์ˆ˜์ค€์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ธ๊ณผ ๊ด€๊ณ„์˜ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•˜๋ ค๋ฉด "majority"๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ธ๊ณผ์  ์ผ๊ด€์„ฑ์—์„œ ํ™•์ธํ•˜์„ธ์š”.

๋‹ค์Œ ์ž‘์—…์€ ์ฝ๊ธฐ ๊ณ ๋ ค๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์ค‘์š”

ํŠธ๋žœ์žญ์…˜ ๋‚ด ์ž‘์—…์— ์ฝ๊ธฐ ๊ณ ๋ ค๋ฅผ ์„ค์ •ํ•˜๋ ค๋ฉด ๊ฐœ๋ณ„ ์ž‘์—… ์ˆ˜์ค€์ด ์•„๋‹Œ ํŠธ๋žœ์žญ์…˜ ์ˆ˜์ค€์—์„œ ์ฝ๊ธฐ ๊ณ ๋ ค๋ฅผ ์„ค์ •ํ•˜์„ธ์š”. ํŠธ๋žœ์žญ์…˜ ๋‚ด ๊ฐœ๋ณ„ ์ž‘์—…์—๋Š” ์ฝ๊ธฐ ๊ณ ๋ ค๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์„ค์ •ํ•˜๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ฑฐ๋ž˜ ๋ฐ ์šฐ๋ ค ์‚ฌํ•ญ ์ฝ๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

๋ช…๋ น/๋ฉ”์„œ๋“œ
โœ“
โœ“
โœ“
โœ“
โœ“
โœ“
โœ“

โœ“ [2]

โœ“
โœ“
โœ“
โœ“
โœ“
โœ“
โœ“
โœ“
โœ“
โœ“
โœ“
โœ“
โœ“
โœ“
โœ“
โœ“
โœ“

โœ“ [3]

โœ“
โœ“
โœ“
[1] $out ๋˜๋Š” $merge ๋‹จ๊ณ„๋Š” ์ฝ๊ธฐ ๊ณ ๋ ค "linearizable"๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ฆ‰, db.collection.aggregate()์— "linearizable" ์ฝ๊ธฐ ๊ณ ๋ ค๋ฅผ ์ง€์ •ํ•˜๋ฉด ํŒŒ์ดํ”„๋ผ์ธ์— ๋‘˜ ์ค‘ ๊ทธ ์–ด๋–ค ๋‹จ๊ณ„๋„ ํฌํ•จํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
[2] ์ฝ๊ธฐ ๊ณ ๋ ค "snapshot"์€ ํŠน์ • ์ฝ๊ธฐ ์ž‘์—… ๋ฐ ๋‹ค์ค‘ ๋ฌธ์„œ ํŠธ๋žœ์žญ์…˜์—๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠธ๋žœ์žญ์…˜์—์„œ๋Š” ์ƒค๋“œ ์ปฌ๋ ‰์…˜์— distinct ๋ช…๋ น์ด๋‚˜ ํ—ฌํผ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ, ๋‹ค์Œ ์“ฐ๊ธฐ ์ž‘์—…์€ ๋‹ค์ค‘ ๋ฌธ์„œ ํŠธ๋žœ์žญ์…˜์˜ ์ผ๋ถ€์ธ ๊ฒฝ์šฐ ์ฝ๊ธฐ ๊ณ ๋ ค๋ฅผ ์ˆ˜๋ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ค‘์š”

ํŠธ๋žœ์žญ์…˜ ๋‚ด ์ž‘์—…์— ์ฝ๊ธฐ ๊ณ ๋ ค๋ฅผ ์„ค์ •ํ•˜๋ ค๋ฉด ๊ฐœ๋ณ„ ์ž‘์—… ์ˆ˜์ค€์ด ์•„๋‹Œ ํŠธ๋žœ์žญ์…˜ ์ˆ˜์ค€์—์„œ ์ฝ๊ธฐ ๊ณ ๋ ค๋ฅผ ์„ค์ •ํ•˜์„ธ์š”.

[3](1, 2) ์ฝ๊ธฐ ๊ณ ๋ ค "snapshot"์€ ํŠน์ • ์ฝ๊ธฐ ์ž‘์—… ๋ฐ ๋‹ค์ค‘ ๋ฌธ์„œ ํŠธ๋žœ์žญ์…˜์—๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠธ๋žœ์žญ์…˜์˜ ๊ฒฝ์šฐ ํŠธ๋žœ์žญ์…˜ ์ˆ˜์ค€์—์„œ ์ฝ๊ธฐ ๊ณ ๋ ค๋ฅผ ์„ค์ •ํ•˜์„ธ์š”. "snapshot"์„ ์ง€์›ํ•˜๋Š” ํŠธ๋žœ์žญ์…˜ ์ž‘์—…์€ ํŠธ๋žœ์žญ์…˜์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” CRUD ์ž‘์—…์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ํŠธ๋žœ์žญ์…˜ ๋ฐ ์ฝ๊ธฐ ๊ณ ๋ ค์—์„œ ํ™•์ธํ•˜์„ธ์š”.

๋กœ์ปฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์ฝ๊ธฐ ๊ณ ๋ ค๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. MongoDB๋Š” ๋กœ์ปฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ปฌ๋ ‰์…˜์—์„œ์˜ ์ž‘์—…์— ๋Œ€ํ•ด ๊ตฌ์„ฑ๋œ ์ฝ๊ธฐ ๊ณ ๋ ค๋ฅผ ์ž๋™์œผ๋กœ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.

์“ฐ๊ธฐ์—์„œ ์Šน์ธ์„ ์š”์ฒญํ•˜๋Š” ๊ฒฝ์šฐ ์ธ๊ณผ์ ์œผ๋กœ ์ผ๊ด€๋œ ์„ธ์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž์‹ ์˜ ์“ฐ๊ธฐ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

"linearizable" ์ฝ๊ธฐ ๊ณ ๋ ค๋ฅผ "majority" ์“ฐ๊ธฐ ๊ณ ๋ ค์™€ ๊ฒฐํ•ฉํ•ด ์‚ฌ์šฉํ•˜๋ฉด ๋งˆ์น˜ ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ณต์ˆ˜์˜ ์ž‘์—…์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ณต์ˆ˜์˜ ์ฝ๊ธฐ ์ž‘์—…๊ณผ ์“ฐ๊ธฐ ์ž‘์—…์„ ์‹คํ–‰ํ•˜๋„๋ก ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด๋Ÿฌํ•œ ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ์— ํ•ด๋‹นํ•˜๋Š” ์ผ์ •์ด ์„ ํ˜•ํ™” ๊ฐ€๋Šฅํ•œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค.

"majority"์™€๋Š” ๋‹ฌ๋ฆฌ, "linearizable" ์ฝ๊ธฐ ๊ณ ๋ ค๋Š” ์„ธ์ปจ๋”๋ฆฌ ๋ฉค๋ฒ„์— ์ฝ๊ธฐ ์ž‘์—…์ด { w: "majority" } ์“ฐ๊ธฐ ๊ณ ๋ ค๋กœ ์“ฐ๊ธฐ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋ผ์ด๋จธ๋ฆฌ๋กœ๋ถ€ํ„ฐ ์ฝ๊ธฐ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์žˆ์Œ์„ ํ™•์ธํ•ด ์ค๋‹ˆ๋‹ค. [4] ๋”ฐ๋ผ์„œ ์„ ํ˜•ํ™” ๊ฐ€๋Šฅํ•œ ์ฝ๊ธฐ ๊ณ ๋ ค๊ฐ€ ์„ค์ •๋œ ์ฝ๊ธฐ๊ฐ€ "majority" ๋˜๋Š” "local" ์ฝ๊ธฐ ๊ณ ๋ ค๋ณด๋‹ค ํ›จ์”ฌ ๋Š๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

db.restaurants.find( { _id: 5 } ).readConcern("linearizable").maxTimeMS(10000)
db.runCommand( {
find: "restaurants",
filter: { _id: 5 },
readConcern: { level: "linearizable" },
maxTimeMS: 10000
} )
[4] ์ผ๋ถ€ ์ƒํ™ฉ์—์„œ๋Š” ๋ณต์ œ๋ณธ ์„ธํŠธ์˜ ๋‘ ๋…ธ๋“œ๊ฐ€ ์ผ์‹œ์ ์œผ๋กœ ์ž์‹ ์ด ์ฃผ ๋…ธ๋“œ๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, { w: "majority" }๊ฐœ์˜ ์“ฐ๊ธฐ ์šฐ๋ ค๋กœ ์“ฐ๊ธฐ๋ฅผ ์™„๋ฃŒํ•  ์ˆ˜ ์žˆ๋Š” ๋…ธ๋“œ๋Š” ์ตœ๋Œ€ ํ•œ ๊ฐœ๋ฟ์ž…๋‹ˆ๋‹ค. { w: "majority" }๊ฐœ์˜ ์“ฐ๊ธฐ๋ฅผ ์™„๋ฃŒํ•  ์ˆ˜ ์žˆ๋Š” ๋…ธ๋“œ๊ฐ€ ํ˜„์žฌ์˜ ์ฃผ ๋…ธ๋“œ์ด๊ณ , ๋‹ค๋ฅธ ๋…ธ๋“œ๋Š” ๋ณดํ†ต ๋„คํŠธ์›Œํฌ ํŒŒํ‹ฐ์…˜์œผ๋กœ ์ธํ•ด ๊ฐ•๋“ฑ๋œ ๊ฒƒ์„ ์•„์ง ์ธ์‹ํ•˜์ง€ ๋ชปํ•œ ์ด์ „์˜ ์ฃผ ๋…ธ๋“œ์ž…๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์ด์ „ ์ฃผ ๋…ธ๋“œ์— ์—ฐ๊ฒฐํ•œ ํด๋ผ์ด์–ธํŠธ๋Š” ์ฝ๊ธฐ ๊ธฐ๋ณธ ์„ค์ • primary๋ฅผ ์š”์ฒญํ–ˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์˜ค๋ž˜๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ฒŒ ๋˜๋ฉฐ, ์ด์ „์˜ ์ฃผ ๋…ธ๋“œ์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ์“ฐ๊ธฐ๋Š” ๊ฒฐ๊ตญ ๋กค๋ฐฑ๋ฉ๋‹ˆ๋‹ค.

MongoDB๋Š” ์ธ๊ณผ์ ์œผ๋กœ ์ผ๊ด€์ ์ธ ์„ธ์…˜์— ๋Œ€ํ•œ ์ง€์›์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์ธ๊ณผ์ ์œผ๋กœ ์ผ๊ด€์ ์ธ ์„ธ์…˜๊ณผ ๊ด€๋ จ๋œ ์ฝ๊ธฐ ์ž‘์—…์˜ ๊ฒฝ์šฐ, MongoDB๋Š” ์ธ๊ณผ์ ์œผ๋กœ ์ผ๊ด€์ ์ธ ์„ธ์…˜๊ณผ ๊ด€๋ จ๋œ ์ž‘์—…์—์„œ ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์ž๋™์œผ๋กœ afterClusterTime ์ฝ๊ธฐ ๊ณ ๋ ค ์˜ต์…˜์„ ์„ค์ •ํ•˜๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์ค‘์š”

์ฝ๊ธฐ ์ž‘์—…์— afterClusterTime์„ ์ˆ˜๋™์œผ๋กœ ์„ค์ •ํ•˜์ง€ ๋งˆ์„ธ์š”. MongoDB ๋“œ๋ผ์ด๋ฒ„๋Š” ์ธ๊ณผ์ ์œผ๋กœ ์ผ๊ด€์ ์ธ ์„ธ์…˜๊ณผ ๊ด€๋ จ๋œ ์ž‘์—…์— ์ด ๊ฐ’์„ ์ž๋™์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ํด๋ผ์ด์–ธํŠธ ์„ธ์…˜์˜ ์ž‘์—…๊ณผ ์ผ์น˜ํ•˜๋„๋ก ์„ธ์…˜์˜ ์ž‘์—… ์‹œ๊ฐ„๊ณผ ํด๋Ÿฌ์Šคํ„ฐ ์‹œ๊ฐ„์„ ์•ž๋‹น๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ์‹œ์—์„œ ์˜ˆ์‹œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์ฐธ๊ณ 

atClusterTime์€ afterClusterTime์™€ ํ•จ๊ป˜ ์ง€์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ฝ๊ธฐ ๊ณ ๋ ค "snapshot"๊ณผ ํ•จ๊ป˜ atClusterTime์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์ธ๊ณผ์ ์œผ๋กœ ์ผ๊ด€์ ์ธ ์„ธ์…˜์„ ๋น„ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

afterClusterTime ๊ฐ’์ด T์ธ ์ฝ๊ธฐ ์š”์ฒญ์„ ์ถฉ์กฑํ•˜๋ ค๋ฉด ๋ฐ˜๋“œ์‹œ oplog๊ฐ€ ์‹œ๊ฐ„ T์— ๋„๋‹ฌํ•œ ํ›„ mongod๊ฐ€ ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. oplog๊ฐ€ ์‹œ๊ฐ„ T์— ๋„๋‹ฌํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ mongod๋Š” ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค.

afterClusterTime์ด ์ง€์ •๋œ ์ฝ๊ธฐ ์ž‘์—…์€ ์ฝ๊ธฐ ๊ณ ๋ ค ์ˆ˜์ค€ ์š”๊ตฌ ์‚ฌํ•ญ๊ณผ ์ง€์ •๋œ afterClusterTime ์š”๊ตฌ ์‚ฌํ•ญ์„ ๋ชจ๋‘ ์ถฉ์กฑํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์ธ๊ณผ์ ์œผ๋กœ ์ผ๊ด€์ ์ธ ์„ธ์…˜๊ณผ ๊ด€๋ จ์ด ์—†๋Š” ์ฝ๊ธฐ ์ž‘์—…์˜ ๊ฒฝ์šฐ afterClusterTime์ด ์„ค์ •๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

MongoDB๋Š” ํŠน์ • ์ฝ๊ธฐ ๊ณ ๋ ค์˜ ์›์ธ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ฝ๊ธฐ ๊ณ ๋ ค provenance๋ฅผ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค. provenance๋Š” getLastError ์ง€ํ‘œ, ์ฝ๊ธฐ ๊ณ ๋ ค ์˜ค๋ฅ˜ ๊ฐ์ฒด, MongoDB ๋กœ๊ทธ์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ํ‘œ๋Š” ๊ฐ€๋Šฅํ•œ ์ฝ๊ธฐ provenance ๊ณ ๋ ค ์˜ ๊ฐ’๊ณผ ๊ทธ ์ค‘์š”์„ฑ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

์ถœ์ฒ˜
์„ค๋ช…

clientSupplied

์ฝ๊ธฐ ์šฐ๋ ค ์‚ฌํ•ญ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ง€์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

customDefault

์ฝ๊ธฐ ๊ณ ๋ ค๊ฐ€ ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•œ ๊ธฐ๋ณธ๊ฐ’์—์„œ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. setDefaultRWConcern์„ ์ฐธ์กฐํ•˜์„ธ์š”.

implicitDefault

๋‹ค๋ฅธ ๋ชจ๋“  ์ฝ๊ธฐ ๊ณ ๋ ค ์‚ฌ์–‘์ด ๋ถ€์žฌํ•ด ์„œ๋ฒ„์—์„œ ์ฝ๊ธฐ ๊ณ ๋ ค๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

๋Œ์•„๊ฐ€๊ธฐ

GeoJSON ๊ฐ์ฒด