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

ํ‚ค ํŒŒ์ผ ์ธ์ฆ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž์ฒด ๊ด€๋ฆฌํ˜• ์ƒค๋“œ ํด๋Ÿฌ์Šคํ„ฐ ๋ฐฐํฌ

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

  • ๊ฐœ์š”
  • ๊ณ ๋ ค ์‚ฌํ•ญ
  • ์‹œ์ž‘ํ•˜๊ธฐ ์ „์—
  • ํ‚ค ํŒŒ์ผ ์•ก์„ธ์Šค ์ œ์–ด๊ฐ€ ํฌํ•จ๋œ ์ƒค๋”ฉ๋œ ํด๋Ÿฌ์Šคํ„ฐ ๋ฐฐํฌ
  • ๋‹ค์Œ ๋‹จ๊ณ„
  • x.509 ๋‚ด๋ถ€ ์ธ์ฆ

์ƒค๋”ฉ๋œ ํด๋Ÿฌ์Šคํ„ฐ ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ์ œ์–ด๋ฅผ ์ ์šฉํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ๋‚ด๋ถ€ ์ธ์ฆ์„ ์‚ฌ์šฉํ•˜๋Š” ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์„ฑ ์š”์†Œ ๊ฐ„ ๋ณด์•ˆ

  • ์‚ฌ์šฉ์ž ์•ก์„ธ์Šค ์ œ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์—ฐ๊ฒฐ ํด๋ผ์ด์–ธํŠธ์™€ ํด๋Ÿฌ์Šคํ„ฐ ๊ฐ„์˜ ๋ณด์•ˆ

์ด ํŠœํ† ๋ฆฌ์–ผ์—์„œ๋Š” ์ƒค๋”ฉ๋œ ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ฐ ๋ฉค๋ฒ„๊ฐ€ ๋ฐ˜๋“œ์‹œ ๋™์ผํ•œ ๋‚ด๋ถ€ ์ธ์ฆ ๋ฉ”์ปค๋‹ˆ์ฆ˜๊ณผ ์„ค์ •์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ํด๋Ÿฌ์Šคํ„ฐ์˜ mongos ๋ฐ mongod ๊ฐ๊ฐ์— ๋‚ด๋ถ€ ์ธ์ฆ์„ ์‹œํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ํŠœํ† ๋ฆฌ์–ผ์—์„œ๋Š” ํ‚ค ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‚ด๋ถ€ ์ธ์ฆ์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๋ถ€ ์ธ์ฆ์„ ์„ค์ •ํ•˜๋ฉด ์‚ฌ์šฉ์ž ์•ก์„ธ์Šค ์ œ์–ด๋„ ๊ฐ•ํ™”๋ฉ๋‹ˆ๋‹ค. ๋ณต์ œ๋ณธ ์„ธํŠธ์— ์—ฐ๊ฒฐํ•˜๋ ค๋ฉด mongosh ์™€ ๊ฐ™์€ ํด๋ผ์ด์–ธํŠธ๋Š” ์‚ฌ์šฉ์ž ๊ณ„์ • ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์•ก์„ธ์Šค ์ œ์–ด๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

Cloud Manager ๋˜๋Š” Ops Manager๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐํฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒฝ์šฐ, ์ธ์ฆ์„ ์‹œํ–‰ํ•˜๋ ค๋ฉด ํ•ด๋‹น Cloud Manager ๋งค๋‰ด์–ผ ๋˜๋Š” Ops Manager ๋งค๋‰ด์–ผ์„ ํ™•์ธํ•˜์„ธ์š”.

์ค‘์š”

๋ณ€๊ฒฝ๋œ IP ์ฃผ์†Œ๋กœ ์ธํ•ด ๊ตฌ์„ฑ์ด ์—…๋ฐ์ดํŠธ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด IP ์ฃผ์†Œ ๋Œ€์‹  DNS ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์„ธ์š”. ํŠนํžˆ ๋ณต์ œ๋ณธ ์„ธํŠธ ๊ตฌ์„ฑ์› ๋˜๋Š” ์ƒค๋”ฉ๋œ ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์„ฑ์›์„ ๊ตฌ์„ฑํ•  ๋•Œ IP ์ฃผ์†Œ ๋Œ€์‹  DNS ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

IP ์ฃผ์†Œ ๋Œ€์‹  ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์—ฌ ์Šคํ”Œ๋ฆฟ ๋„คํŠธ์›Œํฌ ํ˜ธ๋ผ์ด์ฆŒ ์ „๋ฐ˜์— ๊ฑธ์ณ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ตฌ์„ฑํ•˜์„ธ์š”. MongoDB 5.0๋ถ€ํ„ฐ IP ์ฃผ์†Œ๋กœ๋งŒ ๊ตฌ์„ฑ๋œ ๋…ธ๋“œ๋Š” ์Šคํƒ€ํŠธ์—… ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์— ์‹คํŒจํ•˜๋ฉฐ ์‹œ์ž‘๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

2} ๋ฐmongod mongos MongoDB localhost ๋ฐ”์ด๋„ˆ๋ฆฌ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์— ๋ฐ”์ธ๋”ฉ๋ฉ๋‹ˆ๋‹ค.

ํ‚ค ํŒŒ์ผ์€ ์ตœ์†Œํ•œ์˜ ๋ณด์•ˆ ํ˜•ํƒœ์ด๋ฉฐ, ํ…Œ์ŠคํŠธ ๋˜๋Š” ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์— ๊ฐ€์žฅ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ๋Š” x.509 ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์ด ์ž์Šต์„œ๋Š” admin ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ตœ์†Œํ•œ์˜ ๊ด€๋ฆฌ ์‚ฌ์šฉ์ž๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•๋งŒ ๋‹ค๋ฃน๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ธ์ฆ์—๋Š” ๊ธฐ๋ณธ SCRAM ์ธ์ฆ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์‹œ๋„-์‘๋‹ต ๋ณด์•ˆ ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ํ…Œ์ŠคํŠธ ๋˜๋Š” ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์— ๊ฐ€์žฅ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์˜ ๊ฒฝ์šฐ x.509 ์ธ์ฆ์„œ ๋˜๋Š” ์ž์ฒด ๊ด€๋ฆฌํ˜• LDAP ํ”„๋ก์‹œ ์ธ์ฆ(MongoDB Enterprise์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ) ๋˜๋Š” ์ž์ฒด ๊ด€๋ฆฌํ˜• ๋ฐฐํฌ์—์„œ Kerberos ์ธ์ฆ(MongoDB Enterprise์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

ํŠน์ • ์ธ์ฆ ๋ฉ”์ปค๋‹ˆ์ฆ˜์— ๋Œ€ํ•œ ์‚ฌ์šฉ์ž ์ƒ์„ฑ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ํŠน์ • ์ธ์ฆ ๋ฉ”์ปค๋‹ˆ์ฆ˜ ํŽ˜์ด์ง€๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์‚ฌ์šฉ์ž ์ƒ์„ฑ ๋ฐ ๊ด€๋ฆฌ์— ๋Œ€ํ•œ ๊ถŒ์žฅ์‚ฌํ•ญ์€ โžค ์—ญํ•  ๊ธฐ๋ฐ˜ ์•ก์„ธ์Šค ์ œ์–ด ๊ตฌ์„ฑ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์ผ๋ฐ˜์ ์œผ๋กœ ์ƒค๋”ฉ๋œ ํด๋Ÿฌ์Šคํ„ฐ์— ๋Œ€ํ•œ ์‚ฌ์šฉ์ž๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด mongos์— ์—ฐ๊ฒฐํ•˜์—ฌ ์ƒค๋”ฉ๋œ ํด๋Ÿฌ์Šคํ„ฐ ์‚ฌ์šฉ์ž๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ผ๋ถ€ ์œ ์ง€ ๊ด€๋ฆฌ ์ž‘์—…์—๋Š” ์ƒค๋”ฉ๋œ ํด๋Ÿฌ์Šคํ„ฐ์˜ ํŠน์ • ์ƒค๋“œ์— ๋Œ€ํ•œ ์ง์ ‘ ์—ฐ๊ฒฐ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด ์ƒค๋“œ์— ์ง์ ‘ ์—ฐ๊ฒฐํ•˜๊ณ  ์ƒค๋“œ ๋กœ์ปฌ ๊ด€๋ฆฌ ์‚ฌ์šฉ์ž๋กœ ์ธ์ฆํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ƒค๋“œ ๋กœ์ปฌ ์‚ฌ์šฉ์ž๋Š” ํŠน์ • ์ƒค๋“œ ์—๋งŒ ์กด์žฌํ•˜๋ฉฐ ์ƒค๋“œ๋ณ„ ์œ ์ง€ ๊ด€๋ฆฌ ๋ฐ ๊ตฌ์„ฑ์—๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ƒค๋“œ ๋กœ์ปฌ ์‚ฌ์šฉ์ž๋กœ๋Š” mongos ์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด ํŠœํ† ๋ฆฌ์–ผ์—์„œ๋Š” ์ƒค๋”ฉ๋œ ํด๋Ÿฌ์Šคํ„ฐ ์‚ฌ์šฉ์ž๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•˜์ง€๋งŒ, ์ƒค๋“œ ๋กœ์ปฌ ์‚ฌ์šฉ์ž๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ์„ ํƒ์  ๋‹จ๊ณ„๋„ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ž์ฒด ๊ด€๋ฆฌ ๋ฐฐํฌ์„œ๋ฒ„์˜ ์‚ฌ์šฉ์ž ๋ณด์•ˆ ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์ด ํŠœํ† ๋ฆฌ์–ผ์—์„œ๋Š” mongod ๋ฐ mongos ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Windows ์‚ฌ์šฉ์ž๋Š” ๋Œ€์‹  mongod.exe ๋ฐ mongos.exe ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

MongoDB 8.0 ๋ถ€ํ„ฐ๋Š” directShardOperations ์—ญํ•  ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒค๋“œ ์— ๋Œ€ํ•ด ์ง์ ‘ ๋ช…๋ น์„ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋Š” ์œ ์ง€ ๊ด€๋ฆฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฝ๊ณ 

directShardOperations ์—ญํ•  ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด ํด๋Ÿฌ์Šคํ„ฐ ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•˜์ง€ ์•Š๊ณ  ๋ฐ์ดํ„ฐ๊ฐ€ ์†์ƒ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. directShardOperations ์—ญํ•  ์€ ์œ ์ง€ ๊ด€๋ฆฌ ๋ชฉ์ ์œผ๋กœ๋งŒ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ MongoDB ์ง€์› ์˜ ์ง€์นจ ์— ๋”ฐ๋ผ ์‚ฌ์šฉํ•˜์„ธ์š”. ์œ ์ง€ ๊ด€๋ฆฌ ์ž‘์—… ์ˆ˜ํ–‰์ด ์™„๋ฃŒ๋˜๋ฉด directShardOperations ์—ญํ•  ์‚ฌ์šฉ์„ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ์ ˆ์ฐจ์—์„œ๋Š” mongos, config ์„œ๋ฒ„ ๋ฐ 2๊ฐœ์˜ ์ƒค๋“œ๋กœ ๊ตฌ์„ฑ๋œ ์ƒˆ ์ƒค๋”ฉ๋œ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ค‘์š”

๋ณ€๊ฒฝ๋œ IP ์ฃผ์†Œ๋กœ ์ธํ•ด ๊ตฌ์„ฑ์ด ์—…๋ฐ์ดํŠธ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด IP ์ฃผ์†Œ ๋Œ€์‹  DNS ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์„ธ์š”. ํŠนํžˆ ๋ณต์ œ๋ณธ ์„ธํŠธ ๊ตฌ์„ฑ์› ๋˜๋Š” ์ƒค๋”ฉ๋œ ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์„ฑ์›์„ ๊ตฌ์„ฑํ•  ๋•Œ IP ์ฃผ์†Œ ๋Œ€์‹  DNS ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

IP ์ฃผ์†Œ ๋Œ€์‹  ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์—ฌ ์Šคํ”Œ๋ฆฟ ๋„คํŠธ์›Œํฌ ํ˜ธ๋ผ์ด์ฆŒ ์ „๋ฐ˜์— ๊ฑธ์ณ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ตฌ์„ฑํ•˜์„ธ์š”. MongoDB 5.0๋ถ€ํ„ฐ IP ์ฃผ์†Œ๋กœ๋งŒ ๊ตฌ์„ฑ๋œ ๋…ธ๋“œ๋Š” ์Šคํƒ€ํŠธ์—… ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์— ์‹คํŒจํ•˜๋ฉฐ ์‹œ์ž‘๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ‚ค ํŒŒ์ผ ์ธ์ฆ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ƒค๋”ฉ๋œ ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ฐ mongod ๋˜๋Š” mongos ์ธ์Šคํ„ด์Šค๋Š” ๋ฐฐํฌ์—์„œ ๋‹ค๋ฅธ ๋ฉค๋ฒ„๋ฅผ ์ธ์ฆํ•˜๊ธฐ ์œ„ํ•œ ๊ณต์œ  ์•”ํ˜ธ๋กœ ํ‚ค ํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ฌ๋ฐ”๋ฅธ ํ‚ค ํŒŒ์ผ์„ ๊ฐ€์ง„ mongod ๋˜๋Š” mongos ์ธ์Šคํ„ด์Šค๋งŒ ์ƒค๋”ฉ๋œ ํด๋Ÿฌ์Šคํ„ฐ์— ์ฐธ์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ 

๋‚ด๋ถ€ ๋ฉค๋ฒ„์‹ญ ์ธ์ฆ์„ ์œ„ํ•œ ํ‚คํŒŒ์ผ์€ YAML ํ˜•์‹์„ ์‚ฌ์šฉํ•ด ํ‚คํŒŒ์ผ์— ์—ฌ๋Ÿฌ ํ‚ค๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. YAML ํ˜•์‹์€ ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ๋‹จ์ผ ํ‚ค ๋ฌธ์ž์—ด(์ด์ „ ๋ฒ„์ „๊ณผ ๋™์ผ)

  • ํ‚ค ๋ฌธ์ž์—ด์˜ ์ˆœ์„œ

YAML ํ˜•์‹์€ ํ…์ŠคํŠธ ํŒŒ์ผ ํ˜•์‹์„ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์กด์˜ ๋‹จ์ผ ํ‚ค ํ‚คํŒŒ์ผ๊ณผ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค.

ํ‚ค ๊ธธ์ด๋Š” 6~1024์ž ์‚ฌ์ด์—ฌ์•ผ ํ•˜๋ฉฐ base64 ์„ธํŠธ์˜ ๋ฌธ์ž๋งŒ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒค๋”ฉ๋œ ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ชจ๋“  ๋ฉค๋ฒ„๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ๊ณตํ†ต ํ‚ค๋ฅผ ๊ณต์œ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ 

UNIX ์‹œ์Šคํ…œ์—์„œ๋Š” ํ‚ค ํŒŒ์ผ์— ๊ทธ๋ฃน ๋˜๋Š” ์›”๋“œ ๊ถŒํ•œ์ด ์—†์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Windows ์‹œ์Šคํ…œ์—์„œ๋Š” ํ‚ค ํŒŒ์ผ ๊ถŒํ•œ์ด ํ™•์ธ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์›ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ํ‚ค ํŒŒ์ผ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ ์ž‘์—…์—์„œ๋Š” openssl ์‚ฌ์šฉํ•˜์—ฌ ๊ณต์œ  ์•”ํ˜ธ๋กœ ์‚ฌ์šฉํ•  ๋ณต์žกํ•œ ์˜์‚ฌ ๋‚œ์ˆ˜ 1024์ž ๋ฌธ์ž์—ด์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ chmod ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ผ ์†Œ์œ ์ž์—๊ฒŒ๋งŒ ์ฝ๊ธฐ ๊ถŒํ•œ์„ ์ œ๊ณตํ•˜๋„๋ก ํŒŒ์ผ ๊ถŒํ•œ์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

openssl rand -base64 756 > <path-to-keyfile>
chmod 400 <path-to-keyfile>

ํ‚คํŒŒ์ผ ์‚ฌ์šฉ์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์„ธ๋ถ€ ์ •๋ณด ๋ฐ ์š”๊ตฌ ์‚ฌํ•ญ์€ ํ‚คํŒŒ์ผ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์ƒค๋”ฉ๋œ ํด๋Ÿฌ์Šคํ„ฐ ๋ฉค๋ฒ„๋ฅผ ํ˜ธ์ŠคํŒ…ํ•˜๋Š” ๊ฐ ์„œ๋ฒ„์— ํ‚ค ํŒŒ์ผ์„ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. mongod ๋˜๋Š” mongos ์ธ์Šคํ„ด์Šค๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ํŒŒ์ผ์˜ ์†Œ์œ ์ž์ด๋ฉฐ ํ‚ค ํŒŒ์ผ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

USB ๋“œ๋ผ์ด๋ธŒ ๋˜๋Š” ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ์ €์žฅ ์žฅ์น˜์™€ ๊ฐ™์ด mongod ๋˜๋Š” mongos์ธ์Šคํ„ด์Šค๋ฅผ ํ˜ธ์ŠคํŒ…ํ•˜๋Š” ํ•˜๋“œ์›จ์–ด์—์„œ ์‰ฝ๊ฒŒ ๋ถ„๋ฆฌ๋  ์ˆ˜ ์žˆ๋Š” ์ €์žฅ ๋งค์ฒด์— ํ‚ค ํŒŒ์ผ์„ ์ €์žฅํ•˜์ง€ ๋งˆ์„ธ์š”.

๋‹ค์Œ ๋‹จ๊ณ„๋Š” config ์„œ๋ฒ„ ๋ณต์ œ๋ณธ ์„ธํŠธ๋ฅผ ๋ฐฐํฌํ•˜๋Š” ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค.

ํ”„๋กœ๋•์…˜ ๋ฐฐํฌ์˜ ๊ฒฝ์šฐ ๋ฉค๋ฒ„๊ฐ€ ์„ธ ๊ฐœ ์ด์ƒ ํฌํ•จ๋œ config ์„œ๋ฒ„ ๋ณต์ œ๋ณธ ์„ธํŠธ๋ฅผ ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด์„œ ๋‹จ์ผ ๋ฉค๋ฒ„ ๋ณต์ œ๋ณธ ์„ธํŠธ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1

config ์„œ๋ฒ„ ๋ณต์ œ๋ณธ ์„ธํŠธ ์—์„œ ๊ฐ mongod ๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. keyFile ์„ค์ •์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. keyFile ์„ค์ •์€ ์ž์ฒด ๊ด€๋ฆฌ ๋ฐฐํฌ์„œ๋ฒ„์—์„œ ์ž์ฒด ๊ด€๋ฆฌ ๋‚ด๋ถ€/๋ฉค๋ฒ„์‹ญ ์ธ์ฆ ๊ณผ ์—ญํ•  ๊ธฐ๋ฐ˜ ์•ก์„ธ์Šค ์ œ์–ด๋ฅผ ๋ชจ๋‘ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ตฌ์„ฑ ํŒŒ์ผ์ด๋‚˜ ๋ช…๋ น์ค„์„ ํ†ตํ•ด mongod ์„ค์ •์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ตฌ์„ฑ ํŒŒ์ผ

๊ตฌ์„ฑ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ security.keyFile์„ ํ‚ค ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋กœ, sharding.clusterRole์„ configsvr๋กœ, replication.replSetName์„ ์›ํ•˜๋Š” config ์„œ๋ฒ„ ๋ณต์ œ๋ณธ ์„ธํŠธ์˜ ์ด๋ฆ„์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

security:
keyFile: <path-to-keyfile>
sharding:
clusterRole: configsvr
replication:
replSetName: <setname>

๊ตฌ์„ฑ์— ํ•„์š”ํ•œ ์ถ”๊ฐ€ ์˜ต์…˜์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์›๊ฒฉ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฐฐํฌ์— ์—ฐ๊ฒฐํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌ ๋ฉค๋ฒ„๊ฐ€ ๋‹ค๋ฅธ ํ˜ธ์ŠคํŠธ์—์„œ ์‹คํ–‰๋˜๋„๋ก ํ•˜๋ ค๋ฉด net.bindIp ์„ค์ •์„ ์ง€์ •ํ•˜์„ธ์š”.

--config ์˜ต์…˜๊ณผ ๊ตฌ์„ฑ ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•˜์—ฌ mongod๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

mongod --config <path-to-config-file>

๋ช…๋ น์ค„

๋ช…๋ น์ค„ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ --keyFile, --configsvr ๋ฐ --replSet ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ mongod๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

mongod --keyFile <path-to-keyfile> --configsvr --replSet <setname> --dbpath <path>

๊ตฌ์„ฑ์— ํ•„์š”ํ•œ ์ถ”๊ฐ€ ์˜ต์…˜์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์›๊ฒฉ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๋ฐฐํฌ์— ์—ฐ๊ฒฐํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌ ๊ตฌ์„ฑ์›์ด ๋‹ค๋ฅธ ํ˜ธ์ŠคํŠธ์—์„œ ์‹คํ–‰๋˜๋„๋ก ํ•˜๋ ค๋ฉด --bind_ip ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

2

localhost ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด mongosh๋ฅผ mongod ์ธ์Šคํ„ด์Šค ์ค‘ ํ•˜๋‚˜์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. mongod ์ธ์Šคํ„ด์Šค์™€ ๋™์ผํ•œ ๋ฌผ๋ฆฌ์  ์ปดํ“จํ„ฐ์—์„œ mongosh๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฐฐํฌ๋ฅผ ์œ„ํ•ด ์ƒ์„ฑ๋œ ์‚ฌ์šฉ์ž๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋กœ์ปฌ ํ˜ธ์ŠคํŠธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์‚ฌ์šฉ์ž ์ƒ์„ฑ ํ›„ localhost ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋‹ซํž™๋‹ˆ๋‹ค.

3

rs.initiate() ๋ฉ”์„œ๋“œ๋Š” ๋ณต์ œ๋ณธ ์„ธํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๋ฉฐ ์„ ํƒ ์‚ฌํ•ญ์ธ ๋ณต์ œ๋ณธ ์„ธํŠธ ๊ตฌ์„ฑ ๋ฌธ์„œ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณต์ œ๋ณธ ์„ธํŠธ ๊ตฌ์„ฑ ๋ฌธ์„œ์—๋Š” ๋‹ค์Œ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

  • _id์ž…๋‹ˆ๋‹ค. _id๋Š” ๋ฐ˜๋“œ์‹œ mongod์œผ๋กœ ์ „๋‹ฌ๋œ --replSet ๋งค๊ฐœ ๋ณ€์ˆ˜์™€ ์ผ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • members ํ•„๋“œ์ž…๋‹ˆ๋‹ค. members ํ•„๋“œ๋Š” ๋ฐฐ์—ด์ด๋ฉฐ ๋ณต์ œ๋ณธ ์„ธํŠธ์˜ ๊ฐ ๋ฉค๋ฒ„๋‹น ๋ฌธ์„œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  • configsvr ํ•„๋“œ์ž…๋‹ˆ๋‹ค. configsvr ํ•„๋“œ๋Š” ๋ฐ˜๋“œ์‹œ config ์„œ๋ฒ„ ๋ณต์ œ๋ณธ ์„ธํŠธ์— ๋Œ€ํ•ด true๋กœ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ณต์ œ๋ณธ ์„ธํŠธ ๊ตฌ์„ฑ ๋ฌธ์„œ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ž์ฒด ๊ด€๋ฆฌํ˜• ๋ณต์ œ๋ณธ ์„ธํŠธ ๊ตฌ์„ฑ ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

rs.initiate() ๋ฉ”์„œ๋“œ์™€ ๊ตฌ์„ฑ ๋ฌธ์„œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณต์ œ๋ณธ ์„ธํŠธ๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

rs.initiate(
{
_id: "myReplSet",
configsvr: true,
members: [
{ _id : 0, host : "cfg1.example.net:27019" },
{ _id : 1, host : "cfg2.example.net:27019" },
{ _id : 2, host : "cfg3.example.net:27019" }
]
}
)

config ์„œ๋ฒ„ ๋ณต์ œ๋ณธ ์„ธํŠธ(CSRS)๊ฐ€ ์‹œ์ž‘๋˜๊ณ  ์ž‘๋™๋˜๋ฉด ์ƒค๋“œ ๋ณต์ œ๋ณธ ์„ธํŠธ ์ƒ์„ฑ์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

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

์ด ๋‹จ๊ณ„์—๋Š” ์ƒค๋“œ ๋กœ์ปฌ ์‚ฌ์šฉ์ž๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•œ ์„ ํƒ์  ์ ˆ์ฐจ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๊ฐ ์ƒค๋“œ์— ๋Œ€ํ•ด ์ƒค๋“œ ์ˆ˜์ค€ ์œ ์ง€ ๊ด€๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ํ™•๋ณด๋ฉ๋‹ˆ๋‹ค.

1

keyFile ๋งค๊ฐœ ๋ณ€์ˆ˜์™€ ํ•จ๊ป˜ mongod ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์ž์ฒด ๊ด€๋ฆฌ ๋ฐฐํฌ์„œ๋ฒ„์—์„œ ์ž์ฒด ๊ด€๋ฆฌ ๋‚ด๋ถ€/๋ฉค๋ฒ„์‹ญ ์ธ์ฆ ๊ณผ ์—ญํ•  ๊ธฐ๋ฐ˜ ์•ก์„ธ์Šค ์ œ์–ด๊ฐ€ ๋ชจ๋‘ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

๊ตฌ์„ฑ ํŒŒ์ผ ๋˜๋Š” ๋ช…๋ น์ค„์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณต์ œ๋ณธ ์„ธํŠธ์˜ ๊ฐ mongod๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

๊ตฌ์„ฑ ํŒŒ์ผ

๊ตฌ์„ฑ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ security.keyFile ์˜ต์…˜์„ ํ‚ค ํŒŒ์ผ ๊ฒฝ๋กœ๋กœ ์„ค์ •ํ•˜๊ณ , replication.replSetName ์˜ต์…˜์„ ์›ํ•˜๋Š” ๋ณต์ œ๋ณธ ์„ธํŠธ ์ด๋ฆ„์œผ๋กœ ์„ค์ •ํ•˜๊ณ , sharding.clusterRole ์˜ต์…˜์„ shardsvr๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

security:
keyFile: <path-to-keyfile>
sharding:
clusterRole: shardsvr
replication:
replSetName: <replSetName>
storage:
dbPath: <path>

๊ตฌ์„ฑ์— ํ•„์š”ํ•œ ์ถ”๊ฐ€ ์˜ต์…˜์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์›๊ฒฉ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฐฐํฌ์— ์—ฐ๊ฒฐํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌ ๋ฉค๋ฒ„๊ฐ€ ๋‹ค๋ฅธ ํ˜ธ์ŠคํŠธ์—์„œ ์‹คํ–‰๋˜๋„๋ก ํ•˜๋ ค๋ฉด net.bindIp ์„ค์ •์„ ์ง€์ •ํ•˜์„ธ์š”.

--config ์˜ต์…˜๊ณผ ๊ตฌ์„ฑ ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•˜์—ฌ mongod๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

mongod --config <path-to-config-file>

๋ช…๋ น์ค„

๋ช…๋ น์ค„ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ์š”์†Œ๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ ๋‹ค์Œ ์˜ˆ์‹œ์™€ ๊ฐ™์ด --keyFile, replSet ๋ฐ --shardsvr ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

mongod --keyFile <path-to-keyfile> --shardsvr --replSet <replSetName> --dbpath <path>

๊ตฌ์„ฑ์— ํ•„์š”ํ•œ ์ถ”๊ฐ€ ์˜ต์…˜์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์›๊ฒฉ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๋ฐฐํฌ์— ์—ฐ๊ฒฐํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌ ๊ตฌ์„ฑ์›์ด ๋‹ค๋ฅธ ํ˜ธ์ŠคํŠธ์—์„œ ์‹คํ–‰๋˜๋„๋ก ํ•˜๋ ค๋ฉด --bind_ip ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

2

localhost ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด mongosh๋ฅผ mongod ์ธ์Šคํ„ด์Šค ์ค‘ ํ•˜๋‚˜์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. mongod ์ธ์Šคํ„ด์Šค์™€ ๋™์ผํ•œ ๋ฌผ๋ฆฌ์  ์ปดํ“จํ„ฐ์—์„œ mongosh๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฐฐํฌ๋ฅผ ์œ„ํ•ด ์ƒ์„ฑ๋œ ์‚ฌ์šฉ์ž๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋กœ์ปฌ ํ˜ธ์ŠคํŠธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์‚ฌ์šฉ์ž ์ƒ์„ฑ ํ›„ localhost ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋‹ซํž™๋‹ˆ๋‹ค.

3

mongosh์—์„œ rs.initiate() ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

rs.initiate()๋Š” ์„ ํƒ ์‚ฌํ•ญ์œผ๋กœ ๋ณต์ œ๋ณธ ์„ธํŠธ ๊ตฌ์„ฑ ๋ฌธ์„œ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณต์ œ๋ณธ ์„ธํŠธ ๊ตฌ์„ฑ ๋ฌธ์„œ์— ๋‹ค์Œ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

  • _id ํ•„๋“œ๋Š” replication.replSetName ๋˜๋Š” --replSet ์˜ต์…˜์— ์ง€์ •๋œ ๋ณต์ œ๋ณธ ์„ธํŠธ ์ด๋ฆ„์œผ๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

  • ๋ณต์ œ๋ณธ ์„ธํŠธ์˜ ๊ฐ ๋ฉค๋ฒ„์— ๋Œ€ํ•œ ๋ฌธ์„œ๊ฐ€ ์žˆ๋Š” members ๋ฐฐ์—ด.

๋‹ค์Œ ์˜ˆ๋Š” ๋ฉค๋ฒ„๊ฐ€ 3๋ช…์ธ ๋ณต์ œ๋ณธ ์„ธํŠธ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

rs.initiate(
{
_id : "myReplSet",
members: [
{ _id : 0, host : "s1-mongo1.example.net:27018" },
{ _id : 1, host : "s1-mongo2.example.net:27018" },
{ _id : 2, host : "s1-mongo3.example.net:27018" }
]
}
)

rs.initiate()๋Š” ํˆฌํ‘œ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜๊ณ  ๋ฉค๋ฒ„ ์ค‘ ํ•˜๋‚˜๋ฅผ ํ”„๋ผ์ด๋จธ๋ฆฌ๋กœ ์„ ์ถœํ•ฉ๋‹ˆ๋‹ค.

๊ณ„์†ํ•˜๊ธฐ ์ „์— ํ”„๋ผ์ด๋จธ๋ฆฌ์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ํ”„๋ผ์ด๋จธ๋ฆฌ ๋ฉค๋ฒ„๋ฅผ ์ฐพ์œผ๋ ค๋ฉด rs.status()๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

4

์ค‘์š”

์ฒซ ๋ฒˆ์งธ ์‚ฌ์šฉ์ž๋ฅผ ๋งŒ๋“  ํ›„์—๋Š” ๋กœ์ปฌ ํ˜ธ์ŠคํŠธ ์˜ˆ์™ธ๋ฅผ ๋” ์ด์ƒ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ์‚ฌ์šฉ์ž๋Š” userAdminAnyDatabase์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ž์ฒด ๊ด€๋ฆฌํ˜• ๋ฐฐํฌ์˜ Localhost ์˜ˆ์™ธ๊ฐ€ ์ข…๋ฃŒ๋œ ํ›„ ์ถ”๊ฐ€ ์‚ฌ์šฉ์ž๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ ์–ด๋„ ํ•œ ๋ช…์˜ ์‚ฌ์šฉ์ž์—๊ฒŒ ์‚ฌ์šฉ์ž๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์ด ์—†๋Š” ๊ฒฝ์šฐ ๋กœ์ปฌ ํ˜ธ์ŠคํŠธ ์˜ˆ์™ธ๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ์ƒˆ ๊ถŒํ•œ์œผ๋กœ ์‚ฌ์šฉ์ž๋ฅผ ๋งŒ๋“ค๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ํ•„์š”ํ•œ ์ž‘์—…์— ์•ก์„ธ์Šคํ•˜์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

db.createUser() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” admin ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ตœ์†Œํ•œ userAdminAnyDatabase ์—ญํ• ์„ ๊ฐ–๊ณ  ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด ํ”„๋ผ์ด๋จธ๋ฆฌ์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ์˜ˆ์—์„œ๋Š” admin ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— userAdminAnyDatabase ์—ญํ• ์„ ๊ฐ€์ง„ fred ์‚ฌ์šฉ์ž๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์ค‘์š”

์‹œ์Šคํ…œ ๋ณด์•ˆ์„ ๋ณด์žฅํ•˜๊ณ  ์•…์˜์ ์ธ ์•ก์„ธ์Šค๋ฅผ ๋ฐฉ์ง€ํ•˜๊ฑฐ๋‚˜ ์ง€์—ฐํ•˜๋ ค๋ฉด ์•”ํ˜ธ๋Š” ์ž„์˜์ ์ด๊ณ  ๊ธธ๋ฉฐ ๋ณต์žกํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํŒ

๋ฉ”์„œ๋“œ/๋ช…๋ น ํ˜ธ์ถœ์—์„œ ์•”ํ˜ธ๋ฅผ ์ง์ ‘ ์ง€์ •ํ•˜๋Š” ๋Œ€์‹  passwordPrompt() ๋ฉ”์„œ๋“œ๋ฅผ ๋‹ค์–‘ํ•œ ์‚ฌ์šฉ์ž ์ธ์ฆ/๊ด€๋ฆฌ ๋ฉ”์„œ๋“œ/๋ช…๋ น๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ ์•”ํ˜ธ๋ฅผ ๋ฌป๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด์ „ ๋ฒ„์ „์˜ mongo ์…ธ์—์„œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ง์ ‘ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

admin = db.getSiblingDB("admin")
admin.createUser(
{
user: "fred",
pwd: passwordPrompt(), // or cleartext password
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)

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

5

admin ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ธ์ฆํ•ฉ๋‹ˆ๋‹ค.

mongosh์—์„œ๋Š” db.auth()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์ฆํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ์€ ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ์ž fred๋ฅผ ์ธ์ฆํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

ํŒ

๋ฉ”์„œ๋“œ/๋ช…๋ น ํ˜ธ์ถœ์—์„œ ์•”ํ˜ธ๋ฅผ ์ง์ ‘ ์ง€์ •ํ•˜๋Š” ๋Œ€์‹  passwordPrompt() ๋ฉ”์„œ๋“œ๋ฅผ ๋‹ค์–‘ํ•œ ์‚ฌ์šฉ์ž ์ธ์ฆ/๊ด€๋ฆฌ ๋ฉ”์„œ๋“œ/๋ช…๋ น๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ ์•”ํ˜ธ๋ฅผ ๋ฌป๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด์ „ ๋ฒ„์ „์˜ mongo ์…ธ์—์„œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ง์ ‘ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

db.getSiblingDB("admin").auth("fred", passwordPrompt()) // or cleartext password

๋˜๋Š” -u <username>, -p <password> ๋ฐ --authenticationDatabase ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ์ƒˆ๋กœ์šด mongosh ์ธ์Šคํ„ด์Šค๋ฅผ ํ”„๋ผ์ด๋จธ๋ฆฌ ๋ณต์ œ๋ณธ ์„ธํŠธ ๊ตฌ์„ฑ์›์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

mongosh -u "fred" -p --authenticationDatabase "admin"

-p ๋ช…๋ น์ค„ ์˜ต์…˜์— ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด mongosh(์ด)๊ฐ€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ฌป๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

6

์ƒค๋“œ ๋กœ์ปฌ ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ์ž ์‚ฌ์šฉ์ž๋Š” ๋ณต์ œ ์ž‘์—…์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ์ œ๊ณตํ•˜๋Š” clusterAdmin ์—ญํ• ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

๋ณต์ œ๋ณธ ์„ธํŠธ ์ž‘์—…๊ณผ ๊ด€๋ จ๋œ ์ „์ฒด ์—ญํ•  ๋ชฉ๋ก์€ ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ ์—ญํ• ์—์„œ ํ™•์ธํ•˜์„ธ์š”.

ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ์ž ์‚ฌ์šฉ์ž๋ฅผ ๋งŒ๋“ค๊ณ  admin ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ clusterAdmin ์—ญํ• ์„ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.

ํŒ

๋ฉ”์„œ๋“œ/๋ช…๋ น ํ˜ธ์ถœ์—์„œ ์•”ํ˜ธ๋ฅผ ์ง์ ‘ ์ง€์ •ํ•˜๋Š” ๋Œ€์‹  passwordPrompt() ๋ฉ”์„œ๋“œ๋ฅผ ๋‹ค์–‘ํ•œ ์‚ฌ์šฉ์ž ์ธ์ฆ/๊ด€๋ฆฌ ๋ฉ”์„œ๋“œ/๋ช…๋ น๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ ์•”ํ˜ธ๋ฅผ ๋ฌป๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด์ „ ๋ฒ„์ „์˜ mongo ์…ธ์—์„œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ง์ ‘ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

db.getSiblingDB("admin").createUser(
{
"user" : "ravi",
"pwd" : passwordPrompt(), // or cleartext password
roles: [ { "role" : "clusterAdmin", "db" : "admin" } ]
}
)

๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜๋ฉด ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

๋ณต์ œ๋ณธ ์„ธํŠธ ๋ฐ ์ƒค๋”ฉ๋œ ํด๋Ÿฌ์Šคํ„ฐ ์ž‘์—…๊ณผ ๊ด€๋ จ๋œ ๊ธฐ๋ณธ ์ œ๊ณต ์—ญํ• ์˜ ์ „์ฒด ๋ชฉ๋ก์€ ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ ์—ญํ• ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

1

๊ตฌ์„ฑ ํŒŒ์ผ ๋˜๋Š” ๋ช…๋ น์ค„ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ‚ค ํŒŒ์ผ์„ ์ง€์ •ํ•˜๋Š” mongos๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

๊ตฌ์„ฑ ํŒŒ์ผ

๊ตฌ์„ฑ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ security.keyFile์„ ํ‚ค ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋กœ, sharding.configDB๋ฅผ ๋ณต์ œ๋ณธ ์„ธํŠธ ์ด๋ฆ„์œผ๋กœ ์„ค์ •ํ•˜๊ณ , ํ•˜๋‚˜ ์ด์ƒ์˜ ๋ณต์ œ๋ณธ ์„ธํŠธ ๋ฉค๋ฒ„๋ฅผ <replSetName>/<host:port> ํ˜•์‹์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

security:
keyFile: <path-to-keyfile>
sharding:
configDB: <configReplSetName>/cfg1.example.net:27019,cfg2.example.net:27019,...

๊ตฌ์„ฑ์— ํ•„์š”ํ•œ ์ถ”๊ฐ€ ์˜ต์…˜์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์›๊ฒฉ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฐฐํฌ์— ์—ฐ๊ฒฐํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌ ๋ฉค๋ฒ„๊ฐ€ ๋‹ค๋ฅธ ํ˜ธ์ŠคํŠธ์—์„œ ์‹คํ–‰๋˜๋„๋ก ํ•˜๋ ค๋ฉด net.bindIp ์„ค์ •์„ ์ง€์ •ํ•˜์„ธ์š”.

--config ์˜ต์…˜๊ณผ ๊ตฌ์„ฑ ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•˜์—ฌ mongos๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

mongos --config <path-to-config>

๋ช…๋ น์ค„

๋ช…๋ น์ค„ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ mongos๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  --keyFile ๋ฐ --configdb ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

mongos --keyFile <path-to-keyfile> --configdb <configReplSetName>/cfg1.example.net:27019,cfg2.example.net:27019,...

๊ตฌ์„ฑ์— ํ•„์š”ํ•œ ์ถ”๊ฐ€ ์˜ต์…˜์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์›๊ฒฉ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๋ฐฐํฌ์— ์—ฐ๊ฒฐํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌ ๊ตฌ์„ฑ์›์ด ๋‹ค๋ฅธ ํ˜ธ์ŠคํŠธ์—์„œ ์‹คํ–‰๋˜๋„๋ก ํ•˜๋ ค๋ฉด --bind_ip ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

2

localhost ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด mongosh๋ฅผ mongos ์ธ์Šคํ„ด์Šค ์ค‘ ํ•˜๋‚˜์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. mongos ์ธ์Šคํ„ด์Šค์™€ ๋™์ผํ•œ ๋ฌผ๋ฆฌ์  ์ปดํ“จํ„ฐ์—์„œ mongosh๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฐฐํฌ๋ฅผ ์œ„ํ•ด ์ƒ์„ฑ๋œ ์‚ฌ์šฉ์ž๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋กœ์ปฌ ํ˜ธ์ŠคํŠธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์‚ฌ์šฉ์ž ์ƒ์„ฑ ํ›„ localhost ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋‹ซํž™๋‹ˆ๋‹ค.

3

์ค‘์š”

์ฒซ ๋ฒˆ์งธ ์‚ฌ์šฉ์ž๋ฅผ ๋งŒ๋“  ํ›„์—๋Š” ๋กœ์ปฌ ํ˜ธ์ŠคํŠธ ์˜ˆ์™ธ๋ฅผ ๋” ์ด์ƒ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ์‚ฌ์šฉ์ž๋Š” userAdminAnyDatabase์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ž์ฒด ๊ด€๋ฆฌํ˜• ๋ฐฐํฌ์˜ Localhost ์˜ˆ์™ธ๊ฐ€ ์ข…๋ฃŒ๋œ ํ›„ ์ถ”๊ฐ€ ์‚ฌ์šฉ์ž๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๋ฅผ ์ƒ์„ฑํ•  ๊ถŒํ•œ์ด ์—†๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ํ•œ ๋ช… ์ด์ƒ์ธ ๊ฒฝ์šฐ, ๋กœ์ปฌ ํ˜ธ์ŠคํŠธ ์˜ˆ์™ธ๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ์‚ฌ์šฉ์ž๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ํ•„์š”ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

db.createUser() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” admin ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ตœ์†Œํ•œ userAdminAnyDatabase ์—ญํ• ์„ ๊ฐ–๊ณ  ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ค‘์š”

์‹œ์Šคํ…œ ๋ณด์•ˆ์„ ๋ณด์žฅํ•˜๊ณ  ์•…์˜์ ์ธ ์•ก์„ธ์Šค๋ฅผ ๋ฐฉ์ง€ํ•˜๊ฑฐ๋‚˜ ์ง€์—ฐํ•˜๋ ค๋ฉด ์•”ํ˜ธ๋Š” ์ž„์˜์ ์ด๊ณ  ๊ธธ๋ฉฐ ๋ณต์žกํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ์˜ˆ์‹œ์—์„œ๋Š” admin ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์‚ฌ์šฉ์ž fred๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

ํŒ

๋ฉ”์„œ๋“œ/๋ช…๋ น ํ˜ธ์ถœ์—์„œ ์•”ํ˜ธ๋ฅผ ์ง์ ‘ ์ง€์ •ํ•˜๋Š” ๋Œ€์‹  passwordPrompt() ๋ฉ”์„œ๋“œ๋ฅผ ๋‹ค์–‘ํ•œ ์‚ฌ์šฉ์ž ์ธ์ฆ/๊ด€๋ฆฌ ๋ฉ”์„œ๋“œ/๋ช…๋ น๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ ์•”ํ˜ธ๋ฅผ ๋ฌป๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด์ „ ๋ฒ„์ „์˜ mongo ์…ธ์—์„œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ง์ ‘ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

admin = db.getSiblingDB("admin")
admin.createUser(
{
user: "fred",
pwd: passwordPrompt(), // or cleartext password
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)

๊ธฐ๋ณธ ์ œ๊ณต ์—ญํ•  ๋ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์ž‘์—…๊ณผ ๊ด€๋ จ๋œ ์—ญํ• ์˜ ์ „์ฒด ๋ชฉ๋ก์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์šฉ์ž ์—ญํ• ์—์„œ ํ™•์ธํ•˜์„ธ์š”.

4

db.auth()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ์ž๋กœ ์ธ์ฆํ•ด ์ถ”๊ฐ€ ์‚ฌ์šฉ์ž๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

ํŒ

๋ฉ”์„œ๋“œ/๋ช…๋ น ํ˜ธ์ถœ์—์„œ ์•”ํ˜ธ๋ฅผ ์ง์ ‘ ์ง€์ •ํ•˜๋Š” ๋Œ€์‹  passwordPrompt() ๋ฉ”์„œ๋“œ๋ฅผ ๋‹ค์–‘ํ•œ ์‚ฌ์šฉ์ž ์ธ์ฆ/๊ด€๋ฆฌ ๋ฉ”์„œ๋“œ/๋ช…๋ น๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ ์•”ํ˜ธ๋ฅผ ๋ฌป๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด์ „ ๋ฒ„์ „์˜ mongo ์…ธ์—์„œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ง์ ‘ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

db.getSiblingDB("admin").auth("fred", passwordPrompt()) // or cleartext password

๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜๋ฉด ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

๋˜๋Š” -u <username>, -p <password> ๋ฐ --authenticationDatabase "admin" ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ mongosh ์„ธ์…˜์„ ๋Œ€์ƒ ๋ณต์ œ๋ณธ ์„ธํŠธ ๋ฉค๋ฒ„์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ์— ์—ฐ๊ฒฐํ•˜๋ ค๋ฉด ์ž์ฒด ๊ด€๋ฆฌ ๋ฐฐํฌ์„œ๋ฒ„์—์„œ ๋กœ์ปฌ ํ˜ธ์ŠคํŠธ ์˜ˆ์™ธ๋ฅผ mongos ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

mongosh -u "fred" -p --authenticationDatabase "admin"

-p ๋ช…๋ น์ค„ ์˜ต์…˜์— ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด mongosh(์ด)๊ฐ€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ฌป๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

5

ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ์ž ์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” ๋ณต์ œ ๋ฐ ์ƒค๋”ฉ ์ž‘์—…์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋Š” clusterAdmin ์—ญํ• ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

admin ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— clusterAdmin ์‚ฌ์šฉ์ž๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ์˜ˆ์‹œ์—์„œ๋Š” admin ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์‚ฌ์šฉ์ž ravi๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ค‘์š”

์‹œ์Šคํ…œ ๋ณด์•ˆ์„ ๋ณด์žฅํ•˜๊ณ  ์•…์˜์ ์ธ ์•ก์„ธ์Šค๋ฅผ ๋ฐฉ์ง€ํ•˜๊ฑฐ๋‚˜ ์ง€์—ฐํ•˜๋ ค๋ฉด ์•”ํ˜ธ๋Š” ์ž„์˜์ ์ด๊ณ  ๊ธธ๋ฉฐ ๋ณต์žกํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํŒ

๋ฉ”์„œ๋“œ/๋ช…๋ น ํ˜ธ์ถœ์—์„œ ์•”ํ˜ธ๋ฅผ ์ง์ ‘ ์ง€์ •ํ•˜๋Š” ๋Œ€์‹  passwordPrompt() ๋ฉ”์„œ๋“œ๋ฅผ ๋‹ค์–‘ํ•œ ์‚ฌ์šฉ์ž ์ธ์ฆ/๊ด€๋ฆฌ ๋ฉ”์„œ๋“œ/๋ช…๋ น๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ ์•”ํ˜ธ๋ฅผ ๋ฌป๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด์ „ ๋ฒ„์ „์˜ mongo ์…ธ์—์„œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ง์ ‘ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

db.getSiblingDB("admin").createUser(
{
"user" : "ravi",
"pwd" : passwordPrompt(), // or cleartext password
roles: [ { "role" : "clusterAdmin", "db" : "admin" } ]
}
)

๋ณต์ œ๋ณธ ์„ธํŠธ ๋ฐ ์ƒค๋”ฉ๋œ ํด๋Ÿฌ์Šคํ„ฐ ์ž‘์—…๊ณผ ๊ด€๋ จ๋œ ๊ธฐ๋ณธ ์ œ๊ณต ์—ญํ• ์˜ ์ „์ฒด ๋ชฉ๋ก์€ ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ ์—ญํ• ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

6

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ƒค๋”ฉ๋œ ํด๋Ÿฌ์Šคํ„ฐ ์— ์—ฐ๊ฒฐํ•˜๊ณ  ์•ก์„ธ์Šค ํ•  ์ˆ˜ ์žˆ๋„๋ก ์‚ฌ์šฉ์ž๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋ฐ ์™€ read ๊ฐ™์€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋‚ด์žฅ ์ œ๊ณต readWrite ์—ญํ• ์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์šฉ์ž ์—ญํ•  ์„ ์ฐธ์กฐํ•˜์„ธ์š”. ์ถ”๊ฐ€ ๊ด€๋ฆฌ ์‚ฌ์šฉ์ž๊ฐ€ ํ•„์š”ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ ์€ ์ž์ฒด ๊ด€๋ฆฌ ๋ฐฐํฌ์„œ๋ฒ„์˜ ์‚ฌ์šฉ์ž๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์ถ”๊ฐ€ ์‚ฌ์šฉ์ž๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด userAdminAnyDatabase ๋˜๋Š” userAdmin ์—ญํ• ์„ ๊ฐ€์ง„ ์‚ฌ์šฉ์ž๋กœ ์ธ์ฆํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ณ„์† ์ง„ํ–‰ํ•˜๋ ค๋ฉด mongos์— ์—ฐ๊ฒฐ๋˜์–ด์•ผ ํ•˜๋ฉฐ, ์ƒค๋”ฉ๋œ ํด๋Ÿฌ์Šคํ„ฐ์— ๋Œ€ํ•œ ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ์ž ์‚ฌ์šฉ์ž๋กœ ์ธ์ฆ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ 

์ด๋Š” ์ƒค๋”ฉ๋œ ํด๋Ÿฌ์Šคํ„ฐ์˜ ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ์ž์ด๋ฉฐ, ์ƒค๋“œ ๋กœ์ปฌ ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ์ž๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

ํด๋Ÿฌ์Šคํ„ฐ์— ๊ฐ ์ƒค๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด sh.addShard() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ƒค๋“œ๊ฐ€ ๋ณต์ œ๋ณธ ์„ธํŠธ์ธ ๊ฒฝ์šฐ ๋ณต์ œ๋ณธ ์„ธํŠธ์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•˜๊ณ  ์„ธํŠธ์˜ ๋ฉค๋ฒ„๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ๋•์…˜ ๋ฐฐํฌ์—์„œ๋Š” ๋ชจ๋“  ์ƒค๋“œ๊ฐ€ ๋ณต์ œ๋ณธ ์„ธํŠธ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ์ž‘์—…์€ ํด๋Ÿฌ์Šคํ„ฐ์— ๋‹จ์ผ ์ƒค๋“œ ๋ณต์ œ๋ณธ ์„ธํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

sh.addShard( "<replSetName>/s1-mongo1.example.net:27017")

๋‹ค์Œ ์ž‘์—…์€ ํด๋Ÿฌ์Šคํ„ฐ์— ๋…๋ฆฝํ˜• mongod ์ƒค๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

sh.addShard( "s1-mongo1.example.net:27017")

ํด๋Ÿฌ์Šคํ„ฐ์— ๋ชจ๋“  ์ƒค๋“œ๊ฐ€ ํฌํ•จ๋  ๋•Œ๊นŒ์ง€ ์ด ๋‹จ๊ณ„๋ฅผ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ์ƒค๋”ฉ๋œ ํด๋Ÿฌ์Šคํ„ฐ๋Š” ํด๋Ÿฌ์Šคํ„ฐ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ฐ ์ƒค๋”ฉ๋œ ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์„ฑ ์š”์†Œ ๊ฐ„์˜ ๋‚ด๋ถ€ ํ†ต์‹ ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ์ œ์–ด๋ฅผ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ณ„์† ์ง„ํ–‰ํ•˜๋ ค๋ฉด mongos์— ์—ฐ๊ฒฐ๋˜์–ด์•ผ ํ•˜๋ฉฐ, ์ƒค๋”ฉ๋œ ํด๋Ÿฌ์Šคํ„ฐ์— ๋Œ€ํ•œ ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ์ž ์‚ฌ์šฉ์ž๋กœ ์ธ์ฆ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ 

์ด๋Š” ์ƒค๋”ฉ๋œ ํด๋Ÿฌ์Šคํ„ฐ์˜ ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ์ž์ด๋ฉฐ, ์ƒค๋“œ ๋กœ์ปฌ ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ์ž๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

์ปฌ๋ ‰์…˜์„ ์ƒค๋”ฉํ•˜๋ ค๋ฉด sh.shardCollection() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ปฌ๋ ‰์…˜์˜ ์ „์ฒด ๋„ค์ž„์ŠคํŽ˜์ด์Šค์™€ ์ƒค๋“œ ํ‚ค๊ฐ€ ํฌํ•จ๋œ ๋ฌธ์„œ๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ƒค๋“œ ํ‚ค ์„ ํƒ์€ ์ƒค๋”ฉ์˜ ํšจ์œจ์„ฑ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ตฌ์—ญ๊ณผ ๊ฐ™์€ ํŠน์ • ์ƒค๋”ฉ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜๋Š” ๋Šฅ๋ ฅ์— ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค. ์ƒค๋“œ ํ‚ค ์„ ํƒ์— ๋‚˜์—ด๋œ ์„ ํƒ ๊ณ ๋ ค ์‚ฌํ•ญ์„ ์ฐธ๊ณ ํ•˜์„ธ์š”.

์ปฌ๋ ‰์…˜์— ์ด๋ฏธ ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ, shardCollection()์„ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— db.collection.createIndex() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒค๋“œ ํ‚ค์— ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ปฌ๋ ‰์…˜์ด ๋น„์–ด ์žˆ์œผ๋ฉด MongoDB๋Š” sh.shardCollection()์˜ ์ผ๋ถ€๋กœ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ sh.shardCollection() ๋ฉ”์„œ๋“œ์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค.

sh.shardCollection("<database>.<collection>", { <key> : <direction> } )

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ƒค๋”ฉ๋œ ํด๋Ÿฌ์Šคํ„ฐ์— ์—ฐ๊ฒฐํ•˜์—ฌ ์ƒํ˜ธ ์ž‘์šฉ์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์‚ฌ์šฉ์ž๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ฝ๊ธฐ ์ „์šฉ ๋ฐ ์ฝ๊ธฐ/์“ฐ๊ธฐ ์‚ฌ์šฉ์ž๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ณธ ์ œ๊ณต ์—ญํ• ์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์šฉ์ž ์—ญํ• ์—์„œ ํ™•์ธํ•˜์„ธ์š”.

๋‚ด๋ถ€ ์ธ์ฆ์— x.509๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ž์ฒด ๊ด€๋ฆฌํ˜• MongoDB์˜ ๋ฉค๋ฒ„์‹ญ ์ธ์ฆ์— x.509 ์ธ์ฆ์„œ ์‚ฌ์šฉ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

ํ‚ค ํŒŒ์ผ ๋‚ด๋ถ€ ์ธ์ฆ ์—์„œ x๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ ํ•ฉ๋‹ˆ๋‹ค.509 ๋‚ด๋ถ€ ์ธ์ฆ, ํ‚ค ํŒŒ์ผ ์ธ์ฆ์—์„œ ์ž์ฒด ๊ด€๋ฆฌํ˜• MongoDB ๋ฅผ x๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.509 ์ธ์ฆ.

ํŒ

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

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

๋ณต์ œ๋ณธ ์„ธํŠธ ์—…๋ฐ์ดํŠธ(๋‹ค์šดํƒ€์ž„ ์—†์Œ)