Skip to content

Latest commit

ย 

History

History
187 lines (129 loc) ยท 7.44 KB

File metadata and controls

187 lines (129 loc) ยท 7.44 KB

์ดˆ๊ธฐ ์„ค์ •

์ด ๋ฌธ์„œ๋Š” Altsis๋ฅผ ์„ค์น˜ํ•œ ํ›„ ์ฒซ ๋ฒˆ์งธ ์•„์นด๋ฐ๋ฏธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌ์ž ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธํ•˜๋Š” ๊ณผ์ •์„ ๋‹จ๊ณ„๋ณ„๋กœ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์„ค์น˜ ๊ฐ€์ด๋“œ๋ฅผ ๋จผ์ € ์™„๋ฃŒํ•˜์„ธ์š”.


๋ชฉ์ฐจ

  1. ์•„์นด๋ฐ๋ฏธ Document ์ƒ์„ฑ
  2. ์•„์นด๋ฐ๋ฏธ ์ž…์žฅ ํ™•์ธ
  3. ์†Œ์œ ์ž ๊ณ„์ • ์ƒ์„ฑ
  4. ๋กœ๊ทธ์ธ ํ™•์ธ
  5. ์ดˆ๊ธฐ ์„ค์ • ์™„๋ฃŒ ํ™•์ธ

๊ฐœ์š”

Altsis๋Š” ๋ฉ€ํ‹ฐ ์•„์นด๋ฐ๋ฏธ ๊ตฌ์กฐ๋กœ ์„ค๊ณ„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ์„ ์ฒ˜์Œ ์‹œ์ž‘ํ•˜๋ ค๋ฉด ์ตœ์ƒ์œ„ root ์•„์นด๋ฐ๋ฏธ๋ฅผ MongoDB์— ์ˆ˜๋™์œผ๋กœ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด root ์•„์นด๋ฐ๋ฏธ์˜ ์†Œ์œ ์ž(Owner)๊ฐ€ ์‹œ์Šคํ…œ ์ „์ฒด๋ฅผ ๊ด€๋ฆฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

root ์•„์นด๋ฐ๋ฏธ (์ตœ์ƒ์œ„)
โ”œโ”€โ”€ ์•„์นด๋ฐ๋ฏธ A
โ”‚   โ”œโ”€โ”€ ํ•™๊ต A-1
โ”‚   โ””โ”€โ”€ ํ•™๊ต A-2
โ””โ”€โ”€ ์•„์นด๋ฐ๋ฏธ B
    โ””โ”€โ”€ ํ•™๊ต B-1

1. ์•„์นด๋ฐ๋ฏธ Document ์ƒ์„ฑ

1.1 MongoDB Atlas์— ์ ‘์†

  1. MongoDB Atlas์— ๋กœ๊ทธ์ธํ•ฉ๋‹ˆ๋‹ค.
  2. ์ขŒ์ธก ๋ฉ”๋‰ด์—์„œ Database (๋˜๋Š” Clusters)๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  3. ์‚ฌ์šฉ ์ค‘์ธ ํด๋Ÿฌ์Šคํ„ฐ์˜ Browse Collections ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

1.2 root ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ academies ์ปฌ๋ ‰์…˜ ํ™•์ธ

  1. ์ขŒ์ธก ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ชฉ๋ก์—์„œ root ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.

Tip

์ฒ˜์Œ ์‹คํ–‰ ์‹œ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„๊ฐ€ root ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ root ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๋ณด์ด์ง€ ์•Š์œผ๋ฉด ๋ฐฑ์—”๋“œ ์„œ๋ฒ„๋ฅผ ํ•œ ๋ฒˆ ์‹คํ–‰ํ–ˆ๋‹ค๊ฐ€ ์ข…๋ฃŒํ•œ ํ›„ ์ƒˆ๋กœ๊ณ ์นจํ•˜์„ธ์š”.

  1. root ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์•„๋ž˜ academies ์ปฌ๋ ‰์…˜์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  2. ์ปฌ๋ ‰์…˜์ด ๋น„์–ด์žˆ๋Š” ๊ฒƒ์ด ์ •์ƒ์ž…๋‹ˆ๋‹ค.

1.3 Academy Document ์‚ฝ์ž…

INSERT DOCUMENT ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๊ณ , ๋ณด๊ธฐ ๋ชจ๋“œ๋ฅผ {} (JSON ๋ณด๊ธฐ)๋กœ ์ „ํ™˜ํ•œ ํ›„ ๋‹ค์Œ ๋‚ด์šฉ์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

{
  "academyId": "root",
  "academyName": "root",
  "dbName": "root",
  "isActivated": true
}

๊ฐ ํ•„๋“œ์˜ ์˜๋ฏธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํ•„๋“œ ์„ค๋ช…
academyId ์•„์นด๋ฐ๋ฏธ ๊ณ ์œ  ์‹๋ณ„์ž (๋กœ๊ทธ์ธ ์‹œ ์ž…๋ ฅ)
academyName ์•„์นด๋ฐ๋ฏธ ํ‘œ์‹œ ์ด๋ฆ„
dbName ์•„์นด๋ฐ๋ฏธ ์ „์šฉ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ด๋ฆ„
isActivated ์•„์นด๋ฐ๋ฏธ ํ™œ์„ฑํ™” ์ƒํƒœ (true ํ•„์ˆ˜)

Insert ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์—ฌ Document๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

Warning

isActivated ๊ฐ’์„ ๋ฐ˜๋“œ์‹œ true(Boolean)๋กœ ์„ค์ •ํ•˜์„ธ์š”. "true"(๋ฌธ์ž์—ด)๋กœ ์ž…๋ ฅํ•˜๋ฉด ์•„์นด๋ฐ๋ฏธ์— ์ž…์žฅํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.


2. ์•„์นด๋ฐ๋ฏธ ์ž…์žฅ ํ™•์ธ

  1. ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์™€ ํ”„๋ก ํŠธ์—”๋“œ ์„œ๋ฒ„๊ฐ€ ๋ชจ๋‘ ์‹คํ–‰ ์ค‘์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  2. ๋ธŒ๋ผ์šฐ์ €์—์„œ http://localhost:3030์— ์ ‘์†ํ•ฉ๋‹ˆ๋‹ค.
  3. ์•„์นด๋ฐ๋ฏธ ์ž…์žฅ ํ™”๋ฉด์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  4. ์ž…๋ ฅ๋ž€์— root๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ์ž…์žฅํ•ฉ๋‹ˆ๋‹ค.

์ •์ƒ์ ์œผ๋กœ ์„ค์ •๋˜์—ˆ๋‹ค๋ฉด ๋กœ๊ทธ์ธ ํ™”๋ฉด์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

Important

์•„์นด๋ฐ๋ฏธ ์ž…์žฅ ํ™”๋ฉด์—์„œ "์•„์นด๋ฐ๋ฏธ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค"๋ผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ๋‚˜ํƒ€๋‚˜๋ฉด 1๋‹จ๊ณ„์—์„œ ์ƒ์„ฑํ•œ Document์˜ academyId ๊ฐ’๊ณผ ์ž…๋ ฅํ•œ ๊ฐ’์ด ์ •ํ™•ํžˆ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.


3. ์†Œ์œ ์ž ๊ณ„์ • ์ƒ์„ฑ

์•„์นด๋ฐ๋ฏธ์— ์ž…์žฅํ–ˆ์ง€๋งŒ ์•„์ง ๋กœ๊ทธ์ธํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. MongoDB์—์„œ ์†Œ์œ ์ž(Owner) ๊ณ„์ •์„ ์ง์ ‘ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. MongoDB์— ๋„ฃ๋Š” password๋Š” ํ‰๋ฌธ์ด ์•„๋‹ˆ๋ผ bcrypt ํ•ด์‹œ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. (Atlas Insert๋Š” Mongoose pre("save") ํ›…์„ ๊ฑฐ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.)

3.1 ๋น„๋ฐ€๋ฒˆํ˜ธ ํ•ด์‹œ ์ƒ์„ฑ

๋ฐฑ์—”๋“œ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ์›ํ•˜๋Š” ์ดˆ๊ธฐ ๋น„๋ฐ€๋ฒˆํ˜ธ์˜ ํ•ด์‹œ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. saltRounds๋Š” .env์˜ ๊ฐ’(๊ธฐ๋ณธ ์˜ˆ์‹œ 10)๊ณผ ๋งž์ถฅ๋‹ˆ๋‹ค.

cd backend
node --input-type=module -e "import bcrypt from 'bcrypt'; console.log(await bcrypt.hash('์—ฌ๊ธฐ์—-๋น„๋ฐ€๋ฒˆํ˜ธ', 10))"

์ถœ๋ ฅ๋œ $2b$... ๋ฌธ์ž์—ด ์ „์ฒด๋ฅผ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

Warning

์˜ˆ์‹œ์— ๋„ฃ์€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ์ฆ‰์‹œ ์•ˆ์ „ํ•œ ๊ฐ’์œผ๋กœ ๋ฐ”๊พธ๊ณ , ํ•ด์‹œ ์ƒ์„ฑ์— ์‚ฌ์šฉํ•œ ํ‰๋ฌธ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๊ธฐ์–ตํ•ด ๋‘์„ธ์š”. ํ”„๋กœ๋•์…˜์—์„œ๋Š” ์ž„์‹œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์“ฐ๊ณ  ๋กœ๊ทธ์ธ ํ›„ ์„ค์ •์—์„œ ๋‹ค์‹œ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

3.2 users ์ปฌ๋ ‰์…˜์— Document ์‚ฝ์ž…

  1. MongoDB Atlas์—์„œ root ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ users ์ปฌ๋ ‰์…˜์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  2. INSERT DOCUMENT ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  3. {} (JSON ๋ณด๊ธฐ)๋กœ ์ „ํ™˜ํ•œ ํ›„ ๋‹ค์Œ ๋‚ด์šฉ์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. password์—๋Š” ์œ„์—์„œ ์ƒ์„ฑํ•œ ํ•ด์‹œ๋ฅผ ๋„ฃ์Šต๋‹ˆ๋‹ค.
{
  "academyId": "root",
  "academyName": "root",
  "auth": "owner",
  "userId": "admin",
  "userName": "๊ด€๋ฆฌ์ž",
  "password": "$2b$10$......................................................"
}

๊ฐ ํ•„๋“œ์˜ ์˜๋ฏธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํ•„๋“œ ๊ฐ’ ์„ค๋ช…
academyId "root" ์†Œ์† ์•„์นด๋ฐ๋ฏธ ID
academyName "root" ์†Œ์† ์•„์นด๋ฐ๋ฏธ ์ด๋ฆ„
auth "owner" ๊ถŒํ•œ ์ˆ˜์ค€ (์ตœ๊ณ  ๊ด€๋ฆฌ์ž)
userId "admin" ๋กœ๊ทธ์ธ์— ์‚ฌ์šฉํ•  ์‚ฌ์šฉ์ž ID
userName "๊ด€๋ฆฌ์ž" ํ™”๋ฉด์— ํ‘œ์‹œ๋  ์ด๋ฆ„
password bcrypt ํ•ด์‹œ ํ‰๋ฌธ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์•„๋‹Œ ํ•ด์‹œ ๋ฌธ์ž์—ด

Insert ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์—ฌ Document๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

Tip

userId์™€ userName์€ ์›ํ•˜๋Š” ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ, auth๋Š” ๋ฐ˜๋“œ์‹œ "owner"์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Important

์ธ์ฆ ์ฝ”๋“œ๋ฅผ ์ฃผ์„ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ฒ€์ฆ์„ ์šฐํšŒํ•˜์ง€ ๋งˆ์„ธ์š”. ํ•ด์‹œ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๋ฉด ๋ฐ”๋กœ ๋กœ๊ทธ์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


4. ๋กœ๊ทธ์ธ ํ™•์ธ

  1. ๋ธŒ๋ผ์šฐ์ €์—์„œ ์•„์นด๋ฐ๋ฏธ ID root๋กœ ์ž…์žฅํ•ฉ๋‹ˆ๋‹ค.
  2. ์•„์ด๋”” admin(๋˜๋Š” ์„ค์ •ํ•œ userId)๊ณผ ํ•ด์‹œ ์ƒ์„ฑ ์‹œ ์‚ฌ์šฉํ•œ ํ‰๋ฌธ ๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ ๋กœ๊ทธ์ธํ•ฉ๋‹ˆ๋‹ค.
  3. ๋กœ๊ทธ์ธ์— ์„ฑ๊ณตํ•˜๋ฉด Altsis ๋Œ€์‹œ๋ณด๋“œ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  4. (๊ถŒ์žฅ) ์šฐ์ธก ์ƒ๋‹จ ํ”„๋กœํ•„ยท์„ค์ •์—์„œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋‹ค์‹œ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. UI์—์„œ ๋ณ€๊ฒฝํ•˜๋ฉด bcrypt๋กœ ๋‹ค์‹œ ํ•ด์‹ฑ๋˜์–ด ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

๋กœ๊ทธ์ธ์— ์‹คํŒจํ•˜๋ฉด ๋‹ค์Œ์„ ํ™•์ธํ•˜์„ธ์š”.

  • Document์˜ password๊ฐ€ ํ•ด์‹œ ์ „์ฒด์ธ์ง€ (๋”ฐ์˜ดํ‘œยท์ค„๋ฐ”๊ฟˆ ์ž˜๋ฆผ ์—†๋Š”์ง€)
  • saltRounds์™€ ํ•ด์‹œ ์ƒ์„ฑ ์‹œ ์‚ฌ์šฉํ•œ rounds๊ฐ€ ๊ฐ™์€์ง€
  • auth๊ฐ€ "owner"์ธ์ง€, academyId๊ฐ€ "root"์ธ์ง€

5. ์ดˆ๊ธฐ ์„ค์ • ์™„๋ฃŒ ํ™•์ธ

๋‹ค์Œ ํ•ญ๋ชฉ์ด ๋ชจ๋‘ ์™„๋ฃŒ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  • MongoDB์— root ์•„์นด๋ฐ๋ฏธ Document๊ฐ€ ์กด์žฌํ•˜๊ณ  isActivated: true
  • MongoDB์— ์†Œ์œ ์ž(Owner) ๊ณ„์ • Document๊ฐ€ ์กด์žฌํ•˜๊ณ  password๊ฐ€ bcrypt ํ•ด์‹œ
  • ์„ค์ •ํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ ์ •์ƒ ๋กœ๊ทธ์ธ ๊ฐ€๋Šฅ
  • ๋กœ๊ทธ์ธ ํ›„ Altsis ๋Œ€์‹œ๋ณด๋“œ๊ฐ€ ์ •์ƒ ํ‘œ์‹œ

๋‹ค์Œ ๋‹จ๊ณ„

์ดˆ๊ธฐ ์„ค์ •์ด ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ๋‹ค์Œ ์ž‘์—…์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž‘์—… ์ฐธ๊ณ  ๋ฌธ์„œ
์ƒˆ ์•„์นด๋ฐ๋ฏธ ์ƒ์„ฑ ๊ด€๋ฆฌ์ž ๊ฐ€์ด๋“œ - ์•„์นด๋ฐ๋ฏธ ๊ด€๋ฆฌ
ํ•™๊ต ์ƒ์„ฑ ๋ฐ ์„ค์ • ๊ด€๋ฆฌ์ž ๊ฐ€์ด๋“œ - ํ•™๊ต ๊ด€๋ฆฌ
์‚ฌ์šฉ์ž ๋“ฑ๋ก ๋ฐ ๊ด€๋ฆฌ ๊ด€๋ฆฌ์ž ๊ฐ€์ด๋“œ - ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ
ํ•™๊ธฐ ์ƒ์„ฑ ๊ด€๋ฆฌ์ž ๊ฐ€์ด๋“œ - ํ•™๊ธฐ ๊ด€๋ฆฌ

Tip

root ์•„์นด๋ฐ๋ฏธ์˜ ์†Œ์œ ์ž(Owner) ๊ณ„์ •์€ ์‹œ์Šคํ…œ ์ „์ฒด์˜ ์ตœ๊ณ  ๊ด€๋ฆฌ์ž์ž…๋‹ˆ๋‹ค. ์ด ๊ณ„์ •์œผ๋กœ ์ƒˆ๋กœ์šด ์•„์นด๋ฐ๋ฏธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ฐ ์•„์นด๋ฐ๋ฏธ์˜ ๊ด€๋ฆฌ์ž(Admin)๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.