๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โœ๏ธ 21-2 IPP/Node.js study

Node.js - 15 Mongoose๋ฅผ ์‚ฌ์šฉํ•œ ๋ชจ๋ธ ์ œ์ž‘

by hanwitjus 2021. 10. 29.

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 ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์„œ ์•„๋ž˜์™€ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

subscriber.js

 

๊ทธ๋ฆฌ๊ณ  main.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 ๊ตฌ๋ฌธ๊ณผ ๋ฉ”์†Œ๋“œ๋ฅผ ๋ฐฐ์› ๊ณ , ์Šคํ‚ค๋งˆ์™€ ๋ชจ๋ธ์„ ์ƒ์„ฑํ•ด๋ณด์•˜๋‹ค.

 

 

 

 

 

LIST

๋Œ“๊ธ€