ํค/๊ฐ ํ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์๋ํ๋ ๋น ๋ฅด๊ณ ํ์ฅ ๊ฐ๋ฅํ ์์คํ ๊ณผ ๊ธฐ๋ฅ์ ์ด๊ณ ์ฟผ๋ฆฌ๋ฅผ ์ฝ๊ฒ ๊ตฌ์ฑํ ์ ์๋ ๊ด๊ณํ DBMS ์ฌ์ด์ ํ์๋ฅผ ์ฐจ์งํ๋ ๋ฌธ์ ์งํฅ DBMS MongoDB 5.0์ ์ถ์๊ฐ ๋ฐํ๋์์ต๋๋ค. MongoDB ์ฝ๋๋ C++๋ก ์์ฑ๋์์ผ๋ฉฐ AGPLv3 ๋ผ์ด์ ์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ SSPL ๋ผ์ด์ ์ค์ ๋ฐ๋ผ ๋ฐฐํฌ๋์ง๋ง SSPL ๋ผ์ด์ ์ค์ ๋ฐ๋ผ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋ ์์ฒด๋ฟ๋ง ์๋๋ผ ์์ค๋ ์ ๊ณตํด์ผ ํ๋ ์ฐจ๋ณ์ ์๊ตฌ ์ฌํญ์ด ํฌํจ๋์ด ์๊ธฐ ๋๋ฌธ์ ๊ณต๊ฐ๋์ง ์์ต๋๋ค. ํด๋ผ์ฐ๋ ์๋น์ค ์ ๊ณต๊ณผ ๊ด๋ จ๋ ๋ชจ๋ ๊ตฌ์ฑ ์์์ ์ฝ๋์ ๋๋ค.
MongoDB๋ JSON๊ณผ ๊ฐ์ ํ์์ผ๋ก ๋ฌธ์ ์ ์ฅ์ ์ง์ํ๊ณ , ์ฟผ๋ฆฌ ์์ฑ์ ์ํ ๋งค์ฐ ์ ์ฐํ ์ธ์ด๋ฅผ ๊ฐ์ง๋ฉฐ, ๋ค์ํ ์ ์ฅ๋ ์์ฑ์ ๋ํ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ ์ ์๊ณ , ๋๊ท๋ชจ ๋ฐ์ด๋๋ฆฌ ๊ฐ์ฒด์ ์ ์ฅ์๋ฅผ ํจ์จ์ ์ผ๋ก ์ ๊ณตํ๊ณ , ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ถ๊ฐํ๋ ์์ ๋ก๊น ์ ์ง์ํฉ๋๋ค. Map/Reduce ํจ๋ฌ๋ค์์ ๋ฐ๋ผ ์๋ํ๊ณ ๋ณต์ ๋ฐ ๋ด๊ฒฐํจ์ฑ ๊ตฌ์ฑ ๊ตฌ์ถ์ ์ง์ํฉ๋๋ค.
MongoDB์๋ ๋ณต์ ์ ํจ๊ป ์ค๋ฉ ๋๊ตฌ(ํน์ ํค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋ฒ ์ ์ฒด์ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ๋ฐฐํฌ)๊ฐ ๋ด์ฅ๋์ด ์์ด ๋จ์ผ ์คํจ ์ง์ ์ด ์๋ ์ํ ํ์ฅ ๊ฐ๋ฅํ ์คํ ๋ฆฌ์ง ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ถํ ์ ์์ต๋๋ค(๋ชจ๋ ๋ ธ๋์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋์ ์ํฅ์ ์ฃผ์ง ์์), ์๋ ์ฅ์ ์กฐ์น ๋ฐ ์คํจํ ๋ ธ๋๋ก๋ถํฐ์ ๋ก๋ ์ ์ก์ด ๊ฐ๋ฅํฉ๋๋ค. ํด๋ฌ์คํฐ๋ฅผ ํ์ฅํ๊ฑฐ๋ ํ๋์ ์๋ฒ๋ฅผ ํด๋ฌ์คํฐ๋ก ๋ณํํ๋ ์์ ์ ๋จ์ํ ์ ์์คํ ์ ์ถ๊ฐํ๋ ๊ฒ๋ง์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ค์งํ์ง ์๊ณ ์ํ๋ฉ๋๋ค.
์ ๋ฆด๋ฆฌ์ค์ ๊ธฐ๋ฅ:
- ํน์ ๊ฐ๊ฒฉ(์๊ฐ ๋ฐ ์ด ์๊ฐ์ ํด๋นํ๋ ๊ฐ ์งํฉ)์ผ๋ก ๊ธฐ๋ก๋ ๋งค๊ฐ๋ณ์ ๊ฐ ์กฐ๊ฐ์ ์ ์ฅํ๋ ๋ฐ ์ต์ ํ๋ ์๊ณ์ด(์๊ณ์ด ์ปฌ๋ ์
) ํํ์ ๋ฐ์ดํฐ ์ปฌ๋ ์
์ ์ถ๊ฐํ์ต๋๋ค. ๋ชจ๋ํฐ๋ง ์์คํ
, ๊ธ์ต ํ๋ซํผ, ์ผ์ ์ํ ํด๋ง ์์คํ
์์ ์ด๋ฌํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํด์ผ ํ ํ์์ฑ์ด ๋ฐ์ํฉ๋๋ค. ์๊ณ์ด ๋ฐ์ดํฐ ์์
์ ์ผ๋ฐ ๋ฌธ์ ์ปฌ๋ ์
๊ณผ ๋์ผํ๊ฒ ์ํ๋์ง๋ง ์ด์ ๋ํ ์ธ๋ฑ์ค ๋ฐ ์ ์ฅ ๋ฐฉ๋ฒ์ ์๊ฐ ์ฐธ์กฐ๋ฅผ ๊ณ ๋ คํ์ฌ ์ต์ ํ๋์ด ๋์คํฌ ๊ณต๊ฐ ์๋น๋ฅผ ํฌ๊ฒ ์ค์ด๊ณ ์ฟผ๋ฆฌ ์คํ ์ง์ฐ์ ์ค์ด๊ณ ์ค์๊ฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. ๋ถ์.
MongoDB๋ ์ด๋ฌํ ์ปฌ๋ ์ ์ ์ฝ์ ์ ์๋์ผ๋ก ์๊ณ์ด ๋ฐ์ดํฐ๋ฅผ ์ต์ ํ๋ ์ ์ฅ ํ์์ผ๋ก ๊ทธ๋ฃนํํ๋ ๋ด๋ถ ์ปฌ๋ ์ ์ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ถ๋ ์ฐ๊ธฐ ๊ฐ๋ฅํ๊ณ ๊ตฌ์ฒดํ๋์ง ์์ ๋ทฐ๋ก ์ฒ๋ฆฌํฉ๋๋ค. ์ด ๊ฒฝ์ฐ ๊ฐ ์๊ฐ ๊ธฐ๋ฐ ๊ธฐ๋ก์ ์์ฒญ ์ ๋ณ๋์ ๋ฌธ์๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค. ๋ฐ์ดํฐ๋ ์๋์ผ๋ก ์๊ฐ๋ณ๋ก ์ ๋ ฌ๋๊ณ ์์ธํ๋ฉ๋๋ค(์๊ฐ ์์ธ์ ๋ช ์์ ์ผ๋ก ์์ฑํ ํ์ ์์).
- ์ปฌ๋ ์ ์ ํน์ ๋ฌธ์ ์ธํธ์ ๋ํด ์์ ์ ์ํํ ์ ์๋ ์ฐฝ ์ฐ์ฐ์(๋ถ์ ๊ธฐ๋ฅ)์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค. ์ง๊ณ ํจ์์ ๋ฌ๋ฆฌ ์ฐฝ ํจ์๋ ๊ทธ๋ฃนํ๋ ์งํฉ์ ์ถ์ํ์ง ์๊ณ ๊ฒฐ๊ณผ ์งํฉ์์ ํ๋ ์ด์์ ๋ฌธ์๋ฅผ ํฌํจํ๋ "์ฐฝ"์ ๋ด์ฉ์ ๊ธฐ๋ฐ์ผ๋ก ์ง๊ณํฉ๋๋ค. ๋ฌธ์์ ํ์ ์งํฉ์ ์กฐ์ํ๊ธฐ ์ํด ์๋ก์ด $setWindowFields ๋จ๊ณ๊ฐ ์ ์๋ฉ๋๋ค. ์ด๋ฅผ ํตํด ์ปฌ๋ ์ ์ ์๋ ๋ ๋ฌธ์ ๊ฐ์ ์ฐจ์ด์ ์ ํ์ธํ๊ณ , ํ๋งค ์์๋ฅผ ๊ณ์ฐํ๊ณ , ๋ณต์กํ ์๊ณ์ด์ ์ ๋ณด๋ฅผ ๋ถ์ํ ์ ์์ต๋๋ค.
- API ๋ฒ์ ๊ด๋ฆฌ์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค. ์ด๋ฅผ ํตํด ์ ํ๋ฆฌ์ผ์ด์ ์ ํน์ API ์ํ์ ๋ฐ์ธ๋ฉํ๊ณ ์ DBMS ๋ฆด๋ฆฌ์ค๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ ๋ ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ ์๋ฐ๊ณผ ๊ด๋ จ๋ ์ํ์ ์ ๊ฑฐํ ์ ์์ต๋๋ค. API ๋ฒ์ ๊ด๋ฆฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์๋ช ์ฃผ๊ธฐ๋ฅผ DBMS ์๋ช ์ฃผ๊ธฐ์์ ๋ถ๋ฆฌํ๊ณ ๊ฐ๋ฐ์๊ฐ ์ ๋ฒ์ ์ DBMS๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ ๋๊ฐ ์๋๋ผ ์๋ก์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํด์ผ ํ ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณ๊ฒฝํ ์ ์๋๋ก ํด์ค๋๋ค.
- DBMS๋ฅผ ์ค์งํ์ง ์๊ณ ๋ ๋ถํ ์ ์ฌ์ฉ๋๋ ๋ถํ ํค๋ฅผ ์ฆ์ ๋ณ๊ฒฝํ ์ ์๋ Live Resharding ๋ฉ์ปค๋์ฆ์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- ํด๋ผ์ด์ธํธ ์ธก ํ๋ ์ํธํ ๊ฐ๋ฅ์ฑ์ด ํ์ฅ๋์์ต๋๋ค(ํด๋ผ์ด์ธํธ ์ธก ํ๋ ์์ค ์ํธํ). ์ด์ DBMS๋ฅผ ์ค์งํ์ง ์๊ณ ๋ ๊ฐ์ฌ ํํฐ๋ฅผ ์ฌ๊ตฌ์ฑํ๊ณ x509 ์ธ์ฆ์๋ฅผ ๊ต์ฒดํ ์ ์์ต๋๋ค. TLS 1.3์ ๋ํ ์ํธํ ์ ํ๊ตฐ ๊ตฌ์ฑ์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- ๋ณ๋์ ํ๋ก์ ํธ๋ก ๊ฐ๋ฐ๋๊ณ ์์ผ๋ฉฐ Node.js ํ๋ซํผ์ ์ฌ์ฉํ์ฌ JavaScript๋ก ์์ฑ๋๊ณ Apache 2.0 ๋ผ์ด์ผ์ค์ ๋ฐ๋ผ ๋ฐฐํฌ๋๋ ์๋ก์ด ๋ช
๋ น์ค ์
ธ์ธ MongoDB Shell(mongosh)์ด ์ ์๋์์ต๋๋ค. MongoDB Shell์ ์ฌ์ฉํ๋ฉด DBMS์ ์ฐ๊ฒฐํ๊ณ , ์ค์ ์ ๋ณ๊ฒฝํ๊ณ , ์ฟผ๋ฆฌ๋ฅผ ๋ณด๋ผ ์ ์์ต๋๋ค. ๋ฉ์๋, ๋ช
๋ น ๋ฐ MQL ํํ์ ์
๋ ฅ์ ์ํ ์ค๋งํธ ์๋ ์์ฑ, ๊ตฌ๋ฌธ ๊ฐ์กฐ, ์ํฉ๋ณ ๋์๋ง, ์ค๋ฅ ๋ฉ์์ง ๊ตฌ๋ฌธ ๋ถ์ ๋ฐ ์ถ๊ฐ ๊ธฐ๋ฅ์ ํตํ ๊ธฐ๋ฅ ํ์ฅ ๊ธฐ๋ฅ์ ์ง์ํฉ๋๋ค. ์ด์ "mongo" CLI ๋ํผ๋ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ผ๋ฉฐ ํฅํ ๋ฆด๋ฆฌ์ค์์ ์ ๊ฑฐ๋ ์์ ์
๋๋ค.
- ์๋ก์ด ์ฐ์ฐ์๊ฐ ์ถ๊ฐ๋์์ต๋๋ค: $count, $dateAdd, $dateDiff, $dateSubtract, $sampleRate ๋ฐ $rand.
- $expr ํํ์ ๋ด์์ $eq, $lt, $lte, $gt ๋ฐ $gte ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ ๋ ์ธ๋ฑ์ค๊ฐ ์ฌ์ฉ๋๋์ง ํ์ธํฉ๋๋ค.
- ์ด์ Aggregation, find, findAndModify, update, delete ๋ช ๋ น๊ณผ db.collection.aggregate(), db.collection.findAndModify(), db.collection.update() ๋ฐ db.collection.remove() ๋ฉ์๋๋ "let"์ ์ง์ํฉ๋๋ค. โ ์ต์ ์ ์ฌ์ฉํ์ฌ ์์ฒญ ๋ณธ๋ฌธ์์ ๋ณ์๋ฅผ ๋ถ๋ฆฌํ์ฌ ๋ช ๋ น์ ๋ ์ฝ๊ฒ ์ฝ์ ์ ์๋๋ก ํ๋ ๋ณ์ ๋ชฉ๋ก์ ์ ์ํฉ๋๋ค.
- ๋ฌธ์ ์ปฌ๋ ์ ์ ๋ํด ๋ฐฐํ์ ์ ๊ธ์ ์ฌ์ฉํ๋ ์์ ์ด ๋ณ๋ ฌ๋ก ์คํ๋๋ ๊ฒฝ์ฐ ์ฐพ๊ธฐ, ๊ณ์ฐ, ๊ตฌ๋ณ, ์ง๊ณ, mapReduce, listCollections ๋ฐ listIndexes ์์ ์ด ๋ ์ด์ ์ฐจ๋จ๋์ง ์์ต๋๋ค.
- ์ ์น์ ์ผ๋ก ์๋ชป๋ ์ฉ์ด๋ฅผ ์ ๊ฑฐํ๊ธฐ ์ํ ๋ ธ๋ ฅ์ ์ผํ์ผ๋ก isMaster ๋ช ๋ น๊ณผ db.isMaster() ๋ฉ์๋์ ์ด๋ฆ์ด hello ๋ฐ db.hello()๋ก ๋ณ๊ฒฝ๋์์ต๋๋ค.
- ๋ฆด๋ฆฌ์ค ๋ฒํธ ์ง์ ์ฒด๊ณ๊ฐ ๋ณ๊ฒฝ๋์์ผ๋ฉฐ ์์ธก ๊ฐ๋ฅํ ๋ฆด๋ฆฌ์ค ์ผ์ ์ผ๋ก ์ ํ๋์์ต๋๋ค. 5.0๋ ์ ํ ๋ฒ ์ค์ํ ๋ฆด๋ฆฌ์ค(6.0, 7.0, 5.1)๊ฐ ์ถ์๋๊ณ , 5.2๊ฐ์๋ง๋ค ์๋ก์ด ๊ธฐ๋ฅ(5.3, 5.1.1, 5.1.2)์ด ํฌํจ๋ ์ค๊ฐ ๋ฆด๋ฆฌ์ค๊ฐ ์ ๊ณต๋๋ฉฐ, ํ์์ ๋ฐ๋ผ ๋ฒ๊ทธ ์์ ๋ฐ ์ทจ์ฝ์ ์ด ํฌํจ๋ ์์ ์ ๋ฐ์ดํธ(5.1.3, 5.1)๊ฐ ์ ๊ณต๋ฉ๋๋ค. .5.2, 5.3). ์์ ๋ฆด๋ฆฌ์ค๋ ๋ค์ ์ฃผ์ ๋ฆด๋ฆฌ์ค๋ฅผ ์ํ ๊ธฐ๋ฅ์ ๊ตฌ์ถํฉ๋๋ค. MongoDB 6.0, XNUMX ๋ฐ XNUMX์ MongoDB XNUMX ๋ฆด๋ฆฌ์ค๋ฅผ ์ํ ์๋ก์ด ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
์ถ์ฒ : opennet.ru