๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐธ์กฐ
MongoDB์ ๋ง์ ์ฌ์ฉ ์ฌ๋ก์์ ๊ด๋ จ ๋ฐ์ดํฐ๊ฐ ๋จ์ผ ๋ฌธ์ ๋ด์ ์ ์ฅ๋๋ ๋น์ ๊ทํ๋ ๋ฐ์ดํฐ ๋ชจ๋ธ์ด ์ต์ ์ ๋๋ค. ๊ทธ๋ฌ๋ ๊ฒฝ์ฐ์ ๋ฐ๋ผ์๋ ๊ด๋ จ ์ ๋ณด๋ฅผ ๋ณ๋์ ๋ฌธ์, ์ผ๋ฐ์ ์ผ๋ก ์๋ก ๋ค๋ฅธ ์ปฌ๋ ์ ์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ผ ์ ์์ต๋๋ค.
์ค์
$lookup
ํ์ดํ๋ผ์ธ ๋จ๊ณ๋ฅผ ์ฌ์ฉํ์ฌ ๋์ผํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ค๋ฉ๋์ง ์์ collection์ ์ผ์ชฝ ์ธ๋ถ ์กฐ์ธ์ ์ํํ ์ ์์ต๋๋ค.
$graphLookup
ํ์ดํ๋ผ์ธ ๋จ๊ณ๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋ฉ๋์ง ์์ collection์ ์กฐ์ธํด ์ฌ๊ท ๊ฒ์์ ์ํํ ์๋ ์์ต๋๋ค.
์ด ํ์ด์ง์์๋ $lookup
๋ฐ $graphLookup
ํ์ดํ๋ผ์ธ ๋จ๊ณ ์ด์ ์ ๋์ฒด ์ ์ฐจ์ ๋ํด ์ค๋ช
ํฉ๋๋ค.
๋ค์ ํ๊ฒฝ์์ ํธ์คํ ๋๋ ๋ฐฐํฌ์ ๋ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐธ์กฐ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
MongoDB Atlas: ํด๋ผ์ฐ๋์์์ MongoDB ๋ฐฐํฌ๋ฅผ ์ํ ์์ ๊ด๋ฆฌํ ์๋น์ค
MongoDB Enterprise: MongoDB์ ๊ตฌ๋ ๊ธฐ๋ฐ ์์ฒด ๊ด๋ฆฌ ๋ฒ์
MongoDB Community: MongoDB์ ์์ค ์ฌ์ฉ ๊ฐ๋ฅ ๋ฌด๋ฃ ์์ฒด ๊ด๋ฆฌ ๋ฒ์
MongoDB ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ ์ค ํ๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์๋ฅผ ์ฐ๊ด์ํต๋๋ค.
์๋ ์ฐธ์กฐ๋ ํ ๋ฌธ์์
_id
ํ๋๋ฅผ ๋ค๋ฅธ ๋ฌธ์์ ์ฐธ์กฐ๋ก ์ ์ฅํฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ ๋ฒ์งธ ์ฟผ๋ฆฌ๋ฅผ ์คํํ์ฌ ๊ด๋ จ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํฉ๋๋ค. ์ด๋ฌํ ์ฐธ์กฐ๋ ๊ฐ๋จํ๊ณ ๋๋ถ๋ถ์ ์ฌ์ฉ ์ฌ๋ก์ ์ถฉ๋ถํฉ๋๋ค.DBRefs๋ ์ฒซ ๋ฒ์งธ ๋ฌธ์์
_id
ํ๋์ ๊ฐ, ์ปฌ๋ ์ ์ด๋ฆ, ํด๋น ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด๋ฆ(์ ํ ์ฌํญ) ๋ฐ ๊ธฐํ ํ๋๋ฅผ ์ฌ์ฉํ์ฌ ํ ๋ฌธ์์์ ๋ค๋ฅธ ๋ฌธ์๋ก ์ฐธ์กฐํ ๊ฒ์ ๋๋ค. DBRefs๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ๋ฌ ์ปฌ๋ ์ ๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋ ๋ฌธ์๋ฅผ ๋ณด๋ค ์ฝ๊ฒ ์ฐธ์กฐํ ์ ์์ต๋๋ค.
DBreFS๋ฅผ ํด์ํ๋ ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ถ๊ฐ ์ฟผ๋ฆฌ๋ฅผ ์ํํ์ฌ ์ฐธ์กฐ๋ ๋ฌธ์๋ฅผ ๋ฐํํด์ผ ํฉ๋๋ค. ์ผ๋ถ MongoDB ๋๋ผ์ด๋ฒ๋ DBRefs๋ฅผ ๋ฌธ์๋ก ํด์ํ ์ ์๋๋ก ํฌํผ ๋ฉ์๋๋ฅผ ์ ๊ณตํ์ง๋ง ์๋์ผ๋ก ์ํ๋์ง๋ ์์ต๋๋ค.
DBRef๋ ๋ฌธ์ ๊ฐ์ ๊ด๊ณ๋ฅผ ๋ํ๋ด๋ ๊ณตํต ํ์๊ณผ ์ ํ์ ์ ๊ณตํฉ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ฌ๋ฌ ํ๋ ์์ํฌ ๋ฐ ๋๊ตฌ์ ์ํธ ์์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ DBRef ํ์์ ๋ฌธ์ ๊ฐ์ ์ฐ๊ฒฐ์ ํ์ํ๋ ๊ณตํต์ ์๋งจํฑ๋ ์ ๊ณตํฉ๋๋ค.
DBRef๋ฅผ ์ฌ์ฉํด์ผ ํ ํน๋ณํ ์ด์ ๊ฐ ์๋ค๋ฉด ๋์ ์๋ ์ฐธ์กฐ๋ฅผ ์ฌ์ฉํ์ธ์.
์๋ ์ฐธ์กฐ
๋ฐฐ๊ฒฝ
์๋ ์ฐธ์กฐ๋ ํ ๋ฌธ์์ _id
ํ๋๋ฅผ ๋ค๋ฅธ ๋ฌธ์์ ํฌํจํ๋ ๊ดํ์
๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ ํ๋ฆฌ์ผ์ด์
์ ํ์์ ๋ฐ๋ผ ์ฐธ์กฐ๋ ํ๋๋ฅผ ํ์ธํ๊ธฐ ์ํด ๋ ๋ฒ์งธ ์ฟผ๋ฆฌ๋ฅผ ์คํํ ์ ์์ต๋๋ค.
MongoDB Atlas UI์์ ์๋ ์ฐธ์กฐ ๋ง๋ค๊ธฐ
MongoDB Atlas UI์์ ์๋ ์ฐธ์กฐ๋ฅผ ๋ง๋ค๋ ค๋ฉด ๋ค์ ๋จ๊ณ๋ฅผ ๋ฐ๋ฅด์ธ์.
MongoDB Atlas UI์์ ํ๋ก์ ํธ์ Clusters ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
๊ฒฝ๊ณ
ํ์ ๊ฐ์ ์งํ ์ค
ํ์ฌ ์๋กญ๊ณ ํฅ์๋ ํ์ ํ๊ฒฝ์ ์ถ์ํ๊ณ ์์ต๋๋ค. ๋ค์ ๋จ๊ณ๊ฐ Atlas UI ์์ ๋ณธ ๋ณด๊ธฐ์ ์ผ์นํ์ง ์๋ ๊ฒฝ์ฐ Atlas ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ์ค๋ช ์๋ฅผ ์ฐธ์กฐํ์ธ์.
์์ง ํ์๋์ง ์์ ๊ฒฝ์ฐ ํ์ ํ์์ค์ Organizations ๋ฉ๋ด์์ ์ํ๋ ํ๋ก์ ํธ๊ฐ ํฌํจ๋ ์กฐ์ง์ ์ ํํฉ๋๋ค.
์์ง ํ์๋์ง ์์ ๊ฒฝ์ฐ ๋ด๋น๊ฒ์ด์ ๋ฐ์ Projects ๋ฉ๋ด์์ ํ๋ก์ ํธ๋ฅผ ์ ํํฉ๋๋ค.
์์ง ํ์๋์ง ์์ ๊ฒฝ์ฐ ์ฌ์ด๋๋ฐ์์ Clusters๋ฅผ ํด๋ฆญํฉ๋๋ค.
Clusters(ํด๋ฌ์คํฐ) ํ์ด์ง๊ฐ ํ์๋ฉ๋๋ค.
์ปฌ๋ ์ ์ผ๋ก ์ด๋ํฉ๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐธ์กฐ๋ฅผ ์ถ๊ฐํ๋ ค๋ ํด๋ฌ์คํฐ์ ๊ฒฝ์ฐ Browse Collections๋ฅผ ํด๋ฆญํฉ๋๋ค.
์ผ์ชฝ ํ์ ์ฐฝ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ํํฉ๋๋ค.
์ผ์ชฝ ํ์ ์ฐฝ์์ ์ปฌ๋ ์ ์ ์ ํํฉ๋๋ค. ์ด ์์์๋
places
์ปฌ๋ ์ ์ ์ฐธ๊ณ ํฉ๋๋ค.
places
ํญ๋ชฉ์ ์ฐธ์กฐํ๋ people
์ปฌ๋ ์
์ ๋ฌธ์๋ฅผ ์ถ๊ฐํฉ๋๋ค.
์ผ์ชฝ ํ์ ์ฐฝ์์ ๋ค๋ฅธ ์ปฌ๋ ์ ์ ์ ํํฉ๋๋ค. ์ด ์์์๋
people
์ปฌ๋ ์ ์ ์ฐธ์กฐํฉ๋๋ค.Insert Document๋ฅผ ํด๋ฆญํฉ๋๋ค.
JSON ๋ทฐ ์์ด์ฝ({{}})์ ํด๋ฆญํฉ๋๋ค.
๋ค์ ๋ฐ์ดํฐ๋ฅผ ๋ฌธ์์ ๋ถ์ฌ๋ฃ์ต๋๋ค.
{ "_id": { "$oid": "651aebeb70299b120736f443" }, "name": "Erin", "places_id": "651aea5870299b120736f442" "url": "bc.example.net/Erin" } Insert๋ฅผ ํด๋ฆญํฉ๋๋ค.
์ฟผ๋ฆฌ๊ฐ
people
์ปฌ๋ ์ ์์ ๋ฌธ์๋ฅผ ๋ฐํํ ๋ ํ์ํ ๊ฒฝ์ฐplaces_id
ํ๋๊ฐ ์ฐธ์กฐํ๋ ๋ฌธ์์ ๋ํplaces
์ปฌ๋ ์ ์ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ํํฐ๋งํ ์ ์์ต๋๋ค.MongoDB Atlas์์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์ธํ ์์๋ณด๋ ค๋ฉด MongoDB Atlas ๋ฌธ์์์ ๋ฌธ์ ๋ณด๊ธฐ, ํํฐ๋ง ๋ฐ ์ ๋ ฌ์ ์ฐธ์กฐํ์ธ์.
ํฐ๋ฏธ๋์์ ์๋ ์ฐธ์กฐ ์์ฑ
์ฒซ ๋ฒ์งธ ๋ฌธ์์ _id
ํ๋๋ฅผ ๋ ๋ฒ์งธ ๋ฌธ์์ ์ฐธ์กฐ๋ก ์ฌ์ฉํ์ฌ ๋ ๋ฌธ์๋ฅผ ์ฝ์
ํ๋ ค๋ฉด ๋ค์ ์์
์ ๊ณ ๋ คํ์ธ์.
original_id = ObjectId() db.places.insertOne({ "_id": original_id, "name": "Broadway Center", "url": "bc.example.net" }) db.people.insertOne({ "name": "Erin", "places_id": original_id, "url": "bc.example.net/Erin" })
๊ทธ๋ฐ ๋ค์ ์ฟผ๋ฆฌ๊ฐ people
collection์์ ๋ฌธ์๋ฅผ ๋ฐํํ๋ฉด ํ์ํ ๊ฒฝ์ฐ places
collection์ places_id
ํ๋์์ ์ฐธ์กฐํ๋ ๋ฌธ์์ ๋ํด ๋ ๋ฒ์งธ ์ฟผ๋ฆฌ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
๋ค์์ ์ฌ์ฉํ์ธ์.
๋ ๋ฌธ์ ์ฌ์ด์ ๊ด๊ณ๋ฅผ ์ ์ฅํ๋ ค๋ ๊ฒฝ์ฐ ๋๋ถ๋ถ ์๋ ์ฐธ์กฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ฐธ์กฐ๋ ์์ฑํ๊ธฐ ๊ฐ๋จํ๋ฉฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์์ ๋ฐ๋ผ ์ฐธ์กฐ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
์๋ ์ฐ๊ฒฐ์ ์ ์ผํ ์ ํ ์ฌํญ์ ์ด๋ฌํ ์ฐธ์กฐ๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐ ์ปฌ๋ ์ ์ด๋ฆ์ ์ ๋ฌํ์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค. ๋ ์ด์์ ์ปฌ๋ ์ ์ ์๋ ๋ฌธ์์ ๊ด๋ จ๋ ๋จ์ผ ์ปฌ๋ ์ ๋ฌธ์๊ฐ ์๋ ๊ฒฝ์ฐ DBRefs ์ฌ์ฉ์ ๊ณ ๋ คํด์ผ ํ ์ ์์ต๋๋ค.
DBRefs
๋ฐฐ๊ฒฝ
DBRef๋ ํน์ ์ฐธ์กฐ ์ ํ์ด ์๋ ๋ฌธ์๋ฅผ ๋ํ๋ด๊ธฐ ์ํ ๊ท์น์
๋๋ค. ์ฌ๊ธฐ์๋ _id
ํ๋์ ๊ฐ ์ธ์๋ ์ปฌ๋ ์
์ด๋ฆ, ๊ฒฝ์ฐ์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด๋ฆ์ด ํฌํจ๋ฉ๋๋ค.
์ ํ์ ์ผ๋ก DBRef์๋ ๋ค๋ฅธ ํ๋๋ฅผ ์ผ๋ง๋ ์ง ํฌํจํ ์ ์์ต๋๋ค. ์ถ๊ฐ ํ๋ ์ด๋ฆ์ ์๋ฒ ๋ฒ์ ์์ ์ง์ ํ ํ๋ ์ด๋ฆ ๊ท์น์ ๋ฐ๋ผ์ผ ํฉ๋๋ค.
ํ์
DBRef์๋ ๋ค์๊ณผ ๊ฐ์ ํ๋๊ฐ ์์ต๋๋ค:
$ref
$ref
ํ๋์๋ ์ฐธ์กฐ๋ ๋ฌธ์๊ฐ ์๋ ์ปฌ๋ ์ ์ ์ด๋ฆ์ด ์์ต๋๋ค.
$id
$id
ํ๋์๋ ์ฐธ์กฐ๋ ๋ฌธ์์_id
ํ๋ ๊ฐ์ด ํฌํจ๋์ด ์์ต๋๋ค.
$db
์ ํ ์ฌํญ.
์ฐธ์กฐ๋ ๋ฌธ์๊ฐ ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ด๋ฆ์ ํฌํจํฉ๋๋ค.
์์
DBRef ๋ฌธ์๋ ๋ค์ ๋ฌธ์์ ์ ์ฌํฉ๋๋ค.
{ "$ref" : <value>, "$id" : <value>, "$db" : <value> }
creator
ํ๋์ DBRef๋ฅผ ์ ์ฅํ collection์ ๋ฌธ์๋ฅผ ์๋ก ๋ค์ด ๋ณด๊ฒ ์ต๋๋ค.
{ "_id" : ObjectId("5126bbf64aed4daf9e2ab771"), // .. application fields "creator" : { "$ref" : "creators", "$id" : ObjectId("5126bc054aed4daf9e2ab772"), "$db" : "users", "extraField" : "anything" } }
์ด ์์์ DBRef๋ _id
ํ๋์ ObjectId("5126bc054aed4daf9e2ab772")
๊ฐ ์๋ users
๋ฐ์ดํฐ๋ฒ ์ด์ค์ creators
์ปฌ๋ ์
์ ์๋ ๋ฌธ์๋ฅผ ๊ฐ๋ฆฌํต๋๋ค. ์ ํ ์ฌํญ ํ๋๋ ํฌํจ๋์ด ์์ต๋๋ค.
์ฐธ๊ณ
DBRef์ ํ๋ ์์๋ ์ค์ํ๋ฉฐ DBRef๋ฅผ ์ฌ์ฉํ ๋๋ ์์ ์ํ์ค๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
DBRef์ฉ ๋๋ผ์ด๋ฒ ์ง์
๋๋ผ์ด๋ฒ | DBRef ์ง์ | ์ฐธ๊ณ ์ฌํญ |
---|---|---|
C | ์ง์๋์ง ์์ | ์ฐธ์กฐ๋ฅผ ์๋์ผ๋ก ์ํํ ์ ์์ต๋๋ค. |
C++ | ์ง์๋์ง ์์ | ์ฐธ์กฐ๋ฅผ ์๋์ผ๋ก ์ํํ ์ ์์ต๋๋ค. |
C# | ์ง์๋จ | ์์ธํ ๋ด์ฉ์ C# ๋๋ผ์ด๋ฒ ํ์ด์ง๋ฅผ ์ฐธ์กฐํ์ธ์. |
Go | ์ง์๋์ง ์์ | ์ฐธ์กฐ๋ฅผ ์๋์ผ๋ก ์ํํ ์ ์์ต๋๋ค. |
ํ์ค์ผ | ์ง์๋์ง ์์ | ์ฐธ์กฐ๋ฅผ ์๋์ผ๋ก ์ํํ ์ ์์ต๋๋ค. |
Java | ์ง์๋จ | ์์ธํ ๋ด์ฉ์ Java ๋๋ผ์ด๋ฒ ํ์ด์ง๋ฅผ ์ฐธ์กฐํ์ธ์. |
Node.js | ์ง์๋จ | ์์ธํ ๋ด์ฉ์ Node.js ๋๋ผ์ด๋ฒ ํ์ด์ง๋ฅผ ์ฐธ์กฐํ์ธ์. |
Perl | ์ง์๋จ | ์์ธํ ๋ด์ฉ์ ํ(Perl) ๋๋ผ์ด๋ฒ ํ์ด์ง๋ฅผ ์ฐธ์กฐํ์ธ์. |
PHP | ์ง์๋์ง ์์ | ์ฐธ์กฐ๋ฅผ ์๋์ผ๋ก ์ํํ ์ ์์ต๋๋ค. |
Python | ์ง์๋จ | ์์ธํ ๋ด์ฉ์ PyMongo ๋๋ผ์ด๋ฒ ํ์ด์ง๋ฅผ ์ฐธ์กฐํ์ธ์. |
Ruby | ์ง์๋จ | ์์ธํ ๋ด์ฉ์ Ruby ๋๋ผ์ด๋ฒ ํ์ด์ง๋ฅผ ์ฐธ์กฐํ์ธ์. |
Scala | ์ง์๋์ง ์์ | ์ฐธ์กฐ๋ฅผ ์๋์ผ๋ก ์ํํ ์ ์์ต๋๋ค. |
๋ค์์ ์ฌ์ฉํ์ธ์.
๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๋ ๊ฐ ์ด์์ ๊ด๋ จ ๋ฌธ์๋ฅผ ์ฐ๊ฒฐํ๋ ค๋ฉด ์๋ ์ฐธ์กฐ ๋ฐฉ๋ฒ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ฌ๋ฌ ์ปฌ๋ ์ ์ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํด์ผ ํ๋ ๊ฒฝ์ฐ DBRef๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.