John ahn๋์ ๊ฐ์๋ฅผ ๋ณด๊ณ node๋ฅผ ์ฒ์ ๋ฐฐ์ฐ๊ธฐ๋ ํ๊ณ mongoDB๋ mongoos์ ๊ธฐ์ด๋ ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ ์ด๋์ ๋ ์ค์ค๋ก ์ดํดํด๋ณด๊ณ ์ ๊ฒ์๋ฌผ์ ์ด๋ค.
๊ฐ์์์ Mongoose์ model
๊ณผ schema
๋ฅผ ๋ค๋ฃจ๋๋ฐ model์ด๋ schema๊ฐ ๋ฌด์์ธ์ง ๋ชฐ๋ผ์ ๊ฐ์๊ฐ ์กฐ๊ธ ์ด๋ ต๊ฒ ๋๊ปด์ก๋ค. ๊ทธ๋์ ์ญ์ ๊ตฌ๊ธ๋ง์ ํตํด ํด๊ฒฐํด๋ณด๊ณ ์ ํ๋ค.
๊ฐ์์์๋ model์ 'schema'๋ฅผ ๊ฐ์ธ๊ธฐ ์ํ ์ญํ ์ ํ๋ ๊ฒ์ด๋ผ๊ณ ํ๋ค.
๊ฐ์ ์๋ฃ์์๋ '๋ ์ฝ๋ ์์ฑ, ์ฟผ๋ฆฌ, ์
๋ฐ์ดํธ, ์ญ์ ๋ฑ์ ์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ค'๊ณ ํ๋ค.
๊ฐ์ ์๋ฃ๋ฅผ ๋ณด๋ฉด 'Schema๋ ๋ฌธ์์ ๊ตฌ์กฐ, ๊ธฐ๋ณธ๊ฐ, ์ ํจ์ฑ ๊ฒ์ฌ ๋ฑ์ ์ ์ํ๋ค'๊ณ ํ๋ค.
๋ํ John ahn๋์ ์์๋ก ์ํ์ ๊ด๋ จ๋ ๊ธ์ ์์ฑํ๋ค๊ณ ๊ฐ์ ํ๋ฉด ๊ธ์ ์์ฑํ ์ฌ๋์ด ๋๊ตฌ์ธ์ง, ์์ฑํ ๊ฒ์๊ธ์ ์ ๋ชฉ์ ๋ฌด์์ธ์ง, ์ค๋ช
์ ๋ฌด์์ธ์ง์ ๋ํ ๊ฐ์ ํ์
์ด๋ ์ ํ(์ ํจ์ฑ ๊ฒ์ฌ) ๊ฐ์ ๊ฒ์ ์ง์ ์ ํด์ฃผ๋ ๊ฒ์ด Schema๋ผ๊ณ ํ๋ค.
์กฐ๊ธ ๋ ์์๋ณด๊ณ ์ถ์ด์ ๊ณต์๋ฌธ์์ ์ฌ๋ฌ ๊ฒ์๋ฌผ์ ๊ตฌ๊ธ๋งํด์ ๊ฐ๋
์ ์ ๋ฆฌํด๋ณด์๋ค.
A schema is a JSON object that defines the the structure and contents of your
data.
...
Schemas represent types of data rather than specific values. App Services supports many built-in schema types. These include primitives, like strings and numbers, as well as structural types, like objects and arrays, which you can combine to create schemas that represent custom object types.
์ถ์ฒ : MongoDB Documentation
๊ณต์๋ฌธ์์์๋ ๋ฐ์ดํฐ์ ๊ตฌ์กฐ์ ์ฝํ
์ธ (๋ด์ฉ)์ ์ ์ํ๋ JSON ๊ฐ์ฒด๋ผ๊ณ ์ค๋ช
ํ๋ค.
Schema๋ ํน์ ํ ๊ฐ์ด ์๋ ๋ฐ์ดํฐ ํ์
์ ๋ํ๋ด๊ณ , ๋ฌธ์์ด, ์ซ์์ด ๊ฐ์ ์์ ํ์
์ ์๋ฃํ๊ณผ ๊ฐ์ฒด, ๋ฐฐ์ด๊ณผ ๊ฐ์ ๊ตฌ์กฐ์ ์ ํ(Structural types)๊ฐ ํฌํจ์ด ๋๊ณ , ์ด๊ฒ๋ค์ ๊ฒฐํฉํ์ฌ ์ฌ์ฉ์ ์ ์ ๊ฐ์ฒด ์ ํ์ ๋ํ๋ด๋ Schema๋ฅผ ์์ฑํ ์ ์๋ค.
Zerocho๋์ ๋ธ๋ก๊ทธ์์๋ ์๋์ฒ๋ผ ์ค๋ช ํ๊ณ ์๋ค.
Mongoose์ Schema๋ ์ฌ์ฉ์๊ฐ ์์ฑํ ์คํค๋ง๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฐ์ดํฐ๋ฅผ DB์ ๋ฃ๊ธฐ ์ ์ ๋จผ์ ๊ฒ์ฌํ๋ค.
๊ทธ๋ฆฌ๊ณ ์์ฑํ ์คํค๋ง์ ์ด๊ธ๋๋ ๋ฐ์ดํฐ๊ฐ ์๋ค๋ฉด ์๋ฌ๋ฅผ ๋ฐ์์ํจ๋ค.
๋ํ ์คํค๋ง๋ฅผ ์ค์ ํ ๋ ์ธ๋ฑ์ค๊น์ง ์ค์ ํ ์ ์๊ณ ๊ธฐ๋ณธ๊ฐ ๋ํ ์ค์ ํ ์๋ ์๋ค.
์ฆ, ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋ํ ํธ์ ๊ธฐ๋ฅ๋ค์ ํ๋๋ก ๋ชจ์๋์๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.
๊ฐ์์์ Schema๋ ์์ ์ฝ๋์ฒ๋ผ ๋ง๋ ๋ค.
const mongoose = require("mongoose");
const userSchema = mongoose.Schema({
name: {
type: String,
maxlength: 50,
},
email: {
type: String,
trim: true,
unique: 1,
},
password: {
type: String,
minlength: 5,
},
lastname: {
type: String,
maxlength: 50,
},
role: {
type: Number,
default: 0,
},
image: String,
token: {
type: String,
},
tokenExp: {
type: Number,
},
});
์ฝ๋ ๋ด์์ ๊ฐ์ฒด ์์ ์์ฑ๋ช (property)์ด ํ๋์ ์ด๋ฆ์ด ๋๋ค.
์ด ์ฝ๋๋ฅผ ํ์ด์ ๋ณด์๋ฉด,
email
์ ์๋ฃํ์ String
์ด๊ณ ์ ์ผํด์ผํ๊ณ , ๋ฐ์ดํฐ์ ๊ณต๋ฐฑ์ ์์ค๋ค.
password
์ ์๋ฃํ์ String
์ด๊ณ ์ต์ 5๊ธ์์ฌ์ผํ๋ค.
role
์ ์๋ฃํ์ Number
์ด๊ณ ๊ธฐ๋ณธ๊ฐ์ผ๋ก 0์ ์ง์ ํ๋ค. (role
์ ์๋ฃํ์ด Number
์ธ ์ด์ ๋ 1์ผ๋ ๊ด๋ฆฌ์, 0์ผ๋ ์ผ๋ฐ ์ ์ ๋ก ํ๊ธฐ ์ํจ์ด๋ค.)
๋ง์ฝ ํ์ ๊ฐ์ ์ํ๋ค๋ฉด require
์์ฑ๋ช
์ ์ถ๊ฐํด์ boolean
๊ฐ์ ๋ฐ์์ฃผ๋ฉด true
์ผ ๋ ํด๋น ํ๋์ ๋ฐ์ดํฐ๊ฐ ๋ฐ๋์ ์กด์ฌํด์ผํ๋ค๊ณ ์ค์ ํ ์ ์๋ค.
Schema๋ฅผ ์ ๋ฆฌํ์๋ฉด ๋ฐ์ดํฐ์ ๊ตฌ์กฐ์ ๋ด์ฉ์ ์ ์ํ๋ JSON ๊ฐ์ฒด์ด๋ฉฐ, ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋ํ ํธ์ ๊ธฐ๋ฅ์ ๋ชจ์๋ Mongoose์ ๊ธฐ๋ฅ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
์์ฑํ Schema๋ฅผ ๋ฑ๋กํ๋ ค๋ฉด model()
ํจ์๋ฅผ ํธ์ถํด์ ์ธ์๋ก ์ฌ์ฉํ๋ฉด ๋๋ค.
const User = mongoose.model("User", userSchema);
model()
์ ์ฒซ๋ฒ์งธ ์ธ์๋ '์ปฌ๋ ์
์ ์ด๋ฆ'์ด๋ฉฐ, ์ปฌ๋ ์
์ ์ด๋ฆ์ ๋๋ฌธ์๊ฐ ์๋ค๋ฉด ๊ฐ์ ๋ก ์๋ฌธ์๋ก ๋ณํ ํ ๋ฑ๋ก์ด ๋๋ค๊ณ ํ๋ค.
๋๋ฒ์งธ ์ธ์๋ก ์์ฑํ๋ schema
๋ฅผ ๋ฃ์ผ๋ฉด User
๋ผ๋ ๋ชจ๋ธ์ ์์ฑํ userSchema
๋ฅผ ์ ์ฉ์ํค๋ ๊ฑฐ๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋๊ฑฐ ๊ฐ๋ค.
๋ง์ฝ ์ปฌ๋ ์
์ด๋ฆ์ด ๊ฐ์ ๋ก ๋ณํ๋๋ ๊ฒ์ด ๋ง์ ๋ค์ง ์์ผ๋ฉด ์ธ๋ฒ์งธ ์ธ์๋ก ๋ฌธ์์ด์ ๋ฃ์ด ์ค์ ํ๋ฉด ๋๋ค.
const User = mongoose.model("User", userSchema, "myfreename");