MySQL์ SQL์ ์ฌ์ฉํ๋ ๋ํ์ ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ด๋ฉฐ, ๋ชฝ๊ณ ๋๋น๋ SQL์ ์ฌ์ฉํ์ง ์๋ NoSQL์ด๋ค.
SQL(MySQL) | NoSQL(๋ชฝ๊ณ ๋๋น) |
๊ท์น์ ๋ง๋ ๋ฐ์ดํฐ ์ ๋ ฅ | ์์ ๋ก์ด ๋ฐ์ดํฐ ์ ๋ ฅ |
ํ ์ด๋ธ ๊ฐ JOIN ์ง์ | ์ปฌ๋ ์ ๊ฐ JOIN ๋ฏธ์ง์ |
์์ ์ฑ, ์ผ๊ด์ฑ | ํ์ฅ์ฑ, ๊ฐ์ฉ์ฑ |
์ฉ์ด(ํ ์ด๋ธ, ๋ก์ฐ, ์ปฌ๋ผ) | ์ฉ์ด(์ปฌ๋ ์ , ๋คํ๋จผํธ, ํ๋) |
ํด๋น ์ฌ์ดํธ์์ ํ์ผ ๋ค์ด๋ก๋ ๋ฐ ์ค์น ์๋ฃ
1. C:\data\db ํด๋๋ฅผ ๋ง๋ ํ, ๋ชฝ๊ณ ๋๋น๊ฐ ์ค์น๋ ๊ฒฝ๋ก๋ก ์ด๋ํด mongod ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ์ฌ ๋ชฝ๊ณ ๋๋น ์คํ
2. mongo ๋ช ๋ น์ด๋ก ๋ชฝ๊ณ ๋๋น ํ๋กฌํํธ ์ ์
3. use admin
db.createUser({ user: '์ด๋ฆ', pwd: '๋น๋ฐ๋ฒํธ', roles: ['root'] })
๋ฉ์๋๋ก ๊ณ์ ์์ฑ
4. $ mongod --auth
$ mongo admin -u [์ด๋ฆ] -p [๋น๋ฐ๋ฒํธ]
๋ช ๋ น์ด๋ก ์ ์
use [๋ฐ์ดํฐ๋ฒ ์ด์ค๋ช ] : ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฑํ๋ ๋ช ๋ น์ด
show dbs : ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ชฉ๋ก ํ์ธํ๋ ๋ช ๋ น์ด
db : ํ์ฌ ์ฌ์ฉ ์ค์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํ์ธํ๋ ๋ช ๋ น์ด
์ปฌ๋ ์ ์ MySQL์ ํ ์ด๋ธ์ ๋์๋๋ ๊ฐ๋ ์ด๋ค.
๋คํ๋จผํธ๋ฅผ ๋ฃ๋ ์๊ฐ ์ปฌ๋ ์ ์ ์๋์ผ๋ก ์์ฑ๋๋ค. ์ง์ ์ปฌ๋ ์ ์ ์์ฑํ๋ ๋ช ๋ น์ด๋ก๋
db.createCollection('์ปฌ๋ ์ ์ด๋ฆ')์ด ์์ผ๋ฉฐ, show collections๋ก ์์ฑํ ์ปฌ๋ ์ ๋ชฉ๋ก์ ํ์ธํ ์ ์๋ค.
๋ชฝ๊ณ ๋๋น๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ฏ๋ก ์๋ฐ์คํฌ๋ฆฝํธ์ ์๋ฃํ์ ๋ฐ๋ฅธ๋ค. Date๋ ObjectId, Binary Data, Timestamp์ ๊ฐ์ ์๋ฃํ์ ์ธ ์ ์๋ค. db.์ปฌ๋ ์ ๋ช .save(๋คํ๋จผํธ) ๋ก ๋คํ๋จผํธ๋ฅผ ์์ฑํ ์ ์๋ค.
find({})๋ ์ปฌ๋ ์ ๋ด์ ๋ชจ๋ ๋คํ๋จผํธ๋ฅผ ์กฐํํ๋ผ๋ ๋ป์ด๋ค. (ex) db.users.find({});
ํน์ ํ๋๋ง ์กฐํํ๊ณ ์ถ์ผ๋ฉด find ๋ฉ์๋์ ๋ ๋ฒ์งธ ์ธ์๋ก ์กฐํํ ํ๋๋ฅผ ๋ฃ๋๋ค. 1 ๋๋ true๋ก ํ์ํ ํ๋๋ง ๊ฐ์ ธ์ค๋ฉฐ, _id๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ์ ธ์ค๊ฒ ๋์ด ์์ผ๋ฏ๋ก 0 ๋๋ false๋ฅผ ์ ๋ ฅํด ๊ฐ์ ธ์ค์ง ์๋๋ก ํด์ผ ํ๋ค.
db.users.find({}, { _id: 0, name: 1, married: 1 });
์กฐํ ์ ์กฐ๊ฑด์ ์ฃผ๋ ค๋ฉด ์ฒซ ๋ฒ์งธ ์ธ์ ๊ฐ์ฒด์ ๊ธฐ์ ํ๋ค.
โ ์์ฃผ ์ฐ์ด๋ ์ฐ์ฐ์
$gt(์ด๊ณผ), $gte(์ด์), $lt(๋ฏธ๋ง), $lte(์ดํ), $ne(๊ฐ์ง ์์), $or(๋๋), $in(๋ฐฐ์ด ์์ ์ค ํ๋)
db.users.update({ name: 'nero' }, { $set: { comment: '์ข์ ์์นจ์ด์์:)' } });
์ฒซ ๋ฒ์งธ ๊ฐ์ฒด๋ ์์ ํ ๋คํ๋จผํธ๋ฅผ ์ง์ ํ๋ฉฐ, ๋ ๋ฒ์งธ ๊ฐ์ฒด๋ ์์ ํ ๋ด์ฉ์ ์ ๋ ฅํ๋ ๊ฐ์ฒด์ด๋ค. $set ์ฐ์ฐ์๋ ์ด๋ค ํ๋๋ฅผ ์์ ํ ์ง ์ ํ๋ ์ฐ์ฐ์์ด๋ค. ์ผ๋ถ ํ๋๋ง ์์ ํ๊ณ ํ๊ณ ์ถ์ ๋๋ $set ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ฉฐ, ์ผ๋ฐ ๊ฐ์ฒด๋ฅผ ๋ฃ์ ์ ๋คํ๋จผํธ๊ฐ ํต์งธ๋ก ๋ ๋ฒ์งธ ์ธ์๋ก ์ฃผ์ด์ง ๊ฐ์ฒด๋ก ์์ ๋๋ค.
db.users.remove({ name: 'nero' })
์ญ์ ํ ๋คํ๋จผํธ์ ๋ํ ์ ๋ณด๊ฐ ๋ด๊ธด ๊ฐ์ฒด๋ฅผ ์ฒซ ๋ฒ์งธ ์ธ์๋ก ์ ๊ณตํ๋ค.
๋ชฝ๊ตฌ์ค๋ ์ํ๋ผ์ด์ฆ์ ๋ฌ๋ฆฌ ๋คํ๋จผํธ๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ODM(Object Document Mapping)์ด๋ผ๊ณ ๋ถ๋ฆฐ๋ค. ๋ชฝ๊ณ ๋๋น์ ์์ด์ ๋ถํธํ ๊ธฐ๋ฅ๋ค์ ๋ชฝ๊ตฌ์ค๊ฐ ๋ณด์ํด์ค๋ค. ES2015 ํ๋ก๋ฏธ์ค ๋ฌธ๋ฒ๊ณผ ๊ฐ๋ ฅํ๊ณ ๊ฐ๋ ์ฑ ๋์ ์ฟผ๋ฆฌ ๋น๋๋ฅผ ์ง์ํ๋ค.
โ ์คํค๋ง(schema)
๋ชฝ๊ณ ๋๋น๋ ํ ์ด๋ธ์ด ์์ด์ ์์ ๋กญ๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ ์ ์์ง๋ง, ์ค์๋ก ์๋ชป๋ ์๋ฃํ์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ ์ ์๊ณ , ๋ค๋ฅธ ๋คํ๋จผํธ์๋ ์๋ ํ๋์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ ์ ์๋ค. ๋ชฝ๊ตฌ์ค๋ ๋ชฝ๊ณ ๋๋น์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ธฐ ์ , ๋ ธ๋ ์๋ฒ ๋จ์์ ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ ํํฐ๋งํ๋ ์ญํ ์ ํ๋ค.
โ populate
populate ๋ฉ์๋๋ก MySQL์ JOIN ๊ธฐ๋ฅ์ ๋ณด์ํ์ฌ, ๊ด๊ณ๊ฐ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ๊ฐ์ ธ์ฌ ์ ์๋ค.
๋ชฝ๊ตฌ์ค ๋ชจ๋์์ Schema ์์ฑ์๋ฅผ ์ด์ฉํด ์คํค๋ง๋ฅผ ๋ง๋ ๋ค. String, Number, Date, Buffer, Boolean, Mixed, ObjectId, Array๋ฅผ ๊ฐ์ผ๋ก ๊ฐ์ง ์ ์๋ค.
๋ชฝ๊ตฌ์ค๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํ๋ก๋ฏธ์ค๋ฅผ ์ง์ํ๋ฏ๋ก async / await๊ณผ try / catch ๋ฌธ์ ์ฌ์ฉํด์ ๊ฐ๊ฐ ์กฐํ ์ฑ๊ณต ์์ ์คํจ ์์ ์ ๋ณด๋ฅผ ์ป์ ์ ์๋ค. ์ฌ์ฉ์๋ฅผ ๋ฑ๋กํ ๋๋ ๋ชจ๋ธ.create ๋ฉ์๋๋ก ์ ์ฅํ๋ฉฐ, _id๋ ์๋์ผ๋ก ์์ฑ๋๋ค. ์์ ์๋ update ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค. update ๋ฉ์๋์ ์ฒซ ๋ฒ์งธ ์ธ์๋ก ์ด๋ค ๋คํ๋จผํธ๋ฅผ ์์ ํ ์ง ๋ํ๋ธ ์ฟผ๋ฆฌ ๊ฐ์ฒด๋ฅผ ์ ๊ณตํ๊ณ , ๋ ๋ฒ์งธ ์ธ์๋ก๋ ์์ ํ ํ๋์ ๊ฐ์ด ๋ค์ด ์๋ ๊ฐ์ฒด๋ฅผ ์ ๊ณตํ๋ค(์ํ๋ผ์ด์ฆ์ ์ธ์ ์์ ๋ฐ๋).
[Node.js] 10์ฅ ์น API ์๋ฒ ๋ง๋ค๊ธฐ (0) | 2022.11.24 |
---|---|
[Node.js] 9์ฅ ์ต์คํ๋ ์ค๋ก SNS ์๋น์ค ๋ง๋ค๊ธฐ (0) | 2022.11.17 |
[Node.js] 7์ฅ MySQL (0) | 2022.11.10 |
[Node.js] 6์ฅ ์ต์คํ๋ ์ค ์น ์๋ฒ ๋ง๋ค๊ธฐ (0) | 2022.11.05 |
[Node.js] 5์ฅ ํจํค์ง ๋งค๋์ (0) | 2022.10.13 |