์ด ๋ฌธ์๋ Altsis๋ฅผ ์ค์นํ ํ ์ฒซ ๋ฒ์งธ ์์นด๋ฐ๋ฏธ๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌ์ ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธํ๋ ๊ณผ์ ์ ๋จ๊ณ๋ณ๋ก ์ค๋ช ํฉ๋๋ค. ์ค์น ๊ฐ์ด๋๋ฅผ ๋จผ์ ์๋ฃํ์ธ์.
- ์์นด๋ฐ๋ฏธ Document ์์ฑ
- ์์นด๋ฐ๋ฏธ ์ ์ฅ ํ์ธ
- ์์ ์ ๊ณ์ ์์ฑ
- ๋ก๊ทธ์ธ ํ์ธ
- ์ด๊ธฐ ์ค์ ์๋ฃ ํ์ธ
Altsis๋ ๋ฉํฐ ์์นด๋ฐ๋ฏธ ๊ตฌ์กฐ๋ก ์ค๊ณ๋์ด ์์ต๋๋ค. ์์คํ
์ ์ฒ์ ์์ํ๋ ค๋ฉด ์ต์์ root ์์นด๋ฐ๋ฏธ๋ฅผ MongoDB์ ์๋์ผ๋ก ์์ฑํด์ผ ํฉ๋๋ค. ์ด root ์์นด๋ฐ๋ฏธ์ ์์ ์(Owner)๊ฐ ์์คํ
์ ์ฒด๋ฅผ ๊ด๋ฆฌํ๊ฒ ๋ฉ๋๋ค.
root ์์นด๋ฐ๋ฏธ (์ต์์)
โโโ ์์นด๋ฐ๋ฏธ A
โ โโโ ํ๊ต A-1
โ โโโ ํ๊ต A-2
โโโ ์์นด๋ฐ๋ฏธ B
โโโ ํ๊ต B-1
- MongoDB Atlas์ ๋ก๊ทธ์ธํฉ๋๋ค.
- ์ข์ธก ๋ฉ๋ด์์ Database (๋๋ Clusters)๋ฅผ ํด๋ฆญํฉ๋๋ค.
- ์ฌ์ฉ ์ค์ธ ํด๋ฌ์คํฐ์ Browse Collections ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.
- ์ข์ธก ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ชฉ๋ก์์
root๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฐพ์ต๋๋ค.
Tip
์ฒ์ ์คํ ์ ๋ฐฑ์๋ ์๋ฒ๊ฐ root ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์๋์ผ๋ก ์์ฑํฉ๋๋ค. ๋ง์ฝ root ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๋ณด์ด์ง ์์ผ๋ฉด ๋ฐฑ์๋ ์๋ฒ๋ฅผ ํ ๋ฒ ์คํํ๋ค๊ฐ ์ข
๋ฃํ ํ ์๋ก๊ณ ์นจํ์ธ์.
root๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋academies์ปฌ๋ ์ ์ ์ ํํฉ๋๋ค.- ์ปฌ๋ ์ ์ด ๋น์ด์๋ ๊ฒ์ด ์ ์์ ๋๋ค.
INSERT DOCUMENT ๋ฒํผ์ ํด๋ฆญํ๊ณ , ๋ณด๊ธฐ ๋ชจ๋๋ฅผ {} (JSON ๋ณด๊ธฐ)๋ก ์ ํํ ํ ๋ค์ ๋ด์ฉ์ ์
๋ ฅํฉ๋๋ค.
{
"academyId": "root",
"academyName": "root",
"dbName": "root",
"isActivated": true
}๊ฐ ํ๋์ ์๋ฏธ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
| ํ๋ | ์ค๋ช |
|---|---|
academyId |
์์นด๋ฐ๋ฏธ ๊ณ ์ ์๋ณ์ (๋ก๊ทธ์ธ ์ ์ ๋ ฅ) |
academyName |
์์นด๋ฐ๋ฏธ ํ์ ์ด๋ฆ |
dbName |
์์นด๋ฐ๋ฏธ ์ ์ฉ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด๋ฆ |
isActivated |
์์นด๋ฐ๋ฏธ ํ์ฑํ ์ํ (true ํ์) |
Insert ๋ฒํผ์ ํด๋ฆญํ์ฌ Document๋ฅผ ์ ์ฅํฉ๋๋ค.
Warning
isActivated ๊ฐ์ ๋ฐ๋์ true(Boolean)๋ก ์ค์ ํ์ธ์. "true"(๋ฌธ์์ด)๋ก ์
๋ ฅํ๋ฉด ์์นด๋ฐ๋ฏธ์ ์
์ฅํ ์ ์์ต๋๋ค.
- ๋ฐฑ์๋ ์๋ฒ์ ํ๋ก ํธ์๋ ์๋ฒ๊ฐ ๋ชจ๋ ์คํ ์ค์ธ์ง ํ์ธํฉ๋๋ค.
- ๋ธ๋ผ์ฐ์ ์์
http://localhost:3030์ ์ ์ํฉ๋๋ค. - ์์นด๋ฐ๋ฏธ ์ ์ฅ ํ๋ฉด์ด ํ์๋ฉ๋๋ค.
- ์
๋ ฅ๋์
root๋ฅผ ์ ๋ ฅํ๊ณ ์ ์ฅํฉ๋๋ค.
์ ์์ ์ผ๋ก ์ค์ ๋์๋ค๋ฉด ๋ก๊ทธ์ธ ํ๋ฉด์ผ๋ก ์ด๋ํฉ๋๋ค.
Important
์์นด๋ฐ๋ฏธ ์
์ฅ ํ๋ฉด์์ "์์นด๋ฐ๋ฏธ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค"๋ผ๋ ๋ฉ์์ง๊ฐ ๋ํ๋๋ฉด 1๋จ๊ณ์์ ์์ฑํ Document์ academyId ๊ฐ๊ณผ ์
๋ ฅํ ๊ฐ์ด ์ ํํ ์ผ์นํ๋์ง ํ์ธํ์ธ์.
์์นด๋ฐ๋ฏธ์ ์
์ฅํ์ง๋ง ์์ง ๋ก๊ทธ์ธํ ์ ์๋ ์ฌ์ฉ์๊ฐ ์์ต๋๋ค. MongoDB์์ ์์ ์(Owner) ๊ณ์ ์ ์ง์ ์์ฑํฉ๋๋ค. MongoDB์ ๋ฃ๋ password๋ ํ๋ฌธ์ด ์๋๋ผ bcrypt ํด์์ฌ์ผ ํฉ๋๋ค. (Atlas Insert๋ Mongoose pre("save") ํ
์ ๊ฑฐ์น์ง ์์ต๋๋ค.)
๋ฐฑ์๋ ๋๋ ํฐ๋ฆฌ์์ ์ํ๋ ์ด๊ธฐ ๋น๋ฐ๋ฒํธ์ ํด์๋ฅผ ๋ง๋ญ๋๋ค. saltRounds๋ .env์ ๊ฐ(๊ธฐ๋ณธ ์์ 10)๊ณผ ๋ง์ถฅ๋๋ค.
cd backend
node --input-type=module -e "import bcrypt from 'bcrypt'; console.log(await bcrypt.hash('์ฌ๊ธฐ์-๋น๋ฐ๋ฒํธ', 10))"์ถ๋ ฅ๋ $2b$... ๋ฌธ์์ด ์ ์ฒด๋ฅผ ๋ณต์ฌํฉ๋๋ค.
Warning
์์์ ๋ฃ์ ๋น๋ฐ๋ฒํธ๋ ์ฆ์ ์์ ํ ๊ฐ์ผ๋ก ๋ฐ๊พธ๊ณ , ํด์ ์์ฑ์ ์ฌ์ฉํ ํ๋ฌธ ๋น๋ฐ๋ฒํธ๋ฅผ ๊ธฐ์ตํด ๋์ธ์. ํ๋ก๋์ ์์๋ ์์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ฐ๊ณ ๋ก๊ทธ์ธ ํ ์ค์ ์์ ๋ค์ ๋ณ๊ฒฝํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค.
- MongoDB Atlas์์
root๋ฐ์ดํฐ๋ฒ ์ด์ค์users์ปฌ๋ ์ ์ ์ ํํฉ๋๋ค. - INSERT DOCUMENT ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.
{}(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
์ธ์ฆ ์ฝ๋๋ฅผ ์ฃผ์ ์ฒ๋ฆฌํ๊ฑฐ๋ ๋น๋ฐ๋ฒํธ ๊ฒ์ฆ์ ์ฐํํ์ง ๋ง์ธ์. ํด์๊ฐ ์ฌ๋ฐ๋ฅด๋ฉด ๋ฐ๋ก ๋ก๊ทธ์ธํ ์ ์์ต๋๋ค.
- ๋ธ๋ผ์ฐ์ ์์ ์์นด๋ฐ๋ฏธ ID
root๋ก ์ ์ฅํฉ๋๋ค. - ์์ด๋
admin(๋๋ ์ค์ ํuserId)๊ณผ ํด์ ์์ฑ ์ ์ฌ์ฉํ ํ๋ฌธ ๋น๋ฐ๋ฒํธ๋ก ๋ก๊ทธ์ธํฉ๋๋ค. - ๋ก๊ทธ์ธ์ ์ฑ๊ณตํ๋ฉด Altsis ๋์๋ณด๋๊ฐ ํ์๋ฉ๋๋ค.
- (๊ถ์ฅ) ์ฐ์ธก ์๋จ ํ๋กํยท์ค์ ์์ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ค์ ๋ณ๊ฒฝํฉ๋๋ค. UI์์ ๋ณ๊ฒฝํ๋ฉด bcrypt๋ก ๋ค์ ํด์ฑ๋์ด ์ ์ฅ๋ฉ๋๋ค.
๋ก๊ทธ์ธ์ ์คํจํ๋ฉด ๋ค์์ ํ์ธํ์ธ์.
- Document์
password๊ฐ ํด์ ์ ์ฒด์ธ์ง (๋ฐ์ดํยท์ค๋ฐ๊ฟ ์๋ฆผ ์๋์ง) saltRounds์ ํด์ ์์ฑ ์ ์ฌ์ฉํ rounds๊ฐ ๊ฐ์์งauth๊ฐ"owner"์ธ์ง,academyId๊ฐ"root"์ธ์ง
๋ค์ ํญ๋ชฉ์ด ๋ชจ๋ ์๋ฃ๋์๋์ง ํ์ธํฉ๋๋ค.
- MongoDB์
root์์นด๋ฐ๋ฏธ Document๊ฐ ์กด์ฌํ๊ณisActivated: true - MongoDB์ ์์ ์(Owner) ๊ณ์ Document๊ฐ ์กด์ฌํ๊ณ
password๊ฐ bcrypt ํด์ - ์ค์ ํ ๋น๋ฐ๋ฒํธ๋ก ์ ์ ๋ก๊ทธ์ธ ๊ฐ๋ฅ
- ๋ก๊ทธ์ธ ํ Altsis ๋์๋ณด๋๊ฐ ์ ์ ํ์
์ด๊ธฐ ์ค์ ์ด ์๋ฃ๋์์ต๋๋ค. ์ด์ ๋ค์ ์์ ์ ์งํํ ์ ์์ต๋๋ค.
| ์์ | ์ฐธ๊ณ ๋ฌธ์ |
|---|---|
| ์ ์์นด๋ฐ๋ฏธ ์์ฑ | ๊ด๋ฆฌ์ ๊ฐ์ด๋ - ์์นด๋ฐ๋ฏธ ๊ด๋ฆฌ |
| ํ๊ต ์์ฑ ๋ฐ ์ค์ | ๊ด๋ฆฌ์ ๊ฐ์ด๋ - ํ๊ต ๊ด๋ฆฌ |
| ์ฌ์ฉ์ ๋ฑ๋ก ๋ฐ ๊ด๋ฆฌ | ๊ด๋ฆฌ์ ๊ฐ์ด๋ - ์ฌ์ฉ์ ๊ด๋ฆฌ |
| ํ๊ธฐ ์์ฑ | ๊ด๋ฆฌ์ ๊ฐ์ด๋ - ํ๊ธฐ ๊ด๋ฆฌ |
Tip
root ์์นด๋ฐ๋ฏธ์ ์์ ์(Owner) ๊ณ์ ์ ์์คํ
์ ์ฒด์ ์ต๊ณ ๊ด๋ฆฌ์์
๋๋ค. ์ด ๊ณ์ ์ผ๋ก ์๋ก์ด ์์นด๋ฐ๋ฏธ๋ฅผ ์์ฑํ๊ณ ๊ฐ ์์นด๋ฐ๋ฏธ์ ๊ด๋ฆฌ์(Admin)๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.