Node.js ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก Mongoose ์ค์
โถ Mongoose
- ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ด์ ์ปค๋ฎค๋์ผ์ด์ ์ ๋์์ฃผ๋ ํจํค์ง.
- ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ์ฒด์งํฅ๊ตฌ์กฐ๋ฅผ ๋ณด์ฅํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ชฝ๊ณ DB ๋ช ๋ น์ด๋ฅผ ์คํํ ์ ์๋ ๊ฐ์ฒด-๋ํ๋จผํธ Mapper.
์ฝ๊ฒ ๋งํ๋ฉด,
์ด๋ค ํํ์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ผ์ผ ํ๋์ง์ ๋ํ ์คํค๋ง๋ก ๋ชจ๋ธ์ ๋ง๋๋ ๋๊ตฌ์ด๊ณ ,
์ผ๊ด์ฑ ์๋ ๋ํ๋จผํธ์ ์ ์ฅ์ ๊ฐ์ ์ํฌ ์ ์๋ค.
ex. ์๋๋ผ๋ฉด contacts ์ปฌ๋ ์ ๋ด์
{ name: "Jon", email: "jon@email" } ๋ํ๋จผํธ๋ ๋ค์ด๊ฐ ์ ์๊ณ ,
{ nickname: "Jonny", phone: "1234" } ์ด๋ฐ ๋ํ๋จผํธ๋ ์์ ์์๋ค.
์ด๋ ๊ฒ ํ๋๊ฐ ์ผ๊ด์ ์ด์ง ์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ค ์ ์๋ค๋ ๊ฒ์ด๋ค.
๋ํ Mongoose๋ฅผ ์ฌ์ฉํ๋ฉด ๋์ด์ mongodb๋ฅผ main.js์์ ์์ฒญํ์ง ์์๋ ๋๋ฉฐ, ๋ชฝ๊ณ DB๋ฅผ ์ฌ์ฉํ์ง ์์๋ ๋๋ค.
1. Mongoose ์ค์น
npm -i mongoose -S ๋ช ๋ น์ด ์ ๋ ฅ
2. main.js์์ mongoose ํ์ผ ์์ฒญ & ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๋ชฝ๊ณ DB ์ฐ๊ฒฐ ์ค์ .
require๋ก Mongoose๋ฅผ ์ ํ๋ฆฌ์ผ์ด์ ํ์ผ์ ์์ฒญํ๊ณ , ๋ฐ์ดํฐ๋ฒ ์ด์ค connection์ ์ค์ ํ๋ค.
๊ทธ๋ฆฌ๊ณ db ๋ณ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํ ๋นํ๋ค.
๊ทธ ๋ฐ์ 20ํ~22ํ์ ์ฝ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐ๋์ ๋ ๋ฉ์์ง๋ฅผ ๋ก๊น ํ๋ ์ฝ๋ฐฑํจ์์ด๋ค.
3. ์คํค๋ง์ ์์ฑ
์ด๋ค ๋ํ๋จผํธ๋ email ํ๋๋ฅผ ๊ฐ๊ณ ์๊ณ , ์ด๋ค ๊ฒ์ ์๋ค๋ฉด ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ด ๊นจ์ง๋ค.
์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ด๋ จ ์คํค๋ง๋ฅผ ์์ฑํ ์ ์๋ค.
mongoose.Schema๋ ์ฃผ์ด์ง ํ๋ผ๋ฏธํฐ๋ก ์คํค๋ง ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ฒ ํ๋ constructor๋ฅผ ์ ๊ณตํ๊ณ , ๊ทธ ํ ๊ฐ์ฒด ํ๋์ ์ด๋ฆ๊ณผ ๋ฐ์ดํฐ ์ ํ์ ์ ์๋ฅผ ์ถ๊ฐํ๋ค.
** ๋ชฝ๊ณ DB๊ฐ ์คํค๋ง๋ฅผ ์ํํ๋๊ฒ ์๋๋ผ, Mongoose๊ฐ ์คํ.
30ํ์ ์ฝ๋๋ก ์คํค๋ง ๋ชจ๋ธ์ ์ ์ฉํ๋ค.
Subscriber์ ์ฐธ์กฐ๋ฅผ ํตํด ์ด ๋ชจ๋ธ์ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์ด๊ธฐํํ ์ ์๋ค.
์๋ก์ด ๊ฐ์ฒด๋ฅผ ์ป๋ ๋ฐฉ๋ฒ์๋ ๋๊ฐ์ง๊ฐ ์๋ค.
์ฒซ๋ฒ์งธ ๋ฐฉ๋ฒ์ผ๋ก 32ํ~40ํ์ ๋ณด๋ฉด, ๋จผ์
new ํค์๋๋ฅผ ์ฌ์ฉํด Subscriber์ ์๋ก์ด ์ธ์คํด์ค๋ฅผ ๊ตฌ์ถํ๊ณ , save ๋ช ๋ น์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๋ค.
๋๋ฒ์จฐ ๋ฐฉ๋ฒ์ 42ํ๋ถํฐ ์์๋๋ create ํค์๋๋ฅผ ์ฌ์ฉํ ๋ฐฉ๋ฒ์ด๋ค.
create๋ new์ save๋ฅผ ํ๋ฒ์ ํ๋ ์ญํ ์ ํ๋ค. (์์ฑ๊ณผ ์ ์ฅ์ ํ๋ฒ์)
์ด๊ฑธ ์คํํ๋ฉด
์ปฌ๋ ์ ์ด ์๋ก ์์ฑ๋๊ณ
(๊ทผ๋ฐ ์ฌ๊ธฐ์ ๋ฐ๋ก ์ปฌ๋ ์ ์ ๋ด๊ฐ ์ถ๊ฐํ์ง ์์๋๋ฐ ์๊ธด๊ฒ ์ ๊ธฐํ๋ค; ์ด์ผ๋๊ฑฐ์งใ ใ ใ )
(+ 21.11.01 13:20 ์์ )
๋ฐ๋ก ์ปฌ๋ ์ ์ ์ถ๊ฐํ์ง ์์๋ ์คํค๋ง๋ฅผ ํตํด์ ์ปฌ๋ ์ ์ด ์๊ธฐ๋ ๊ฒ ๊ฐ๋ค.
ํ ์คํธ๋ฅผ ์ํด

Course ์คํค๋ง๋ฅผ ๋ชจ๋ธ์ ๋ง๋ค๊ณ , ์ด๋ ๊ฒ ๋ํ๋จผํธ๋ฅผ ์ถ๊ฐํด์ฃผ๋ ์ฝ๋๋ฅผ ์ง์ ๋๋ ค๋ดค๋๋

courses๋ผ๋ ์ด๋ฆ์ผ๋ก ์ปฌ๋ ์ ์ด ์๊ฒผ๊ณ ,

๋ฐ์ดํฐ๋ ์ ์ถ๊ฐ๋ ๊ฑธ ๋ณผ ์ ์๋ค.
๋ฐ์ดํฐ ๋๊ฐ๋ ์ ์ถ๊ฐ๋๋ค.
3. ๋ชจ๋ธ์ ๋ถ๋ฅ
main.js ํ์ผ์ ๋ณต์กํ๊ฒ ๋ง๋ค์ง ์๊ธฐ ์ํด
models ํด๋๋ฅผ ๋ง๋ค์ด ์คํค๋ง ๋ฐ ๋ชจ๋ธ ์ ์ ๊ด๋ จ ์ฝ๋๋ฅผ ๋ชจ๋ ์ฎ๊ธฐ๊ณ
๋ชจ๋ธ์ ํ์ผ์ exports ๊ฐ์ฒด๋ก ์ฎ๊ธด๋ค.
(MVC ๊ตฌ์กฐ์์ Model์ด๋ ๋๊ฐ์๋ฏ)
๋จผ์ models ํด๋๋ฅผ ์์ฑํ๊ณ ๊ทธ ์์ subscriber.js ํ์ผ์ ๋ง๋ค์ด์ ์๋์ ๊ฐ์ด ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ค.
๊ทธ๋ฆฌ๊ณ main.js ์์ ๋ชจ๋ธ์ ์๋์ ๊ฐ์ด ์์ฒญํด์ ์ฌ์ฉํ๋ค.
(๊ทผ๋ฐ ๋ด๊ฐ ์ ๊ฑฐ๋ง ์ถ๊ฐํ๋ฉด ๋๋์ค์๊ณ DB Connecting ํ๋ ๋ถ๋ถ๊น์ง ๋ค ์ง์๋ฒ๋ ธ๋๋ฐ ๊ทธ๊ฑด ๊ณ์ ๋จ๊ฒจ๋์ผํ๋ค..)
๊ณ์ ๋๊ฐ์ด Jon Wexler ์์ ์จ ๋ฐ์ดํฐ๋ง ์ง์ด๋ฃ์ด์ ํท๊ฐ๋ ค์ ๋ฐ์ดํฐ๋ฅผ ์ด๋ ๊ฒ ๋ฐ๊ฟ์ฃผ๊ณ , ์คํ์ํค๋ฉด
์๋์ฒ๋ผ ์ ์ถ๊ฐ๋๋ค.
+) ์ฟผ๋ฆฌ ์ํ
Mongoose์ findOne() ๋ฉ์๋๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ๋จผํธ๋ฅผ ์ฐพ๊ณ where๋ก ๋ฉ์๋๋ฅผ ์ฟผ๋ฆฌํ๋ค.
์๋์ ์ฝ๋๋ฅผ ๋ณด๋ฉด
Subscriber.findOne({name: "Jon Wexler"}).where("email", /wexler/) ์ด ์ฟผ๋ฆฌ์ ์๋ฏธ๋
email์ wexler๋ผ๋ ์คํธ๋ง์ด ๋ค์ด๊ฐ Jon Wexler ๋ํ๋จผํธ๋ฅผ ํ๋ ์ฐพ๋๋ค๋ ๋ป์ด๋ค.
์ฐพ์ ๋ฐ์ด๋ฅผ data์ ์ ์ฅํ๊ณ , ์ฐพ์ data์ ์ด๋ฆ์ ๋ก๊ทธ๋ก ์ถ๋ ฅํ๊ฒ ์ฝ๋ฉํ๊ณ , ์คํํ๋ฉด
์ด๋ ๊ฒ ์ ๋์จ๋ค.
๋ ๋ง์ ์ฟผ๋ฆฌ๋ ์๋ ๋งํฌ์ ์๋ค.
https://mongoosejs.com/docs/queries.html
Mongoose v6.0.12: Queries
Mongoose models provide several static helper functions for CRUD operations. Each of these functions returns a mongoose Query object. A mongoose query can be executed in one of two ways. First, if you pass in a callback function, Mongoose will execute the
mongoosejs.com
์ด๋ ๊ฒ
Mongoose๋ฅผ ์ค์ ํ๊ณ , ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐ, Mongoose ๊ตฌ๋ฌธ๊ณผ ๋ฉ์๋๋ฅผ ๋ฐฐ์ ๊ณ , ์คํค๋ง์ ๋ชจ๋ธ์ ์์ฑํด๋ณด์๋ค.
'โ๏ธ 21-2 IPP > Node.js study' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Node.js - 17 ๋ฐ์ดํฐ ๋ชจ๋ธ ๊ฐ์ (+๊ฐ์ ์์ฑ, ์ก์ ) (0) | 2021.11.04 |
---|---|
Node.js - 16 ์ปจํธ๋กค๋ฌ์ ๋ชจ๋ธ๊ณผ์ ์ฐ๊ฒฐ (0) | 2021.11.03 |
Node.js - 14 ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ (0) | 2021.10.28 |
Node.js - 13 Express.js๋ฅผ ํตํ ์ฌ์ดํธ ๊ฐ์ (0) | 2021.10.27 |
Node.js - 12 ์ค์ ๊ณผ ์๋ฌ์ฒ๋ฆฌ (0) | 2021.10.26 |
๋๊ธ