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

์ž์ฒด ๊ด€๋ฆฌ ๋ณต์ œ๋ณธ ์„ธํŠธ๋ฅผ ํ‚ค ํŒŒ์ผ ์ธ์ฆ์œผ๋กœ ์—…๋ฐ์ดํŠธ

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

  • ๊ฐœ์š”
  • ๊ณ ๋ ค ์‚ฌํ•ญ
  • ๊ธฐ์กด ๋ณต์ œ๋ณธ ์„ธํŠธ์— ํ‚ค ํŒŒ์ผ ์•ก์„ธ์Šค ์ œ์–ด ์ ์šฉ
  • x.509 ๋‚ด๋ถ€ ์ธ์ฆ

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

  • ๋‚ด๋ถ€ ์ธ์ฆ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ณต์ œ๋ณธ ์„ธํŠธ ๋ฉค๋ฒ„ ๊ฐ„์˜ ๋ณด์•ˆ

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

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

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

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

์ค‘์š”

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

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

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

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

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

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

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

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

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

1

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

์ฐธ๊ณ 

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

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

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

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

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

์ฐธ๊ณ 

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

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

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

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

2

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

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

3

๋ณต์ œ๋ณธ ์„ธํŠธ์˜ ๊ฐ mongod๋ฅผ ์„ธ์ปจ๋”๋ฆฌ ์„œ๋ฒ„๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค. ์ค‘์žฌ์ž๋ฅผ ํฌํ•จํ•˜์—ฌ ๋ณต์ œ๋ณธ ์„ธํŠธ์˜ ๋ชจ๋“  ๋ฉค๋ฒ„๊ฐ€ ์˜คํ”„๋ผ์ธ ์ƒํƒœ๊ฐ€ ๋  ๋•Œ๊นŒ์ง€ ๊ณ„์† ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ž ์žฌ์ ์ธ ๋กค๋ฐฑ์„ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด ํ”„๋ผ์ด๋จธ๋ฆฌ๊ฐ€ ๋งˆ์ง€๋ง‰์œผ๋กœ ์ข…๋ฃŒ๋œ ๋ฉค๋ฒ„์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

mongod๋ฅผ ์ข…๋ฃŒํ•˜๋ ค๋ฉด mongosh๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ mongod๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ  admin ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ db.shutdownServer()๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

use admin
db.shutdownServer()

์ด ๋‹จ๊ณ„๊ฐ€ ๋๋‚˜๋ฉด ๋ณต์ œ๋ณธ ์„ธํŠธ์˜ ๋ชจ๋“  ๋ฉค๋ฒ„๊ฐ€ ์˜คํ”„๋ผ์ธ ์ƒํƒœ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

4

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

๊ตฌ์„ฑ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

  • security.keyFile ๋ฅผ ํ‚ค ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋กœ ์„ค์ •

  • replication.replSetName ๋ฅผ ๋ณต์ œ๋ณธ ์„ธํŠธ ์ด๋ฆ„์œผ๋กœ ์„ค์ •

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

security:
keyFile: <path-to-keyfile>
replication:
replSetName: <replicaSetName>
net:
bindIp: localhost,<hostname(s)|ip address(es)>

๊ตฌ์„ฑ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ mongod๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

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

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

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

  • --keyFile ๋ฅผ ํ‚ค ํŒŒ์ผ ๊ฒฝ๋กœ๋กœ ์„ค์ •

  • --replSet ๋ฅผ ๋ณต์ œ๋ณธ ์„ธํŠธ ์ด๋ฆ„์œผ๋กœ ์„ค์ •

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

mongod --keyFile <path-to-keyfile> --replSet <replicaSetName> --bind_ip localhost,<hostname(s)|ip address(es)>

์ค‘์š”

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

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

๋ช…๋ น์ค„ ์˜ต์…˜์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ mongod ์ฐธ๊ณ  ํŽ˜์ด์ง€์—์„œ ํ™•์ธํ•˜์„ธ์š”.

5

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

rs.status()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋ผ์ด๋จธ๋ฆฌ ๋ณต์ œ๋ณธ ์„ธํŠธ ๋ฉค๋ฒ„๋ฅผ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋ผ์ด๋จธ๋ฆฌ์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๊ณ„์† ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ, ๋กœ์ปฌ ํ˜ธ์ŠคํŠธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด mongosh๋ฅผ ํ”„๋ผ์ด๋จธ๋ฆฌ์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

์ค‘์š”

๊ณ„์† ์ง„ํ–‰ํ•˜๊ธฐ ์ „์— ํ”„๋ผ์ด๋จธ๋ฆฌ์— ์—ฐ๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

6

์ค‘์š”

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

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

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

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

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

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

์ค‘์š”

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

ํŒ

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

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

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

7

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

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

ํŒ

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

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

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

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

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

8

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

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

ํŒ

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

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

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

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

9

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

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

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

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

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

๋ณต์ œ๋ณธ ์„ธํŠธ ๋ฐฐํฌ