์ด์ ํฌ์คํ ์์ ๊ตฌ์ฑํด๋์๋ ์๋ฒ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฐ๊ฒฐํด๋ณด์.
๋ณธ ํฌ์คํ ์์๋ mongodb๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๋ค.
mondoDB๋ฅผ node.js์์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ mongoose ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค.
mongoose๋ node.js ํ๊ฒฝ์์ ์ฌ์ฉํ๋ MongoDB ๊ธฐ๋ฐ ODM(Object Data Modelling)๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฌธ์๋ค์ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด์ฒ๋ผ ์ฌ์ฉํ ์ ์๊ฒ ํด์ค๋ค.
์ค๊ณ
1. npm add mongoose dotenv
mongoose์ dotenv ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํด์ค๋ค.
dotenv๋ ํ๊ฒฝ๋ณ์๋ค์ ํ์ผ์ ๋ฃ๊ณ ์ฌ์ฉํ ์ ์๊ฒ ํ๋ ๊ฐ๋ฐ ๋๊ตฌ์ด๋ค.
2. .env ํ๊ฒฝ๋ณ์ ํ์ผ ์์ฑ
ํ๋ก์ ํธ ๋ฃจํธ ๋๋ ํฐ๋ฆฌ์ .env ํ์ผ์ ์์ฑํด์ค๋ค.
์๋ฒ์์ ์ฌ์ฉํ ํฌํธ์ mongoDB ์ฃผ์๋ฅผ ๋ฃ์ด์ค๋ค.
.env
PORT = 4000
MONGO_URI = mongodb://localhost:27107/blog
3. ํ๊ฒฝ๋ณ์ ์กฐํ
ํ๊ฒฝ๋ณ์๋ฅผ ์กฐํํ๊ธฐ ์ํด์๋ ์ค์นํ dotenv ๋ชจ๋์ ๋ถ๋ฌ์ configํจ์๋ฅผ ํธ์ถํด์ฃผ๋ฉด ๋๋ค.
๊ทธ๋ฆฌ๊ณ ํ๊ฒฝ๋ณ์๋ process.env๋ฅผ ํตํด ์กฐํํ ์ ์๋ค.
src/index.js
const Koa = require("koa")
require("dotenv").config()
const app = new Koa()
const {PORT,MONGO_URI} = process.env
const port = PORT || 4000
app.listen(port, () => {
console.log(`Listening to ${port}` )
})
4. ์๋ฒ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ
mongoose๋ฅผ ์ด์ฉํด ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ฒฐํ๋ค.
const mongoose = require("mongoose")
const {PORT,MONGO_URI} = process.env
mongoose
.connect(MONGO_URI)
.then(() => {
console.log("Connected to MONGODB ")
})
.catch(e => {
console.error(e)
})
connect()ํจ์๋ promise๋ฅผ ๋ฐํํ๋ค.
5. ์คํค๋ง ์์ฑ
์คํค๋ง
์ปฌ๋ ์ ์ ๋ค์ด๊ฐ๋ ๋ฌธ์ ๋ด๋ถ์ ๊ฐ ํ๋๊ฐ ์ด๋ค ํ์์ผ๋ก ๋์ด ์๋์ง ์ ์ํ๋ ๊ฐ์ฒด
๋ชจ๋ธ
์คํค๋ง๋ฅผ ์ฌ์ฉํ์ฌ ๋ง๋๋ ์ธ์คํด์ค๋ก, ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ค์ ์์ ์ ์ฒ๋ฆฌํ ์ ์๋ ํจ์๋ค์ ์ง๋๊ณ ์๋ ๊ฐ์ฒด
// import/export๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด esm library ์ฌ์ฉํ์์.
import mongoose from "mongoose"
const {Schema} = mongoose
const PostSchema = new Schema({
title : String,
body : String,
tags: [String],
publishedDate : {
type: Date,
default : Date.now
}
})
์คํค๋ง๋ฅผ ์์ฑํ ๋์๋ mongoose ๋ชจ๋์ Schema๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ํ๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฐ ํ๋ ์ด๋ฆ๊ณผ ํ๋์ ๋ฐ์ดํฐ ํ์
์ ๋ณด๊ฐ ๋ค์ด ์๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
6. ๋ชจ๋ธ ์์ฑ
๋ชจ๋ธ์ ๋ง๋ค ๋๋ mongoose.model ํจ์๋ฅผ ์ฌ์ฉํ๋ค.
import mongoose from "mongoose"
const {Schema} = mongoose
const PostSchema = new Schema({
title : String,
body : String,
tags: [String],
publishedDate : {
type: Date,
default : Date.now
}
})
const Post = mongoose.model("Post",PostSchema)
export default Post