๋ชฉ์ฐจ
์ง๊ธ๊น์ง ์ธํ ํ ์๋ฒ์ DB๋ฅผ ๋ฌ์๋ณด์!
1. DB ํบ์๋ณด๊ธฐ
0) DB๊ฐ ํ์ํ ์ด์
์น ์๋น์ค๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด์ ์ค์ํ ๊ฒ ์ค ํ๋๋ ์ฌ์ฉ์๋ค์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒ์ด๋ค.
์ด๋ฅผ ์ํด์ ์ฌ์ฉํ๋ ๊ฒ์ด DataBase(DB)์ด๋ค!
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ด์ฉํด ๋น ๋ฅธ ๋ฐ์ดํฐ์ ์ ์ถ๋ ฅ๊ณผ ๋์ฉ๋ ๋ณด๊ด์ ํ ์ ์๋ค.
1) DB์ ์ข ๋ฅ
DB์ ์ข ๋ฅ์๋ ๊ณ์ธตํ, ๋คํธ์ํฌํ, ๊ด๊ณํ, ๊ฐ์ฒด์งํฅ, ๋น๊ด๊ณํ์ด ์๋ค.
์ด์ค ์ต๊ทผ ๋ง์ด ์ฌ์ฉํ๋ ๊ฒ์ ๊ด๊ณํ๊ณผ ๋น๊ด๊ณํ์ด๋ค.
์ด ๋์ ๋ํด ๊ฐ๋จํ ์์๋ณด์.
- ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค
์ฝ๊ฒ ์ด๊ฒ์ ์ค๋ช ํ๋ฉด ์์ ๊ณผ ๋น์ทํ๋ค.
ํ ์ด๋ธ์ด ์กด์ฌํ๊ณ , ๋ฐ์ดํฐ๋ฅผ ํ ํ์ฉ ์ฐจ๋ก๋ก ๋ณด๊ดํ๋ค.
์ด๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ DBMS(๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ์์คํ )๋ฅผ ์ค์นํด์ผํ๋ค.
ex) MySQL, Oracle, SQLite, PostgreSQL ๋ฑ
๋ฐ์ดํฐ๋ฅผ ์ ์ถ๋ ฅ ํ๊ธฐ ์ํด์๋ SQL ์ด๋ผ๋ ์ธ์ด๋ฅผ ์ฌ์ฉํด์ผํ๊ณ ,
๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋๋ ์ ๊ทํ๋ฅผ ํ ํ ์ ์ฅํ๋ค. (๋ฐ์ดํฐ์ ์ ๋ขฐ์ฑ UP)
์ฅ์ :
๋์ ์ ๋ขฐ๋ / ์ ๊ทํ๋ก ์ธํ ๋ฐ์ดํฐ ์์ ์ฑ·๋ฌด๊ฒฐ์ฑ ์ ์ง, ๊ฐฑ์ ๋น์ฉ ์ต์ํ / ๋ค์ฉ๋ ์ฌ์ฉ๊ฐ๋ฅ / ๋ฐ์ดํฐ ๋ถ๋ฅ, ์ ๋ ฌ, ํ์์๋ ๋น ๋ฆ ๋ฑ
๋จ์ :
๋๋์ ๋ฐ์ดํฐ ์ ๋ ฅ ์ / ์ํํ์ฅ ์ด๋ ค์ / ์ด ํ์ฅ ์ด๋ ค์(์ ์ฐ์ฑ ๋ถ์กฑ) ๋ฑ
- ๋น๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค
๊ด๊ณํ์ ๋นํด ์์ ๋ก์ด ํ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋ค.
NoSQL DB๋ก๋ ๋ถ๋ฆฌ๋ ๋งํผ SQL ์ธ์ด๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ์ ์๋ค.
(๊ฐ์ , ๋ณด์์ ์ฉ๋๋ก ์ฌ์ฉ)
๋ํ ์ ๊ทํ ๊ณผ์ ์ ๊ฑฐ์น์ง ์๋๋ฐ ์ด๊ฒ์ด ๊ถ์ฅ์ฌํญ์ด๋ผ๊ณ ํ๋ค.
์ข ๋ฅ๋ key&value (Redis ๋ฑ), document (MongoDB ๋ฑ), Big Table DB ๋ฑ์ด ์๋ค.
์ฅ์ :
๋ฐ์ดํฐ ๋ถ์ฐํ์ฌ ์ ์ฅ,์ฒ๋ฆฌ ๊ฐ๋ฅ (๋น ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ฉ์ด), ๊ตฌ์กฐ ์ ํ์ง ์์ ์ ์ฐ์ฑ ์ข์, ๋น ๋ฅธ ๋ฐ์ดํฐ ์ ์ถ๋ ฅ,
๋จ์ :
์ ๊ทํ๋ฅผ ํ์ง ์์ผ๋ฏ๋ก ๋ฐ์ดํฐ ์์ ์ฑ, ์ ํ๋, ๋ฌด๊ฒฐ์ฑ ๋ฑ์ด ๋จ์ด์ง
์ด๋ฌํ ํน์ง๋ค์ ๊ณ ๋ คํ์ฌ ํ๋ก์ ํธ๋ฅผ ๊ณํ ์ DB๋ฅผ ์ด๋ ํ ๋ฐฉ์์ผ๋ก ์ค๊ณํ ์ง ์ ํ๋ ๊ธฐ์ค์ด ๋ ์ ์๋ค!
2. MongoDB ์ธํ
1) MongoDB๋?
MongoDB๋ ๋น๊ด๊ณํ DB์ด๊ธฐ ๋๋ฌธ์ SQL์ ์ฌ์ฉํ์ง ์๊ณ ๋น๊ต์ ํธํ๊ฒ DB๋ฅผ ๊ตฌ์ถํ ์ ์๋ค.
๋ํ document DB๋ก ๋ถ๋ฅ๋๋๋ฐ,
collection ์ด๋ผ๋ ํฐ ํ์ document๋ฅผ ์ฌ๋ฟ ๋ง๋ค๋ฉฐ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋กํ๋ ๋ฐฉ์์ด๋ค.
(collection = ๋๋ ํ ๋ฆฌ, ํ ์ด๋ธ / document = ํ์ผ, row ์ ๊ฐ๋ )
document๋ JS์ object ์ฒ๋ผ ๊ธฐ๋กํ๋๋ฐ ๋๋ฌธ์ JS ํ๋ก์ ํธ์์ ๊ทธ๋๋ก DB์ ๋ฃ์ ์ ์์ด
DB๋ก์ ์ ์ถ๋ ฅ์ด ๋งค์ฐ ๊ฐํธํ๋ค!
2) ํธ์คํ ๋ฐ๊ธฐ
์ฌ์ฉํ๊ธฐ ์ํด์๋ 2๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋๋ฐ
1. ์ปดํจํฐ์ mongodb ์ง์ ์ค์น / 2. ํด๋ผ์ฐ๋์์ ํธ์คํ ๋ฐ๊ธฐ ์ด๋ค.
์ด๋ฒ์๋ ํธ์คํ ์ ๋ฐ๋ ๋ฐฉ์์ ์ ํํ ๊ฒ์ธ๋ฐ
๊ฐ์ ์ ๋ฌด๋ฃ์ฉ๋(์ฝ 500MB)์ ์ ๊ณตํด์ฃผ๊ณ , ๊ณผ๊ธํ์ฌ ์ ๊ทธ๋ ์ด๋ ์ ๋ฐฑ์ ๊ธฐ๋ฅ ์ ๊ณต,
replica set์ด๋ผ๋ 3๊ฐ์ DB์ ์๋์ผ๋ก ๋ถ์ฐ์ ์ฅ ํด์ฃผ๋ ๊ธฐ๋ฅ๋ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์
์์ฃผ ํธ๋ฆฌํ๊ฒ ์ด์ฉํ ์ ์๋ค.
3) ์ธํ (์์ฝ๋ฒ์ )
์ธํ ์ด ๊ฐํธํ ํธ์ด๊ธฐ ๋๋ฌธ์ ๊ตฌ๊ธ๋งํ๋ฉด ์ด๋ ต์ง ์๊ฒ ๊ฐ๋ฅํ๋ค.
๋ฐ๋ผ์ ๊ฐ๋ตํ๊ฒ ์ธํ ์ ์์ฝํด๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
1. ๊ฐ์ ํ๊ธฐ
2. ํ๋ก์ ํธ ์์ฑ
3. Deployment -> database -> create -> ๋ฌด๋ฃํฐ์ด&์์ธ์๋ฒ&DB์ด๋ฆ -> ์์ฑ!
3. Security -> Database Access -> ์ ์ ์์ฑ -> [Password Authentication] ์์ด๋/pw ์ ํ๊ธฐ -> [Built-in Role] : Atlas admin -> ์ ์ ์ถ๊ฐ!
4. Security -> Network Access -> ip ์ฃผ์ ์ถ๊ฐ -> allow access from anywhere ๋๋ 0.0.0.0/0 ์ ๋ ฅ (์๋ฌด๋ ๋ค์ด์ค๊ธฐ) -> ip์ฃผ์ ์ถ๊ฐ!
4) DB / collection ์์ฑ
์ด์ DB๋ฅผ ๋ง๋ค์ด๋ณด์.
์์ ์ธํ ๊ณผ์ ์์ ๋ง๋ค์๋ [Deployment] -> [Database] ์์ ํด๋ฌ์คํฐ ํ์ด์ง์ ๋ค์ด๊ฐ๋ฉด [Collections] ํญ์ด ์๋ค.
Add Own my data ๋ฒํผ์ ๋๋ฌ DB๋ฅผ ์์ฑํ๋ค.
๊ฒ์ํ ํ๋ก์ ํธ ์ด๋ฏ๋ก DB name : forum / Collections name : post ๋ก ์ง์ด์ฃผ์๋ค!
3. ์๋ฒ์ MongoDB ์ฐ๊ฒฐํ๊ธฐ
๋ชฝ๊ณ DB ์ธํ ์ ๋ง์ณค๋ค๋ฉด ์๋ฒ์ ์ฐ๊ฒฐํด๋ณด์!
๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌ์ ์ธก๋ฉด์์ ๋ฐ๋ผ๋ณด๋ฉด
์ ์ ๊ฐ ์ง์ DB๋ฅผ ์ปจํธ๋กคํ๊ฒ ํด์๋ ์๋๊ณ , ์ค๊ฐ์์ ๊ฒ์ฌ๋ฅผ ํด์ฃผ์ด์ผํ๋ค.
๊ทธ ์ญํ ์ ํ๋ ๊ฒ์ด ์๋ฒ์ด๋ค.
1. ์ ์ ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ๋ก -> 2. ์๋ฒ๊ฐ ๊ฒ์ฌ ํ DB์ ์ ์ฅ
์ด๋ผ๋ ๋จ๊ณ๋ฅผ ๊ฑฐ์น๋ ๊ฒ์ด๋ค.
1) ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น
- ํ๋ก์ ํธ ํฐ๋ฏธ๋์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ์ฌ ์ค์นํ๋ค.
npm install mongodb@5
2) ์๋ฒํ์ผ ์์
- server.js(์๋ฒํ์ผ)์ ์๋จ์ ์๋์ ์ฝ๋๋ฅผ ์ฝ์ ํ๋ค.
const { MongoClient } = require('mongodb')
let db;
const url = 'MongoDB ์ฌ์ดํธ์ ๋ฑ๋ก๋ DB ์ ์ URL'
new MongoClient(url).connect().then((client)=>{
console.log("DB connected");
db = client.db('forum') //์ค์ ํ db ์ด๋ฆ
//app.listen๊ณผ ๊ฐ์ ์ฝ๋๋ฅผ ์ด์ชฝ์ผ๋ก ์ฎ๊ธฐ๋ฉด ๋ ์์ ์ ์!
app.listen(8080, () => {
console.log('http://localhost:8080 ์์ ์๋ฒ ์คํ์ค!')
})
}).catch((err)=>{
console.error(err);
})
์ด๋ url ๋ณ์์ ํ ๋นํ ์ฃผ์๋ MongoDB ์ฌ์ดํธ์ DB์์ connect ๋ฒํผ์ ๋๋ฌ ํ์ธํ ์ ์๋ค.
ํ์ด์ง์ ๋ค์ด๊ฐ๋ณด๋ฉด ์๋์ ๊ฐ์ ์ฃผ์๊ฐ ์๋๋ฐ
"mongodb+srv://<DB์ ์์์ด๋>:<๊ทธ ์์ด๋์ password>@cluster0.aoikrmx.mongodb.net/?retryWrites=true&w=majority"
์ ์ ์์ด๋์ ๊ทธ ์์ด๋์ password๋ฅผ ์ ์ ๋ ฅํด์ผํ๋ค.
์ด๋ ์์ด๋, pw ๋ [DatabaseAccess]์ ๋ฑ๋ก๋ ์ ์ ์ ๋ํ ์ ๋ณด์ด๋ค.
3) ํ์ธํด๋ณด๊ธฐ
๊ฐ๋จํ๊ฒ ์ฐ๊ฒฐ์ด ๋์๋์ง ๋์ผ๋ก ํ์ธํด๊ธฐ ์ํด์ ํ ์คํธ๋ฅผ ํด๋ณด์.
app.get('/news', (request, response) => {
db.collection('post').insertOne({title: '์ค๋์ ๋ ์จ'});
})
์ด์ ์ฌ์ดํธ์์ ํ์ธํด๋ณด๋ฉด ๋๋ค!
'๐ | WEB DEV > NodeJS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[NodeJS+Express] 6. EJS๋ก MongoDB ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉํ๊ธฐ (0) | 2023.10.08 |
---|---|
[NodeJS+Express] 5. MongoDB์์ ๋ฐ์ดํฐ ๊บผ๋ด๊ธฐ (0) | 2023.09.24 |
[NodeJS+Express] 3.์ ์ ํ์ผ ๋ฃ์ด์ฃผ๊ธฐ (cssํ์ผ ๋ฑ๋ก) & Bootstrap ์ด์ฉํ๊ธฐ (0) | 2023.09.23 |
[NodeJS+Express] nodemon์ผ๋ก ์๋ํํ๊ธฐ (0) | 2023.09.23 |
[NodeJS+Express] 2.์๋ก์ด ํ์ด์ง ๋ง๋ค๊ธฐ (0) | 2023.09.23 |
๋๊ธ