์ฐํฉ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์คํด์ค ๋ฐฐํฌ
์ด ํ์ด์ง์ ๋ด์ฉ
์ด ํ์ด์ง์์๋ Atlas cluster์ ๋ฐ์ดํฐ์ ์ก์ธ์คํ๊ธฐ ์ํด ์ฐํฉ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์คํด์ค๋ฅผ ๋ฐฐํฌํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค.
ํ์ํ ์ก์ธ์ค ๊ถํ
์ฐํฉ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์คํด์ค๋ฅผ ๋ฐฐํฌํ๋ ค๋ฉด ํ๋ก์ ํธ์ ๋ํ Project Owner
์ก์ธ์ค ๊ถํ์ด ์์ด์ผ ํฉ๋๋ค. Organization Owner
์ก์ธ์ค ๊ถํ์ด ์๋ ์ฌ์ฉ์๋ ์ฐํฉ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์คํด์ค๋ฅผ ๋ฐฐํฌํ๊ธฐ ์ ์ ํ๋ก์ ํธ์ ์์ ์ Project Owner
์ผ)๋ก ์ถ๊ฐํด์ผ ํฉ๋๋ค.
์ ์ ์กฐ๊ฑด
์์ํ๊ธฐ ์ ์ ๋ค์์ ์ํํด์ผ ํฉ๋๋ค.
์์ง ๊ณ์ ์ด ์๋ ๊ฒฝ์ฐ MongoDB Atlas ๊ณ์ ์ ๋ง๋ญ๋๋ค.
Atlas Cluster ๊ฐ ์์ง ์๋ ๊ฒฝ์ฐ ์์ฑํฉ๋๋ค. Atlas Data Federation์ Amazon Web Services, Azure ๋๋ GCP์ ๋ฐฐํฌ๋ Atlas cluster๋ฅผ ์ง์ํฉ๋๋ค.
์ฐธ๊ณ
Atlas cluster๋ฅผ ๋ฐ์ดํฐ ์ ์ฅ์๋ก ์ฌ์ฉํ๋ ค๋ฉด ์ฐํฉ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์คํด์ค์ ๋์ผํ ํ๋ก์ ํธ์ ๋ฐฐํฌํด์ผ ํฉ๋๋ค.
์์ง ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ์ง ์์๋ค๋ฉด Atlas cluster์ ์๋ collection ์ค ํ๋ ์ด์์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ์ธ์.
์ ์ฐจ
Atlas CLI๋ฅผ ์ฌ์ฉํ์ฌ ์ Data Federation ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์์ฑํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ ์คํํฉ๋๋ค.
atlas dataFederation create <name> [options]
๋ช ๋ น ๊ตฌ๋ฌธ ๋ฐ ๋งค๊ฐ๋ณ์์ ๋ํด ์์ธํ ์์๋ณด๋ ค๋ฉด atlas dataFederation create์ ๋ํ Atlas CLI ์ค๋ช ์๋ฅผ ์ฐธ์กฐํ์ธ์.
Atlas Data Federation์ด ์ฐํฉ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์คํด์ค์ ๋ํ ์ฟผ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ ํด๋ผ์ฐ๋ ์ ๊ณต์๋ฅผ ์ ํํฉ๋๋ค.
Amazon Web Services ๋๋ Azure ๋ฅผ ์ ํํ ์ ์์ต๋๋ค. ์ฐํฉ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์คํด์ค๊ฐ ์์ฑ๋๋ฉด, Atlas Data Federation์ด ์ฟผ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ๋ ํด๋ผ์ฐ๋ ๊ณต๊ธ์๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
Atlas cluster์์ ๋ฐ์ดํฐ๋ฅผ ์ฟผ๋ฆฌํ๋ ค๋ ๊ฒฝ์ฐ, cluster์ ํด๋ผ์ฐ๋ ๊ณต๊ธ์์ ๋์ผํ ํด๋ผ์ฐ๋ ๊ณต๊ธ์๋ฅผ ์ ํํ๋ ๊ฒ์ด ์ข์ต๋๋ค. Amazon Web Services S3 ๋๋ Azure Blob Storage์ ๊ฐ์ ๊ฐ์ฒด ์คํ ๋ฆฌ์ง์ ๋ฐ์ดํฐ๋ฅผ ์ฟผ๋ฆฌํ๋ ค๋ฉด ์ฐํฉ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์คํด์ค์ ๋ํด ๊ฐ์ฒด ์คํ ๋ฆฌ์ง๋ฅผ ์ํ cloud์ ๋์ผํ cloud๋ฅผ ์ ํํด์ผ ํฉ๋๋ค.
ํ๋์ ์ฐํฉ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์คํด์ค์ ์ด๋ฆ์ Federated Database Instance Name ์ ๋ ฅํ๊ณ Continue ์(๋ฅผ) ํด๋ฆญํฉ๋๋ค.
FederatedDatabaseInstance[n]
(์ผ)๋ก ๊ธฐ๋ณธ ์ค์ ๋ฉ๋๋ค. ์ฐํฉ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์คํด์ค๊ฐ
์์ฑ๋๊ณ ๋๋ฉด ํด๋น ์ธ์คํด์ค์ ์ด๋ฆ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
๋ฐ์ดํฐ ์ ์ฅ์๋ฅผ ์ง์ ํฉ๋๋ค.
๋ฐ์ดํฐ ์์ค๋ฅผ ์ง์ ํฉ๋๋ค.
Atlas Cluster ๋ฅผ ์ ํํ์ฌ Atlas cluster์ ๋ฐ์ดํฐ์ ๋ํ ์ฐํฉ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์คํด์ค๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
stores.[n].provider
JSON ๊ตฌ์ฑ ์ค์ ์ ํด๋นํฉ๋๋ค.Provide Namespaces in this project ์น์ ์์ ๋ฐ์ดํฐ ์ ์ฅ์๋ก ์ฌ์ฉํ Atlas cluster๋ฅผ ์ ํํฉ๋๋ค.
stores.[n].clusterName
JSON ๊ตฌ์ฑ ์ค์ ์ ํด๋นํฉ๋๋ค.๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํ์ฅํ๊ณ ์ฐํฉ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์คํด์ค์ ์ถ๊ฐํ๋ ค๋ ์ปฌ๋ ์ ์ ์ ํํฉ๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐ ์ปฌ๋ ์ ์ ํํฐ๋งํ๋ ค๋ฉด Search database or collection ํ๋์ ํ ์คํธ๋ฅผ ์ ๋ ฅํฉ๋๋ค. ๋ํ ์์์๋ ๊ฒ์ ๊ธฐ์ค๊ณผ ์ผ์นํ๋ ์ด๋ฆ์ ๊ฐ์ง ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐ ์ปฌ๋ ์ ๋ง ํ์๋ฉ๋๋ค.
databases.[n].collections.[n].dataSources.[n].database
๋ฐdatabases.[n].collections.[n].dataSources.[n].collection
JSON ๊ตฌ์ฑ ์ค์ ์ ํด๋นํฉ๋๋ค.์ ํ ์ฌํญ. ์น์ ์ ํ์ฅํ์ฌ Cluster Read Preference ์ค์ ์ ์ง์ ํฉ๋๋ค.
stores.[n].readPreference
์ ํด๋นํฉ๋๋ค.ํ๋ ์ด๋ฆ์ค๋ชRead Preference Mode์ฝ๊ธฐ ์์ฒญ์ ๋ผ์ฐํ ํ ๋ณต์ ๋ณธ ์ธํธ ๋ฉค๋ฒ๋ฅผ ์ง์ ํฉ๋๋ค. ๋๋กญ๋ค์ด์์ ๋ค์ ์ค ํ๋๋ฅผ ์ ํํ ์ ์์ต๋๋ค.
primary
- ๋ชจ๋ ์ฝ๊ธฐ ์์ฒญ์ ๋ณต์ ๋ณธ ์ธํธ ํ๋ผ์ด๋จธ๋ฆฌ๋ก ๋ผ์ฐํ ํฉ๋๋ค.primaryPreferred
-primary
๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ์๋ง ๋ชจ๋ ์ฝ๊ธฐ ์์ฒญ์ ๋ณต์ ๋ณธ ์ธํธ ํ๋ผ์ด๋จธ๋ฆฌ ๋ฐ ์ธ์ปจ๋๋ฆฌ ๋ฉค๋ฒ๋ก ๋ผ์ฐํ ํฉ๋๋ค.secondary
- ๋ชจ๋ ์ฝ๊ธฐ ์์ฒญ์ ๋ณต์ ๋ณธ ์ธํธ์ ์ธ์ปจ๋๋ฆฌ ๋ฉค๋ฒ๋ก ๋ผ์ฐํ ํฉ๋๋ค.secondaryPreferred
-secondary
๋ฉค๋ฒ๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ์๋ง ๋ชจ๋ ์ฝ๊ธฐ ์์ฒญ์ ๋ณต์ ๋ณธ ์ธํธ์ ์ธ์ปจ๋๋ฆฌ ๋ฉค๋ฒ์ ์ค๋ ํด๋ฌ์คํฐ์ ํ๋ผ์ด๋จธ๋ฆฌ ๋ฉค๋ฒ๋ก ๋ผ์ฐํ ํฉ๋๋ค.nearest
- ๋ฉค๋ฒ๊ฐ ํ๋ผ์ด๋จธ๋ฆฌ ๋ฉค๋ฒ์ธ์ง ์ธ์ปจ๋๋ฆฌ๋ฉค๋ฒ์ธ์ง์ ๊ด๊ณ์์ด ๋ชจ๋ ์ฝ๊ธฐ ์์ฒญ์ ์์์ ์ ๊ฒฉ ๋ณต์ ๋ณธ ์ธํธ ๋ฉค๋ฒ๋ก ๋ผ์ฐํ ํฉ๋๋ค.
Atlas cluster๋ฅผ ์คํ ์ด๋ก ์ถ๊ฐํ๋ ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ฐ์
secondary
์ ๋๋ค.์ฐํฉ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์คํด์ค ์ ์ฅ์ ๊ตฌ์ฑ์์ ์๋ฌด๊ฒ๋ ์ค์ ํ์ง ์์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ฐ์
nearest
์ ๋๋ค. ์์ธํ ์์๋ณด๋ ค๋ฉด ์ฝ๊ธฐ ์ค์ ๋ชจ๋๋ฅผ ์ฐธ์กฐํ์ธ์.stores.[n].readPreference.mode
์ ํด๋นํฉ๋๋ค.TagSets์ฝ๊ธฐ ์์ฒญ์ ๋ผ์ฐํ ํ๋ ค๋ ๋ณต์ ๋ณธ ์ธํธ ๋ฉค๋ฒ์ ์ด๋ฆ ๋ฐ ๊ฐ ์์ด ํฌํจ๋ ํ๊ทธ ๋๋ ํ๊ทธ ์ฌ์ ๋ฌธ์์ ๋ชฉ๋ก์ ์ง์ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ์ฝ๊ธฐ ์ค์ ํ๊ทธ ์ธํธ๋ฅผ ์ฐธ์กฐํ์ธ์.
stores.[n].readPreference.tagSets
์ ํด๋นํฉ๋๋ค.Maxstaleness Seconds์ธ์ปจ๋๋ฆฌ์์ ์ฝ๊ธฐ์ ๋ํ ์ต๋ ๋ณต์ ์ง์ฐ ๋๋ "๋นํ์ฑ"์ ์ง์ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ์ฝ๊ธฐ ์ค์ maxStalenessSeconds๋ฅผ ์ฐธ์กฐํ์ธ์.
stores.[n].readPreference.maxStalenessSeconds
์ ํด๋นํฉ๋๋ค.Next๋ฅผ ํด๋ฆญํฉ๋๋ค.
๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค, ์ปฌ๋ ์ ๋ฐ ๋ทฐ๋ฅผ ์์ฑํ๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค, ์ปฌ๋ ์ ๋ฐ ๋ทฐ๋ฅผ ๋ฐ์ดํฐ ์ ์ฅ์์ ๋งคํํฉ๋๋ค.
(์ ํ ์ฌํญ) ๋ค์์ ํด๋ฆญํฉ๋๋ค. ์ ๊ฒฝ์ฐ:
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํด๋ฆญํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด๋ฆ์ ํธ์งํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์
VirtualDatabase[n]
์ ๋๋ค.databases.[n].name
JSON ๊ตฌ์ฑ ์ค์ ์ ํด๋นํฉ๋๋ค.์ปฌ๋ ์ ์ ํด๋ฆญํ์ฌ ์ปฌ๋ ์ ์ด๋ฆ์ ํธ์งํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์
VirtualCollection[n]
์ ๋๋ค.databases.[n].collections.[n].name
JSON ๊ตฌ์ฑ ์ค์ ์ ํด๋นํฉ๋๋ค.๋ณด๊ธฐ ์ด๋ฆ์ ํธ์งํ๋ ค๋ฉด ๋ณด๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
๋ค์์ ํด๋ฆญํ ์ ์์ต๋๋ค.
Add Database ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐ ์ปฌ๋ ์ ์ ์ถ๊ฐํฉ๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ปฌ๋ ์ ์ ์ถ๊ฐํ๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐ๋ฉ๋๋ค.
์(๋ฅผ) ์ฌ์ฉํ์ฌ ์ปฌ๋ ์ ์ ๋ํ ๋ทฐ ๋ฅผ ์ถ๊ฐํฉ๋๋ค. ๋ทฐ๋ฅผ ๋ง๋ค๋ ค๋ฉด ๋ค์์ ์ง์ ํด์ผ ํฉ๋๋ค.
๋ทฐ์ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค.
๋ทฐ์ ์ ์ฉํ ํ์ดํ๋ผ์ธ ์ ๋๋ค.
๋ทฐ ์ ์ ํ์ดํ๋ผ์ธ์
$out
๋๋$merge
๋จ๊ณ๋ฅผ ํฌํจํ ์ ์์ต๋๋ค. ๋ทฐ ์ ์์$lookup
๋๋$facet
์ ๊ฐ์ ์ค์ฒฉ๋ ํ์ดํ๋ผ์ธ ๋จ๊ณ๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ ์ด ์ ํ์ ํด๋น ์ค์ฒฉ๋ ํ์ดํ๋ผ์ธ์๋ ์ ์ฉ๋ฉ๋๋ค.
๋ทฐ์ ๋ํด ์์ธํ ์์๋ณด๋ ค๋ฉด ๋ค์์ ์ฐธ์กฐํ์ธ์.
๋ฐ์ดํฐ๋ฒ ์ด์ค, ์ปฌ๋ ์ ๋๋ ๋ทฐ์ ์ฐ๊ฒฐ๋ ํญ๋ชฉ์ ์ ๊ฑฐํฉ๋๋ค.
Data Sources ์น์ ์ ๋๋กญ๋ค์ด์์ Atlas Cluster ๋ฅผ ์ ํํฉ๋๋ค.
๋ฐ์ดํฐ ์ ์ฅ์๋ฅผ ๋๋๊ทธ ์ค ๋๋กญํ์ฌ ์ปฌ๋ ์ ๊ณผ ๋งคํํฉ๋๋ค.
databases.[n].collections.[n].dataSources
JSON ๊ตฌ์ฑ ์ค์ ์ ํด๋นํฉ๋๋ค.
Atlas ํด๋ฌ์คํฐ ๋ฐ์ดํฐ ์ ์ฅ์์ ๊ตฌ์ฑ์ ๋ค์๊ณผ ์ ์ฌํด์ผ ํฉ๋๋ค.
1 { 2 "stores" : [ 3 { 4 "name" : "<string>", 5 "provider": "<string>", 6 "clusterName": "<string>", 7 "projectId": "<string>", 8 "readPreference": { 9 "mode": "<string>", 10 "tagSets": [ 11 [{"name": "<string>", "value": "<string>"},...], 12 ... 13 ], 14 "maxStalenessSeconds": <int> 15 } 16 } 17 ], 18 "databases" : [ 19 { 20 "name" : "<string>", 21 "collections" : [ 22 { 23 "name" : "<string>", 24 "dataSources" : [ 25 { 26 "storeName" : "<string>", 27 "database" : "<string>", 28 "databaseRegex": "<string>", 29 "collection" : "<string>", 30 "collectionRegex" : "<string>", 31 "provenanceFieldName": "<string>" 32 } 33 ] 34 } 35 ], 36 "views" : [ 37 { 38 "name" : "<string>", 39 "source" : "<string>", 40 "pipeline" : "<string>" 41 } 42 ] 43 } 44 ] 45 }
์ด๋ฌํ ๊ตฌ์ฑ ์ค์ ์ ๋ํด ์์ธํ ์์๋ณด๋ ค๋ฉด ์ฐํฉ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์คํด์ค์ ๋ํ ๋ฐ์ดํฐ ์ ์ฅ์ ์ ์๋ฅผ ์ฐธ์กฐํ์ธ์.
Atlas ๋ฐ์ดํฐ ์ ์ฅ์๋ฅผ ์ ์ํฉ๋๋ค.
stores
์ ๋ํ UI์ ํ์๋ JSON ๊ตฌ์ฑ ์ค์ ์ ํธ์งํฉ๋๋ค. stores
๊ตฌ์ฑ ์ค์ ์ ๋ค์๊ณผ ์ ์ฌํด์ผ ํฉ๋๋ค.
"stores" : [ { "name" : "<string>", "provider" : "<string>", "clusterName" : "<string>", "projectId": "<string>" "readPreference": { "mode": "<string>", "tagSets": [ [{"name": "<string>", "value": "<string>"},...], ... ], "maxStalenessSeconds": <int> }, "readConcern": { "level": "<string>" } } ]
์ด๋ฌํ ๊ตฌ์ฑ ์ค์ ์ ๋ํด ์์ธํ ์์๋ณด๋ ค๋ฉด stores
๋ฅผ ์ฐธ์กฐํ์ธ์.
์ฐํฉ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์คํด์ค ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค, ์ปฌ๋ ์ ๋ฐ ๋ทฐ๋ฅผ ์ ์ํฉ๋๋ค.
databases
์ ๋ํ UI์ ํ์๋ JSON ๊ตฌ์ฑ ์ค์ ์ ํธ์งํฉ๋๋ค. databases
๊ตฌ์ฑ ์ค์ ์ ๋ค์๊ณผ ์ ์ฌํด์ผ ํฉ๋๋ค.
"databases" : [ { "name" : "<string>", "collections" : [ { "name" : "<string>", "dataSources" : [ { "storeName" : "<string>", "database" : "<string>", "databaseRegex": "<string>", "collection" : "<string>", "collectionRegex" : "<string>", "provenanceFieldName": "<string>" } ] } ] } ]
์ด๋ฌํ ๊ตฌ์ฑ ์ค์ ์ ๋ํด ์์ธํ ์์๋ณด๋ ค๋ฉด databases
๋ฅผ ์ฐธ์กฐํ์ธ์.