์ฝ๋ชจ๋
์ด ํ์ด์ง์ ๋ด์ฉ
- ์ ์
- ํธํ์ฑ
- ๊ตฌ๋ฌธ
- ์ต์
- ์ธ๋ฑ์ค ์ต์
- ๋ฌธ์ ์ ํจ์ฑ ๊ฒ์ฌ
- ์กฐํ์
- 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_old
expireAfterSeconds
๋ ์ธ๋ฑ์ค์ ์ด์ ์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
๋ทฐ๋ฅผ ์ ์ํ๋ ์ง๊ณ ํ์ดํ๋ผ์ธ์ ๋๋ค.
์ฐธ๊ณ
์ก์ธ์ค ์ ์ด๋ฅผ ์ฌ์ฉํ์ฌ ์คํ ์ค์ธ MongoDB deployment์์ ๋ณด๊ธฐ๋ฅผ ์์ ํ๋ ๊ฒฝ์ฐ ๋ฐ๋์ ํ์ํฉ๋๋ค.
๋ทฐ ์ ์๋ ๊ณต๊ฐ์ ๋๋ค. ์ฆ, ๋ทฐ์ ๋ํ
db.getCollectionInfos()
๋ฐexplain
์์ ์๋ ๋ทฐ๋ฅผ ์ ์ํ๋ ํ์ดํ๋ผ์ธ์ด ํฌํจ๋ฉ๋๋ค. ๋ฐ๋ผ์ ๋ทฐ ์ ์์ ๋ฏผ๊ฐํ ํ๋์ ๊ฐ์ ์ง์ ์ฐธ์กฐํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค.
db.runCommand( { collMod: "myView", viewOn: "activities", pipeline: [ { $match: { status: "Q" } }, { $project: { user: 1, date: 1, description: 1} } ] } )
Time Series ์ปฌ๋ ์
๋ฌธ์ ์๋ ์ ๊ฑฐ๋ฅผ ํ์ฑํ ํ๊ฑฐ๋ ๊ธฐ์กด 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 } )
์ ํ ์ด๋ฏธ์ง๋ฅผ ํฌํจํ๋ ๋ฌธ์์ Change Streams
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๋ฅผ ๋นํ์ฑํํด์ผ ํฉ๋๋ค.
ํ
๋ค์๋ ์ฐธ์กฐํ์ธ์.
๋ณ๊ฒฝ ์คํธ๋ฆผ ์ด๋ฒคํธ ๋ฐ ์ถ๋ ฅ์ ๋ํด์๋ ๋ณ๊ฒฝ ์ด๋ฒคํธ๋ฅผ ์ฐธ์กฐํ์ธ์.
์ปฌ๋ ์ ์์ ๋ณ๊ฒฝ ์ฌํญ์ ํ์ธํ๋ ค๋ฉด
db.collection.watch()
๋ฅผ ์ฐธ์กฐํ์ธ์.๋ณ๊ฒฝ ์คํธ๋ฆผs ์ถ๋ ฅ์ ๋ํ ์ ์ฒด ์์๋ ์ ํ ์ด๋ฏธ์ง๋ฅผ ํฌํจํ๋ ๋ฌธ์์ ๋ณ๊ฒฝ ์คํธ๋ฆผs๋ฅผ ์ฐธ์กฐํ์ธ์.
๋๊ธ ์ฒจ๋ถ
์ ํ ์ฌํญ. ์ด ๋ช ๋ น์ ๋๊ธ์ ์ฒจ๋ถํ ์ ์์ต๋๋ค. ๋๊ธ์ ์ต์์ ํ๋์ฌ์ผ ํ๋ฉฐ ์ ํจํ ๋ชจ๋ BSON types์ผ ์ ์์ต๋๋ค. ์ง์ ํ ์ค๋ช ์ ๋ค์ ์์น์์ ์ด ๋ช ๋ น์ ๋ ์ฝ๋์ ํจ๊ป ํ์๋ฉ๋๋ค.
mongod ๋ก๊ทธ ๋ฉ์์ง(
attr.command.cursor.comment
ํ๋).๋ฐ์ดํฐ๋ฒ ์ด์ค ํ๋กํ์ผ๋ฌ ์ถ๋ ฅ์
command.comment
ํ๋์ ์์ต๋๋ค.currentOp
{command.comment
5} ํ๋์ ์ถ๋ ฅ์ ์ ๋ ฅํฉ๋๋ค.
์ฐ๊ธฐ ๊ณ ๋ ค
์ ํ ์ฌํญ. collMod
๋ช
๋ น์ ์ฐ๊ธฐ ๊ด๋ จ ์ฌํญ์ ํํํ๋ ๋ฌธ์์
๋๋ค.
๊ธฐ๋ณธ ์ฐ๊ธฐ ๊ณ ๋ ค๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ ค๋ฉด ์๋ตํฉ๋๋ค.
์ก์ธ์ค ์ ์ด
๋ฐฐํฌ์๋ฒ ์์ ์ธ์ฆ/ ๊ถํ ๋ถ์ฌ ๋ฅผ ์ํํ๋ ๊ฒฝ์ฐ collMod
๋ช
๋ น์ ์คํ ํ๋ ค๋ฉด ๋ค์ ๊ถํ ์ด ์์ด์ผ ํฉ๋๋ค.
์์
| ํ์ ๊ถํ |
---|---|
๋ฏธ๊ณ ์ ์ฌ์ด์ฆ ์ปฌ๋ ์ ์์ |
|
๋ทฐ ์์ |
๊ธฐ๋ณธ ์ ๊ณต ์ญํ 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
์ผ๋ก ์ธ๋ฑ์ค๋ฅผ ์ง์ ํด์ผ ํฉ๋๋ค.