Docs Menu

๊ฐœ๋ฐœ ์ฒดํฌ๋ฆฌ์ŠคํŠธ

๋‹ค์Œ ์ฒดํฌ ๋ฆฌ์ŠคํŠธ๋Š” ์ž์ฒด ๊ด€๋ฆฌ ๋ฐฐํฌ์„œ๋ฒ„๋ฅผ ์œ„ํ•œ ์ž‘์—… ์ฒดํฌ๋ฆฌ์ŠคํŠธ ์™€ ํ•จ๊ป˜ ํ”„๋กœ๋•์…˜ MongoDB deployment ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ๊ถŒ์žฅ ์‚ฌํ•ญ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • ๋ณต์ œ๋ณธ ์„ธํŠธ์— ๋ฐ์ดํ„ฐ ๋ณด์œ  ํˆฌํ‘œ ๋…ธ๋“œ๊ฐ€ 3๊ฐœ ์ด์ƒ ํฌํ•จ๋˜์–ด ์žˆ๊ณ  ์“ฐ๊ธฐ ์ž‘์—…์—์„œ w: majority ์“ฐ๊ธฐ ๊ณ ๋ ค๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋ณต์ œ๋ณธ ์„ธํŠธ ์ „์ฒด ๋ฐ์ดํ„ฐ ๋‚ด๊ตฌ์„ฑ์„ ์œ„ํ•ด์„œ๋Š” 3๊ฐœ์˜ ๋ฐ์ดํ„ฐ ๋ณด์œ  ํˆฌํ‘œ ๋…ธ๋“œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  • ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๊ฐ€ ์ €๋„๋ง์„์‚ฌ์šฉํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

MongoDB์˜ ๋ฐ์ดํ„ฐ์—๋Š” ๋™์  ์Šคํ‚ค๋งˆ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ปฌ๋ ‰์…˜์€ ๋ฌธ์„œ ๊ตฌ์กฐ๋ฅผ ๊ฐ•์ œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋ฐ˜๋ณต์ ์ธ ๊ฐœ๋ฐœ๊ณผ ๋‹คํ˜•์„ฑ์„ ์šฉ์ดํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์ปฌ๋ ‰์…˜์—๋Š” ๋งค์šฐ ๋™์งˆ์ ์ธ ๊ตฌ์กฐ์˜ ๋ฌธ์„œ๊ฐ€ ๋ณด๊ด€๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง์„ ์ฐธ์กฐํ•˜์„ธ์š”.

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

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

  • ์Šคํ‚ค๋งˆ ์„ค๊ณ„๊ฐ€ ์ œํ•œ ์—†์ด ๊ธธ์ด๊ฐ€ ์ฆ๊ฐ€ํ•˜๋Š” ์ธ๋ฑ์Šค ๋ฐฐ์—ด์— ์˜์กดํ•˜์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ด๋Ÿฌํ•œ ์ธ๋ฑ์‹ฑ๋œ ๋ฐฐ์—ด์˜ ์š”์†Œ๊ฐ€ 1000๊ฐœ ๋ฏธ๋งŒ์ผ ๋•Œ ์ตœ์ƒ์˜ ์„ฑ๋Šฅ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์Šคํ‚ค๋งˆ๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ ๋ฌธ์„œ ํฌ๊ธฐ ์ œํ•œ์„ ๊ณ ๋ คํ•ฉ๋‹ˆ๋‹ค. BSON ๋ฌธ์„œ ํฌ๊ธฐ ์ œํ•œ์€ ๋ฌธ์„œ๋‹น 16 MB์ž…๋‹ˆ๋‹ค. ๋” ํฐ ๋ฌธ์„œ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ GridFS๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ํˆฌํ‘œ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ง„ํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ํˆฌํ‘œ ๋ฉค๋ฒ„ ์ˆ˜๋ฅผ ํ™€์ˆ˜๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ํˆฌํ‘œ ๋ฉค๋ฒ„๋Š” ์ตœ๋Œ€ 7๊ฐœ๋ฅผ ๋ณด์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํˆฌํ‘œ ๋ฉค๋ฒ„์˜ ์ˆ˜๊ฐ€ ์ง์ˆ˜์ด๊ณ  ๋น„์šฉ๊ณผ ๊ฐ™์€ ์ œ์•ฝ ์กฐ๊ฑด์œผ๋กœ ์ธํ•ด ๋‹ค๋ฅธ ์„ธ์ปจ๋”๋ฆฌ๋ฅผ ํˆฌํ‘œ ๋ฉค๋ฒ„๋กœ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ๊ธˆ์ง€๋œ ๊ฒฝ์šฐ ์ค‘์žฌ์ž๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ํ™€์ˆ˜ ํˆฌํ‘œ ์ˆ˜๋ฅผ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฉค๋ฒ„๊ฐ€ 3๊ฐœ์ธ ๋ณต์ œ๋ณธ ์„ธํŠธ(P-S-A)์— ์ค‘์žฌ์ž๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๊ณ ๋ คํ•ด์•ผ ํ•  ์ถ”๊ฐ€ ์‚ฌํ•ญ์€ ๋ณต์ œ๋ณธ ์„ธํŠธ ์ค‘์žฌ์ž๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

  • ๋ชจ๋‹ˆํ„ฐ๋ง ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์ ์ ˆํ•œ ์“ฐ๊ธฐ ๊ณ ๋ ค (write concern)๋ฅผ ์ง€์ •ํ•˜์—ฌ ์„ธ์ปจ๋”๋ฆฌ๋ฅผ ์ตœ์‹  ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜์„ธ์š”.

  • ์ „์ฒด ์ฝ๊ธฐ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ํ™•์žฅํ•˜๊ธฐ ์œ„ํ•ด ์„ธ์ปจ๋”๋ฆฌ ์ฝ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์„ธ์š”. ์ฐธ์กฐ: ์ฝ๊ธฐ ํ™•์žฅ์˜ ๊ฐœ์š”์— ๋Œ€ํ•ด ๋” ๋งŽ์€ ๋ณต์ œ๋ณธ ๋…ธ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ(Can I use more replica nodes to scale)๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. ์„ธ์ปจ๋”๋ฆฌ ์ฝ๊ธฐ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ฝ๊ธฐ ์„ค์ •์„ ์ฐธ์กฐํ•˜์„ธ์š”.

  • ์ƒค๋“œ ํ‚ค๊ฐ€ ์ƒค๋“œ์— ๋ถ€ํ•˜๋ฅผ ๊ณ ๋ฅด๊ฒŒ ๋ถ„์‚ฐ์‹œํ‚ค๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ƒค๋“œ ํ‚ค๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

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

  • Secondaries no longer return orphaned data unless using read concern "available" (which is the default read concern for reads against secondaries when not associated with causally consistent sessions).
    All members of the shard replica set maintain chunk metadata, allowing them to filter out orphans when not using "available". As such, non-targeted or broadcast queries that are not using "available" can be safely run on any member and will not return orphaned data.
    The "available" read concern can return orphaned documents from secondary members since it does not check for updated chunk metadata. However, if the return of orphaned documents is immaterial to an application, the "available" read concern provides the lowest latency reads possible among the various read concerns.
  • ํ•ด์‹œ๋˜์ง€ ์•Š์€ ์ƒˆ๋กœ์šด ์ƒค๋”ฉ๋œ ์ปฌ๋ ‰์…˜์— ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์„ธํŠธ๋ฅผ ์‚ฝ์ž…ํ•  ๋•Œ ์ฒญํฌ๋ฅผ ์‚ฌ์ „ ๋ถ„ํ• ํ•˜๊ณ  ์ˆ˜๋™์œผ๋กœ ๋ฐธ๋Ÿฐ์‹ฑํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์ „ ๋ถ„ํ•  ๋ฐ ์ˆ˜๋™ ๋ฐธ๋Ÿฐ์‹ฑ์„ ํ†ตํ•ด ์‚ฝ์ž… ๋ถ€ํ•˜๋ฅผ ์ƒค๋“œ ๊ฐ„์— ๋ถ„์‚ฐํ•˜์—ฌ ์ดˆ๊ธฐ ๋ถ€ํ•˜์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์—ฐ๊ฒฐ ํ’€๋ง์„ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ MongoDB ๋“œ๋ผ์ด๋ฒ„๋Š” ์—ฐ๊ฒฐ ํ’€๋ง์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ๋™์‹œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์š”์ฒญ ์ˆ˜์˜ 110-115%๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋งž๊ฒŒ ์—ฐ๊ฒฐ ํ’€ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ณต์ œ๋ณธ ์„ธํŠธ ํˆฌํ‘œ ์ค‘์— ์ผ์‹œ์ ์ธ ์“ฐ๊ธฐ ๋ฐ ์ฝ๊ธฐ ์˜ค๋ฅ˜๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํŒจํ•œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ํ•ด๋‹น๋˜๋Š” ๊ฒฝ์šฐ ๋‹ค์‹œ ์‹œ๋„ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋“œ๋ผ์ด๋ฒ„๋Š” ์‹คํŒจํ•œ ์š”์ฒญ์„ ์ž๋™์œผ๋กœ ๋‹ค์‹œ ์‹œ๋„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์š”์ฒญ ์žฌ์‹œ๋„์— ์ง€์ˆ˜ ๋ฐฑ์˜คํ”„ ๋กœ์ง์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์˜ ์‹คํ–‰ ์‹œ๊ฐ„์„ ์ œํ•œํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์ฝ๊ธฐ์—๋Š” cursor.maxTimeMS()์„ ์‚ฌ์šฉํ•˜๊ณ  ์“ฐ๊ธฐ์—๋Š” wtimeout์„ ์‚ฌ์šฉํ•˜์„ธ์š”.