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

์ฝœ๋ชจ๋“œ

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

  • ์ •์˜
  • ํ˜ธํ™˜์„ฑ
  • ๊ตฌ๋ฌธ
  • ์˜ต์…˜
  • ์ธ๋ฑ์Šค ์˜ต์…˜
  • ๋ฌธ์„œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ
  • ์กฐํšŒ์ˆ˜
  • Time Series ์ปฌ๋ ‰์…˜
  • ์ œํ•œ ์ปฌ๋ ‰์…˜ ํฌ๊ธฐ ์กฐ์ •
  • ์ „ํ›„ ์ด๋ฏธ์ง€๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฌธ์„œ์˜ Change Streams
  • ๋Œ“๊ธ€ ์ฒจ๋ถ€
  • ์“ฐ๊ธฐ ๊ณ ๋ ค
  • ์•ก์„ธ์Šค ์ œ์–ด
  • ํ–‰๋™
  • ๋ฆฌ์†Œ์Šค ์ž ๊ธˆ
  • ์˜ˆ์‹œ
  • ์ธ๋ฑ์Šค์˜ ๋งŒ๋ฃŒ ๊ฐ’ ๋ณ€๊ฒฝ
  • ์ฟผ๋ฆฌ ํ”Œ๋ž˜๋„ˆ์—์„œ ์ธ๋ฑ์Šค ์ˆจ๊ธฐ๊ธฐ
collMod

collMod ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ปฌ๋ ‰์…˜์— ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๋ณด๊ธฐ ์ •์˜๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒ

mongosh์—์„œ ์ด ๋ช…๋ น์€ hideIndex() ๋ฐ unhideIndex() ๋„์šฐ๋ฏธ ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์‹คํ–‰ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

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

์ฐธ๊ณ 

์ด ๋ช…๋ น์œผ๋กœ ์ˆ˜์ •๋œ ๋ทฐ๋Š” ๊ตฌ์ฒดํ™”๋œ ๋ทฐ๋ฅผ ์ฐธ์กฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜จ๋””๋งจ๋“œ ๊ตฌ์ฒดํ™”๋œ ๋ณด๊ธฐ์— ๋Œ€ํ•œ ์„ค๋ช…์€ $merge๋ฅผ ๋Œ€์‹  ์ฐธ์กฐํ•˜์„ธ์š”.

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

  • MongoDB Atlas: ํด๋ผ์šฐ๋“œ์—์„œ์˜ MongoDB ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ์™„์ „ ๊ด€๋ฆฌํ˜• ์„œ๋น„์Šค

์ฐธ๊ณ 

์ด ๋ช…๋ น์€ ๋ชจ๋“  MongoDB Atlas ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์ง€์›๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ช…๋ น์— ๋Œ€ํ•œ Atlas ์ง€์›์— ๊ด€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๋ ค๋ฉด ์ง€์›๋˜์ง€ ์•Š๋Š” ๋ช…๋ น์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

  • MongoDB Enterprise: MongoDB์˜ ๊ตฌ๋… ๊ธฐ๋ฐ˜ ์ž์ฒด ๊ด€๋ฆฌ ๋ฒ„์ „

  • MongoDB Community: MongoDB์˜ ์†Œ์Šค ์‚ฌ์šฉ ๊ฐ€๋Šฅ ๋ฌด๋ฃŒ ์ž์ฒด ๊ด€๋ฆฌ ๋ฒ„์ „

๋ช…๋ น์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ๋ฌธ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค:

์ฐธ๊ณ 

MongoDB 4.2๋ถ€ํ„ฐ

  • collMod ๋ช…๋ น์— ๋Œ€ํ•œ noPadding ๋ฐ usePowerOf2Sizes MMAPv1 ์˜ต์…˜์ด ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • ๋ณด๊ธฐ ์ •์˜ pipeline์—๋Š” $out ๋˜๋Š” $merge ๋‹จ๊ณ„๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด ์ œํ•œ์€ $lookup ๋‹จ๊ณ„ ๋˜๋Š” $facet ๋‹จ๊ณ„์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํŒŒ์ดํ”„๋ผ์ธ๊ณผ ๊ฐ™์€ ์ž„๋ฒ ๋””๋“œ ํŒŒ์ดํ”„๋ผ์ธ์—๋„ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

db.runCommand(
{
collMod: <collection or view>,
<option1>: <value1>,
<option2>: <value2>,
...
}
)

<collection or view>์— ํ˜„์žฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์žˆ๋Š” ์ปฌ๋ ‰์…˜ ๋˜๋Š” ๋ทฐ์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

์ธ๋ฑ์Šค ์˜ต์…˜์„ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ๋ณ€๊ฒฝํ•˜๋ ค๋Š” ๊ธฐ์กด ์ธ๋ฑ์Šค ์˜ต์…˜์˜ ํ‚ค ํŒจํ„ด ๋˜๋Š” ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

db.runCommand( {
collMod: <collection>,
index: {
keyPattern: <index_spec> | name: <index_name>,
expireAfterSeconds: <number>, // Set the TTL expiration threshold
hidden: <boolean>, // Change index visibility in the query planner
prepareUnique: <boolean>, // Reject new duplicate index entries
unique: <boolean> // Convert an index to a unique index
},
dryRun: <boolean>
} )

์ธ๋ฑ์Šค๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด "cannot find index <name|keyPattern> for ns <db.collection>" ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ ๋ช…๋ น์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

index

index ์˜ต์…˜์€ ๊ธฐ์กด ์ธ๋ฑ์Šค์˜ ๋‹ค์Œ ์†์„ฑ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ธ๋ฑ์Šค ์†์„ฑ
์„ค๋ช…

expireAfterSeconds

TTL ์ปฌ๋ ‰์…˜์˜ ๋งŒ๋ฃŒ ์ž„๊ณ„๊ฐ’์„ ๊ฒฐ์ •ํ•˜๋Š” ์‹œ๊ฐ„(์ดˆ)์ž…๋‹ˆ๋‹ค.

์ œ๋Œ€๋กœ ์‹คํ–‰๋˜๋ฉด ๋‹ค์Œ ํ•ญ๋ชฉ์ด ํฌํ•จ๋œ ๋ฌธ์„œ๊ฐ€ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

  • expireAfterSeconds_new๋‹ค์Œ์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ๊ฐ’ expireAfterSeconds

  • expireAfterSeconds_oldexpireAfterSeconds๋Š” ์ธ๋ฑ์Šค์— ์ด์ „์— expireAfterSeconds ๊ฐ’์ด ์žˆ์—ˆ๋˜ ๊ฒฝ์šฐ์˜ ์ด์ „ ๊ฐ’์ž…๋‹ˆ๋‹ค.

์ธ๋ฑ์Šค ์˜ต์…˜ expireAfterSeconds๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด ์ธ๋ฑ์Šค์˜ $indexStats๊ฐ€ ์žฌ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

MongoDB 5.0 ์ด์ „์— ์ƒ์„ฑ๋œ TTL ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ MongDB 5.0์—์„œ ์ƒ์„ฑ๋œ ๋ฐ์ดํ„ฐ๋ฅผ 5.0 ์ด์ „ ์„ค์น˜์™€ ๋™๊ธฐํ™”ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์ž˜๋ชป๋œ ๊ตฌ์„ฑ ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด NaN์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์„ฑ๋œ ์ธ๋ฑ์Šค๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

TTL ์ธ๋ฑ์Šค expireAfterSeconds ๊ฐ’์€ 0 ๊ณผ 2147483647 ์‚ฌ์ด์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

hidden

์ฟผ๋ฆฌ ํ”Œ๋ž˜๋„ˆ์—์„œ ์ธ๋ฑ์Šค๋ฅผ ์ˆจ๊ธธ์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๋ถ€์šธ์ž…๋‹ˆ๋‹ค.

hidden ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋ฉด ๋ช…๋ น์€ ๋ณ€๊ฒฝ๋œ ์†์„ฑ์— ๋Œ€ํ•œ ์ด์ „ ๊ฐ’(hidden_old)๊ณผ ์ƒˆ ๊ฐ’(hidden_new)์ด ๋ชจ๋‘ ํฌํ•จ๋œ ๋ฌธ์„œ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ hidden ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ(์ฆ‰ ์ด๋ฏธ ์ˆจ๊ฒจ์ง„ ์ธ๋ฑ์Šค๋ฅผ ์ˆจ๊ธฐ๊ฑฐ๋‚˜ ์ด๋ฏธ ์ˆจ๊ธฐ์ง€ ์•Š์€ ์ธ๋ฑ์Šค๋ฅผ ์ˆจ๊ธฐ์ง€ ์•Š๋Š” ๊ฒฝ์šฐ), ์ด ๋ช…๋ น์€ ์ถœ๋ ฅ์—์„œ hidden_old ๋ฐ hidden_new ํ•„๋“œ๋ฅผ ์ƒ๋žตํ•ฉ๋‹ˆ๋‹ค.

์ธ๋ฑ์Šค๋ฅผ ์ˆจ๊ธฐ๋ ค๋ฉด featureCompatibilityVersion์„ 4.4 ์ด์ƒ์œผ๋กœ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ธ๋ฑ์Šค ์˜ต์…˜ hidden์„ ์ˆ˜์ •ํ•˜๋ฉด ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒฝ์šฐ ์ธ๋ฑ์Šค์˜ $indexStats๊ฐ€ ์žฌ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

prepareUnique

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

prepareUnique true์ธ ๊ฒฝ์šฐ DuplicateKey ์˜ค๋ฅ˜๋กœ ์ธํ•ด ์ƒˆ ์ค‘๋ณต ํ•ญ๋ชฉ์ด ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ ์ธ๋ฑ์Šค๋Š” ๊ณ ์œ  ์ธ๋ฑ์Šค๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ธ๋ฑ์Šค๋ฅผ ๋ณ€ํ™˜ํ•˜๋ ค๋ฉด unique ์˜ต์…˜๊ณผ ํ•จ๊ป˜ collMod๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์กด ์ธ๋ฑ์Šค๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜์–ด prepareUnique๊ฐ€ true์ธ ๊ฒฝ์šฐ ์ธ๋ฑ์Šค์— ๊ธฐ์กด์˜ ์ค‘๋ณต ์ธ๋ฑ์Šค ํ•ญ๋ชฉ์ด ์žˆ๋Š”์ง€ ํ™•์ธ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฒ„์ „ 6.0์— ์ถ”๊ฐ€.

unique

์ธ๋ฑ์Šค๊ฐ€ ๊ณ ์œ ํ•œ์ง€ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•˜๋Š” ๋ถ€์šธ์ž…๋‹ˆ๋‹ค.

false ๊ฐ’์€ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

unique๊ฐ€ true์ธ ๊ฒฝ์šฐ collMod๋Š” keyPattern ์ธ๋ฑ์Šค์—์„œ ์ค‘๋ณต์„ ๊ฒ€์ƒ‰ํ•œ ๋‹ค์Œ ์ค‘๋ณต ์ธ๋ฑ์Šค ํ•ญ๋ชฉ์ด ์—†๋Š” ๊ฒฝ์šฐ ๊ณ ์œ  ์ธ๋ฑ์Šค๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์ดˆ๊ธฐ ์Šค์บ” ์ค‘์— ์ค‘๋ณต ํ•ญ๋ชฉ์ด ๊ฐ์ง€๋˜๋ฉด collMod๋Š” CannotConvertIndexToUnique ๋ฐ ์ถฉ๋Œํ•˜๋Š” ๋ฌธ์„œ ๋ชฉ๋ก์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ํ•ญ๋ชฉ์ด ์ค‘๋ณต๋œ ์ธ๋ฑ์Šค๋ฅผ ๊ณ ์œ  ์ธ๋ฑ์Šค๋กœ ๋ณ€ํ™˜ํ•˜๋ ค๋ฉด ๋ณด๊ณ ๋œ ์ถฉ๋Œ์„ ๋ชจ๋‘ ์ˆ˜์ •ํ•˜๊ณ  collMod๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•˜์„ธ์š”.

์ „ํ™˜์„ ์ข…๋ฃŒํ•˜๋ ค๋ฉด prepareUnique๋ฅผ false๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

๊ณ ์œ ํ•˜์ง€ ์•Š์€ ์ƒ‰์ธ์„ ๊ณ ์œ  ์ธ๋ฑ์Šค๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์˜ ์˜ˆ์‹œ๋ฅผ ๋ณด๋ ค๋ฉด ๊ธฐ์กด ์ƒ‰์ธ์„ ๊ณ ์œ  ์ธ๋ฑ์Šค๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋ฒ„์ „ 6.0์— ์ถ”๊ฐ€.

dryRun

๊ธฐ๋ณธ๊ฐ’: false

index.unique๊ฐ€ true์ธ ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๊ณ ์œ ํ•˜์ง€ ์•Š์€ ์ธ๋ฑ์Šค๋ฅผ ๊ณ ์œ  ์ธ๋ฑ์Šค๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์ „์— collMod ๋ช…๋ น์„ dryRun: true์™€ ํ•จ๊ป˜ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด MongoDB๊ฐ€ ์ปฌ๋ ‰์…˜์— ์ค‘๋ณต ํ‚ค๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์œ„๋ฐ˜ ์‚ฌํ•ญ์ด ์žˆ์œผ๋ฉด ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์ธ๋ฑ์Šค๋ฅผ ์˜ค๋ฅ˜ ์—†์ด ๊ณ ์œ ํ•œ ์ธ๋ฑ์Šค๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด dryRun: true๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

validator

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

validator ์˜ต์…˜์€ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๊ทœ์น™ ๋˜๋Š” ํ‘œํ˜„์‹์„ ์ง€์ •ํ•˜๋Š” ๋ฌธ์„œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. $near, $nearSphere, $text, $where์„(๋ฅผ) ์ œ์™ธํ•˜๊ณ  ์ฟผ๋ฆฌ ์—ฐ์‚ฐ์ž์™€ ๋™์ผํ•œ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ‘œํ˜„์‹์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ 

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

  • admin, local ๋ฐ config ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ปฌ๋ ‰์…˜์—๋Š” ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๊ธฐ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

  • system.* ์ปฌ๋ ‰์…˜์— ๋Œ€ํ•œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๊ธฐ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

validationLevel

validationLevel ๋Š” MongoDB๊ฐ€ ์—…๋ฐ์ดํŠธ ์ค‘์— ๊ธฐ์กด ๋ฌธ์„œ์— ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๊ทœ์น™์„ ์–ผ๋งˆ๋‚˜ ์—„๊ฒฉํ•˜๊ฒŒ ์ ์šฉํ•˜๋Š”์ง€ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

"off"
์‚ฝ์ž… ๋˜๋Š” ์—…๋ฐ์ดํŠธ์— ๋Œ€ํ•œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
"strict"
๊ธฐ๋ณธ๊ฐ’ ๋ชจ๋“  ์‚ฝ์ž… ๋ฐ ๋ชจ๋“  ์—…๋ฐ์ดํŠธ์— ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๊ทœ์น™์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
"moderate"
๊ธฐ์กด์˜ ์œ ํšจํ•œ ๋ฌธ์„œ์— ๋Œ€ํ•œ ์‚ฝ์ž… ๋ฐ ์—…๋ฐ์ดํŠธ์— ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๊ทœ์น™์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด์˜ ์œ ํšจํ•˜์ง€ ์•Š์€ ๋ฌธ์„œ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ์—๋Š” ๊ทœ์น™์„ ์ ์šฉํ•˜์ง€ ๋งˆ์„ธ์š”.

validationLevel ์‚ฌ์šฉ ์˜ˆ์‹œ๋Š” ๊ธฐ์กด ๋ฌธ์„œ์— ๋Œ€ํ•œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์ˆ˜์ค€ ์ง€์ •์„ ์ฐธ์กฐํ•˜์„ธ์š”.

validationAction

validationAction ์˜ต์…˜์€ ์œ ํšจํ•˜์ง€ ์•Š์€ ๋ฌธ์„œ์— ๋Œ€ํ•ด error๋ฅผ ๋ฐ˜ํ™˜ํ• ์ง€ ๋˜๋Š” ์œ ํšจํ•˜์ง€ ์•Š์€ ๋ฌธ์„œ๋ฅผ ํ—ˆ์šฉํ•˜๋˜ ์œ„๋ฐ˜์— ๋Œ€ํ•ด warn๋ฅผ ์ œ๊ณตํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

์ค‘์š”

๋ฌธ์„œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋Š” validationLevel์— ์˜ํ•ด ๊ฒฐ์ •๋œ ๋ฌธ์„œ์—๋งŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

validationAction ์‚ฌ์šฉ ์˜ˆ์‹œ๋Š” ์œ ํšจํ•˜์ง€ ์•Š์€ ๋ฌธ์„œ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ• ์„ ํƒ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์ฐธ๊ณ 

์ด ๋ช…๋ น์œผ๋กœ ์ˆ˜์ •๋œ ๋ทฐ๋Š” ๊ตฌ์ฒดํ™”๋œ ๋ทฐ๋ฅผ ์ฐธ์กฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜จ๋””๋งจ๋“œ ๊ตฌ์ฒดํ™”๋œ ๋ณด๊ธฐ์— ๋Œ€ํ•œ ์„ค๋ช…์€ $merge๋ฅผ ๋Œ€์‹  ์ฐธ์กฐํ•˜์„ธ์š”.

viewOn

๋ทฐ์˜ ๊ธฐ๋ณธ ์†Œ์Šค ์ปฌ๋ ‰์…˜ ๋˜๋Š” ๋ทฐ ์ž…๋‹ˆ๋‹ค. ๋ทฐ ์ •์˜๋Š” ์ง€์ •๋œ pipeline ๋ฅผ ์ด ์†Œ์Šค์— ์ ์šฉํ•˜์—ฌ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.

์•ก์„ธ์Šค ์ œ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰ ์ค‘์ธ MongoDB deployment์—์„œ ๋ณด๊ธฐ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒฝ์šฐ ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

pipeline

๋ทฐ๋ฅผ ์ •์˜ํ•˜๋Š” ์ง‘๊ณ„ ํŒŒ์ดํ”„๋ผ์ธ์ž…๋‹ˆ๋‹ค.

์ฐธ๊ณ 

๋ณด๊ธฐ ์ •์˜ pipeline์—๋Š” $out ๋˜๋Š” $merge ๋‹จ๊ณ„๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด ์ œํ•œ์€ $lookup ๋‹จ๊ณ„ ๋˜๋Š” $facet ๋‹จ๊ณ„์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํŒŒ์ดํ”„๋ผ์ธ๊ณผ ๊ฐ™์€ ์ž„๋ฒ ๋””๋“œ ํŒŒ์ดํ”„๋ผ์ธ์—๋„ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

์•ก์„ธ์Šค ์ œ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰ ์ค‘์ธ MongoDB deployment์—์„œ ๋ณด๊ธฐ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒฝ์šฐ ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋ทฐ ์ •์˜๋Š” ๊ณต๊ฐœ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ๋ทฐ์— ๋Œ€ํ•œ db.getCollectionInfos() ๋ฐ explain ์ž‘์—…์—๋Š” ๋ทฐ๋ฅผ ์ •์˜ํ•˜๋Š” ํŒŒ์ดํ”„๋ผ์ธ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ทฐ ์ •์˜์— ๋ฏผ๊ฐํ•œ ํ•„๋“œ์™€ ๊ฐ’์„ ์ง์ ‘ ์ฐธ์กฐํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

db.runCommand( {
collMod: "myView",
viewOn: "activities",
pipeline: [
{ $match: { status: "Q" } },
{ $project: { user: 1, date: 1, description: 1} } ]
} )

๋ฌธ์„œ ์ž๋™ ์ œ๊ฑฐ๋ฅผ ํ™œ์„ฑํ™” ํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด time series ์ปฌ๋ ‰์…˜ ์˜ expireAfterSeconds ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ๋‹ค์Œ collMod ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

db.runCommand( {
collMod: <collection>,
expireAfterSeconds: <Number> || "off"
} )

expireAfterSeconds ํ•„๋“œ๋Š” ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ์Œ์ˆ˜๊ฐ€ ์•„๋‹Œ ์‹ญ์ง„์ˆ˜(>=0)

  • ๋ฌธ์ž์—ด "off".

์ˆซ์ž๋Š” ๋ฌธ์„œ๊ฐ€ ๋งŒ๋ฃŒ๋˜๊ธฐ ์ „๊นŒ์ง€์˜ ์‹œ๊ฐ„(์ดˆ)์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. "off" ๋ฌธ์ž์—ด์€ expireAfterSeconds ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์ž๋™ ์ œ๊ฑฐ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

๋ฒ„์ „ 6.0์— ์ถ”๊ฐ€.

MongoDB 6.0๋ถ€ํ„ฐ๋Š” ์ œํ•œ์ด ์žˆ๋Š” ์ปฌ๋ ‰์…˜์˜ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ œํ•œ๋œ ์ปฌ๋ ‰์…˜์˜ ์ตœ๋Œ€ ํฌ๊ธฐ๋ฅผ ๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด cappedSize ์˜ต์…˜์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด ์ œํ•œ ๊ณ ์ • ์‚ฌ์ด์ฆˆ ์ปฌ๋ ‰์…˜์˜ ์ตœ๋Œ€ ๋ฌธ์„œ ์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด cappedMax ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์„ธ์š”.

์ฐธ๊ณ 

์ด๋Ÿฌํ•œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ oplog์˜ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  replSetResizeOplog๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

cappedSize

๊ณ ์ • ์‚ฌ์ด์ฆˆ ์ปฌ๋ ‰์…˜์˜ ์ƒˆ ์ตœ๋Œ€ ํฌ๊ธฐ๋ฅผ ๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. cappedSize๋Š” 0๋ณด๋‹ค ํฌ๊ณ  1e+15(1PB)๋ณด๋‹ค ์ž‘์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

cappedMax

๊ณ ์ • ์‚ฌ์ด์ฆˆ ์ปฌ๋ ‰์…˜์˜ ์ƒˆ๋กœ์šด ์ตœ๋Œ€ ๋ฌธ์„œ ์ˆ˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. 0}์„ ๋ณด๋‹ค ์ž‘๊ฒŒ ์„ค์ •ํ•˜๋ฉด ์ œํ•œ์ด ์—†์Œ์„ cappedMax ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.0

์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ ๋ช…๋ น์€ ์ œํ•œ ์ปฌ๋ ‰์…˜์˜ ์ตœ๋Œ€ ํฌ๊ธฐ๋ฅผ 100,000๋ฐ”์ดํŠธ๋กœ ์„ค์ •ํ•˜๊ณ  ์ปฌ๋ ‰์…˜์˜ ์ตœ๋Œ€ ๋ฌธ์„œ ์ˆ˜๋ฅผ 500๊ฐœ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

db.runCommand( {
collMod: <collection>,
cappedSize: 100000,
cappedMax: 500
} )

MongoDB 6.0๋ถ€ํ„ฐ๋Š” ๋ณ€๊ฒฝ ์ŠคํŠธ๋ฆผ ์ด๋ฒคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์„œ์˜ ๋ณ€๊ฒฝ ์ „ํ›„ ๋ฒ„์ „(๋ฌธ์„œ์˜ ์ „ํ›„ ์ด๋ฏธ์ง€)์„ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์‚ฌ์ „ ์ด๋ฏธ์ง€๋Š” ๋ฌธ์„œ๊ฐ€ ๊ต์ฒด, ์—…๋ฐ์ดํŠธ ๋˜๋Š” ์‚ญ์ œ๋˜๊ธฐ ์ „์˜ ๋ฌธ์„œ์ž…๋‹ˆ๋‹ค. ์‚ฝ์ž…๋œ ๋ฌธ์„œ์—๋Š” ์‚ฌ์ „ ์ด๋ฏธ์ง€๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

  • ์‚ฌํ›„ ์ด๋ฏธ์ง€๋Š” ๋ฌธ์„œ๊ฐ€ ์‚ฝ์ž…, ๊ต์ฒด, ์—…๋ฐ์ดํŠธ๋œ ํ›„์˜ ๋ฌธ์„œ์ž…๋‹ˆ๋‹ค. ์‚ญ์ œ๋œ ๋ฌธ์„œ์— ๋Œ€ํ•œ ์‚ฌํ›„ ์ด๋ฏธ์ง€๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

  • db.createCollection(), create ๋˜๋Š” collMod๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปฌ๋ ‰์…˜์— ๋Œ€ํ•ด changeStreamPreAndPostImages๋ฅผ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

collMod ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปฌ๋ ‰์…˜์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ์ŠคํŠธ๋ฆผ ์‚ฌ์ „ ๋ฐ ์‚ฌํ›„ ์ด๋ฏธ์ง€๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด changeStreamPreAndPostImages ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

db.runCommand( {
collMod: <collection>,
changeStreamPreAndPostImages: { enabled: <boolean> }
} )

์ปฌ๋ ‰์…˜์˜ ๋ณ€๊ฒฝ ์ŠคํŠธ๋ฆผ ์‚ฌ์ „ ๋ฐ ์‚ฌํ›„ ์ด๋ฏธ์ง€๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด changeStreamPreAndPostImages๋ฅผ(์„) true๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์‹œ:

db.runCommand( {
collMod: "orders",
changeStreamPreAndPostImages: { enabled: true }
} )

์ปฌ๋ ‰์…˜์˜ ๋ณ€๊ฒฝ ์ŠคํŠธ๋ฆผ ์‚ฌ์ „ ๋ฐ ์‚ฌํ›„ ์ด๋ฏธ์ง€๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด changeStreamPreAndPostImages๋ฅผ false๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์‹œ:

db.runCommand( {
collMod: "orders",
changeStreamPreAndPostImages: { enabled: false }
} )

์ด๋ฏธ์ง€๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ ๋ณ€๊ฒฝ ์ŠคํŠธ๋ฆผ ์ด๋ฒคํŠธ์— ์‚ฌ์ „ ๋ฐ ์‚ฌํ›„ ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

  • ๋ฌธ์„œ ์—…๋ฐ์ดํŠธ ๋˜๋Š” ์‚ญ์ œ ์ž‘์—… ์‹œ collection์—์„œ ํ™œ์„ฑํ™”๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

  • expireAfterSeconds์—์„œ ์ „ํ›„ ์ด๋ฏธ์ง€ ๋ณด์กด ์‹œ๊ฐ„ ์„ค์ • ์ดํ›„์— ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.

    • ๋‹ค์Œ ์˜ˆ์‹œ์—์„œ๋Š” ์ „์ฒด ํด๋Ÿฌ์Šคํ„ฐ์—์„œ expireAfterSeconds๋ฅผ 100์ดˆ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

      use admin
      db.runCommand( {
      setClusterParameter:
      { changeStreamOptions: {
      preAndPostImages: { expireAfterSeconds: 100 }
      } }
      } )
    • ๋‹ค์Œ ์˜ˆ์‹œ์—์„œ๋Š” expireAfterSeconds ๋“ฑ ํ˜„์žฌ changeStreamOptions ์„ค์ •์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

      db.adminCommand( { getClusterParameter: "changeStreamOptions" } )
    • expireAfterSeconds๋ฅผ off๋กœ ์„ค์ •ํ•˜๋ฉด ๊ธฐ๋ณธ ๋ณด์กด ์ •์ฑ…์ด ์‚ฌ์šฉ๋˜๋ฉฐ, ํ•ด๋‹น ๋ณ€๊ฒฝ ์ŠคํŠธ๋ฆผ ์ด๋ฒคํŠธ๊ฐ€ oplog์—์„œ ์ œ๊ฑฐ๋  ๋•Œ๊นŒ์ง€ ์‚ฌ์ „ ๋ฐ ์‚ฌํ›„ ์ด๋ฏธ์ง€๊ฐ€ ๋ณด์กด๋ฉ๋‹ˆ๋‹ค.

    • ๋ณ€๊ฒฝ ์ŠคํŠธ๋ฆผ ์ด๋ฒคํŠธ๊ฐ€ oplog์—์„œ ์ œ๊ฑฐ๋˜๋ฉด expireAfterSeconds ์‚ฌ์ „ ๋ฐ ์‚ฌํ›„ ์ด๋ฏธ์ง€ ๋ณด์กด ์‹œ๊ฐ„์— ๊ด€๊ณ„์—†์ด ํ•ด๋‹น ์‚ฌ์ „ ๋ฐ ์‚ฌํ›„ ์ด๋ฏธ์ง€๋„ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.

์ถ”๊ฐ€ ๊ณ ๋ ค ์‚ฌํ•ญ

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

  • ๋ณ€๊ฒฝ ์ŠคํŠธ๋ฆผ ์ด๋ฒคํŠธ ํฌ๊ธฐ๋ฅผ 16๋ฉ”๋น„๋ฐ”์ดํŠธ ๋ฏธ๋งŒ์œผ๋กœ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒคํŠธ ํฌ๊ธฐ๋ฅผ ์ œํ•œํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

    • ๋ฌธ์„œ ํฌ๊ธฐ๋ฅผ 8๋ฉ”๊ฐ€๋ฐ”์ดํŠธ๋กœ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค. updateDescription๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ๋ณ€๊ฒฝ ์ŠคํŠธ๋ฆผ ์ด๋ฒคํŠธ ํ•„๋“œ๊ฐ€ ํฌ์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋ณ€๊ฒฝ ์ŠคํŠธ๋ฆผ ์ถœ๋ ฅ์—์„œ ์‚ฌ์ „ ๋ฐ ์‚ฌํ›„ ์ด๋ฏธ์ง€๋ฅผ ๋™์‹œ์— ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • updateDescription๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ๋ณ€๊ฒฝ ์ŠคํŠธ๋ฆผ ์ด๋ฒคํŠธ ํ•„๋“œ๊ฐ€ ํฌ์ง€ ์•Š์€ ๊ฒฝ์šฐ, ์ตœ๋Œ€ 16๋ฉ”๋น„๋ฐ”์ดํŠธ ๋ฌธ์„œ์— ๋Œ€ํ•ด ๋ณ€๊ฒฝ ์ŠคํŠธ๋ฆผ ์ถœ๋ ฅ์—์„œ ์‚ฌํ›„ ์ด๋ฏธ์ง€๋งŒ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.

    • ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ ์ตœ๋Œ€ 16๋ฉ”๋น„๋ฐ”์ดํŠธ์˜ ๋ฌธ์„œ์— ๋Œ€ํ•ด ๋ณ€๊ฒฝ ์ŠคํŠธ๋ฆผ ์ถœ๋ ฅ์—์„œ ์‚ฌ์ „ ์ด๋ฏธ์ง€๋งŒ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.

      • ๋ฌธ์„œ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋ฌธ์„œ ๊ตฌ์กฐ๋‚˜ ๋‚ด์šฉ์˜ ์ž‘์€ ๋ถ€๋ถ„์—๋งŒ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ 

      • replace ๋ณ€๊ฒฝ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค. replace ์ด๋ฒคํŠธ์—๋Š” ํ•ญ์ƒ ํ›„์ด๋ฏธ์ง€๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

  • ์‚ฌ์ „ ์ด๋ฏธ์ง€๋ฅผ ์š”์ฒญํ•˜๋ ค๋ฉด db.collection.watch()์—์„œ fullDocumentBeforeChange๋ฅผ required ๋˜๋Š” whenAvailable๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌํ›„ ์ด๋ฏธ์ง€๋ฅผ ์š”์ฒญํ•˜๋ ค๋ฉด ๋™์ผํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ fullDocument๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

  • ์‚ฌ์ „ ์ด๋ฏธ์ง€๊ฐ€ config.system.preimages ์ปฌ๋ ‰์…˜์— ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค.

    • config.system.preimages collection์€ ์ปค์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. collection ํฌ๊ธฐ๋ฅผ ์ œํ•œํ•˜๋ ค๋ฉด ์•ž์„œ ํ‘œ์‹œ๋œ ๋Œ€๋กœ ์‚ฌ์ „ ์ด๋ฏธ์ง€์— ๋Œ€ํ•ด expireAfterSeconds ์‹œ๊ฐ„์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • ์‚ฌ์ „ ์ด๋ฏธ์ง€๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

์ค‘์š”

์ด์ „ ๋ฒ„์ „๊ณผ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ๊ธฐ๋Šฅ

MongoDB 6.0๋ถ€ํ„ฐ ๋ณ€๊ฒฝ ์ŠคํŠธ๋ฆผ์— ๋ฌธ์„œ ์‚ฌ์ „ ๋ฐ ์‚ฌํ›„ ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ด์ „ MongoDB ๋ฒ„์ „์œผ๋กœ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œํ•˜๊ธฐ ์ „์— collMod ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ์ปฌ๋ ‰์…˜์— ๋Œ€ํ•ดchangeStreamPreAndPostImages๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํŒ

๋‹ค์Œ๋„ ์ฐธ์กฐํ•˜์„ธ์š”.

comment

์„ ํƒ ์‚ฌํ•ญ. ์ด ๋ช…๋ น์— ๋Œ“๊ธ€์„ ์ฒจ๋ถ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ“๊ธ€์€ ์ตœ์ƒ์œ„ ํ•„๋“œ์—ฌ์•ผ ํ•˜๋ฉฐ ์œ ํšจํ•œ ๋ชจ๋“  BSON types์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€์ •ํ•œ ์„ค๋ช…์€ ๋‹ค์Œ ์œ„์น˜์—์„œ ์ด ๋ช…๋ น์˜ ๋ ˆ์ฝ”๋“œ์™€ ํ•จ๊ป˜ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

w

์„ ํƒ ์‚ฌํ•ญ. collMod๋ช…๋ น์˜ ์“ฐ๊ธฐ ๊ด€๋ จ ์‚ฌํ•ญ์„ ํ‘œํ˜„ํ•˜๋Š” ๋ฌธ์„œ์ž…๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ์“ฐ๊ธฐ ๊ณ ๋ ค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ ค๋ฉด ์ƒ๋žตํ•ฉ๋‹ˆ๋‹ค.

๋ฐฐํฌ์„œ๋ฒ„ ์—์„œ ์ธ์ฆ/ ๊ถŒํ•œ ๋ถ€์—ฌ ๋ฅผ ์‹œํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ collMod ๋ช…๋ น์„ ์‹คํ–‰ ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๊ถŒํ•œ ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ž‘์—…
ํ•„์ˆ˜ ๊ถŒํ•œ

๋ฏธ๊ณ ์ • ์‚ฌ์ด์ฆˆ ์ปฌ๋ ‰์…˜ ์ˆ˜์ •

collMod ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

๋ทฐ ์ˆ˜์ •

collMod ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  • ์ˆ˜์ •ํ•  ๋ทฐ์— find๊ฐ€ ์—†๊ฑฐ๋‚˜

  • ์ˆ˜์ •ํ•  ๋ทฐ์˜ find์™€ ์†Œ์Šค ์ปฌ๋ ‰์…˜/๋ทฐ์˜ find๋ฅผ ๋ชจ๋‘ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ์ œ๊ณต ์—ญํ•  dbAdmin์€ ์ด๋Ÿฌํ•œ ๊ถŒํ•œ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

collMod ๋ช…๋ น์€ ์ž‘์—… ๊ธฐ๊ฐ„ ๋™์•ˆ ์ง€์ •๋œ ์ปฌ๋ ‰์…˜์— ๋Œ€ํ•œ ์ปฌ๋ ‰์…˜ ์ž ๊ธˆ์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

๋‹ค์Œ ์˜ˆ์‹œ์—์„œ๋Š” ์ด๋ฆ„์ด user_log์ธ ์ปฌ๋ ‰์…˜์—์„œ ๊ธฐ์กด TTL ์ธ๋ฑ์Šค { lastAccess: 1 }์˜ expireAfterSeconds ์†์„ฑ์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. ์ธ๋ฑ์Šค์˜ ํ˜„์žฌ expireAfterSeconds ์†์„ฑ์€ 1800์ดˆ(๋˜๋Š” 30๋ถ„)๋กœ ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฉฐ ์ด ์˜ˆ์‹œ์—์„œ ๊ฐ’์„ 3600์ดˆ(๋˜๋Š” 60๋ถ„)๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

db.runCommand({
collMod: "user_log",
index: {
keyPattern: { lastAccess: 1 },
expireAfterSeconds: 3600
}
})

์ž‘์—…์ด ์„ฑ๊ณตํ•˜๋ฉด ๋ณ€๊ฒฝ๋œ ์†์„ฑ์˜ ์ด์ „ ๊ฐ’๊ณผ ์ƒˆ ๊ฐ’์ด ๋ชจ๋‘ ํฌํ•จ๋œ ๋ฌธ์„œ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

{ "expireAfterSeconds_old" : 1800, "expireAfterSeconds_new" : 3600, "ok" : 1 }

์ฐธ๊ณ 

์ธ๋ฑ์Šค๋ฅผ ์ˆจ๊ธฐ๋ ค๋ฉด featureCompatibilityVersion์„ 5.0 ์ด์ƒ์œผ๋กœ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ์˜ˆ์‹œ๋Š” orders ์ปฌ๋ ‰์…˜์˜ ๊ธฐ์กด ์ธ๋ฑ์Šค๋ฅผ ์ˆจ๊น๋‹ˆ๋‹ค. ํŠนํžˆ ์ด ์ž‘์—…์€ ์ฟผ๋ฆฌ ํ”Œ๋ž˜๋„ˆ์—์„œ ์‚ฌ์–‘ { shippedDate: 1 }์ธ ์ธ๋ฑ์Šค๋ฅผ ์ˆจ๊น๋‹ˆ๋‹ค.

db.runCommand({
collMod: "orders",
index: {
keyPattern: { shippedDate: 1 },
hidden: true
}
})

์ž‘์—…์ด ์„ฑ๊ณตํ•˜๋ฉด ๋ณ€๊ฒฝ๋œ ์†์„ฑ์˜ ์ด์ „ ๊ฐ’๊ณผ ์ƒˆ ๊ฐ’์ด ๋ชจ๋‘ ํฌํ•จ๋œ ๋ฌธ์„œ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

{ "hidden_old" : false, "hidden_new" : true, "ok" : 1 }

์ฐธ๊ณ 

์ž‘์—…์€ ์„ฑ๊ณตํ–ˆ์ง€๋งŒ hidden ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ(์ฆ‰, ์ด๋ฏธ ์ˆจ๊ฒจ์ง„ ์ธ๋ฑ์Šค๋ฅผ ์ˆจ๊ธฐ๊ฑฐ๋‚˜ ์ด๋ฏธ ์ˆจ๊ธฐ์ง€ ์•Š์€ ์ธ๋ฑ์Šค๋ฅผ ์ˆจ๊ธฐ์ง€ ์•Š๋Š” ๊ฒฝ์šฐ), ์ด ๋ช…๋ น์€ ์ถœ๋ ฅ์—์„œ hidden_old ๋ฐ hidden_new ํ•„๋“œ๋ฅผ ์ƒ๋žตํ•ฉ๋‹ˆ๋‹ค.

ํ…์ŠคํŠธ ์ธ๋ฑ์Šค๋ฅผ ์ˆจ๊ธฐ๋ ค๋ฉด keyPattern๊ฐ€ ์•„๋‹Œ name์œผ๋กœ ์ธ๋ฑ์Šค๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํŒ

๋‹ค์Œ๋„ ์ฐธ์กฐํ•˜์„ธ์š”.

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

cloneCollectionAsCapped