๋ฐ์ํ
1. ๊ฐ์
- ์ด ๊ธ์์๋ Node.js์ Express๋ฅผ ์ฌ์ฉํ์ฌ NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์ธ MongoDB์ ์ฐ๋ํ์ฌ CRUD(Create, Read, Update, Delete) ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ค๋ฃฌ๋ค.
- ์ค์ต์ ํตํด REST API๋ฅผ ๊ตฌ์ถํ๊ณ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ ๊ณผ์ ์ ํ์ตํ ์ ์๋ค.
2. ํ๋ก์ ํธ ์ค์
2.1. ํ์ ํจํค์ง ์ค์น
- ์๋ก์ด ํ๋ก์ ํธ ํด๋๋ฅผ ์์ฑํ๊ณ VSCode์์ ํด๋น ํด๋๋ฅผ ์ถ:
mkdir my-mongo-api
cd my-mongo-api
- npm์ ์ฌ์ฉํ์ฌ ํ๋ก์ ํธ๋ฅผ ์ด๊ธฐํํจ:
npm init -y
- ํ์ํ ํจํค์ง๋ฅผ ์ค์นํจ:
npm install express mongoose body-parser cors dotenv
3. MongoDB ์ค์
3.1. MongoDB Atlas๋ฅผ ์ด์ฉํ ํด๋ผ์ฐ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฑ
- MongoDB Atlas์์ ๋ฌด๋ฃ ๊ณ์ ์ ์์ฑํ๊ณ ํด๋ฌ์คํฐ๋ฅผ ์ค์ ํจ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ๋ฌธ์์ด์ ๋ณต์ฌํ์ฌ .env ํ์ผ์ ์์ฑํ๊ณ ๋ค์๊ณผ ๊ฐ์ด ์ ์ฅํจ:
MONGO_URI=your_mongodb_connection_string
PORT=5000
3.2. Mongoose๋ฅผ ํ์ฉํ MongoDB ์ฐ๊ฒฐ
- server.js ํ์ผ์ ์์ฑํ๊ณ ๋ค์๊ณผ ๊ฐ์ด Express ์๋ฒ๋ฅผ ์ค์ ํจ:
require('dotenv').config();
const express = require('express');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const cors = require('cors');
const app = express();
const PORT = process.env.PORT || 5000;
app.use(cors());
app.use(bodyParser.json());
mongoose.connect(process.env.MONGO_URI, {
useNewUrlParser: true,
useUnifiedTopology: true
}).then(() => console.log('MongoDB connected'))
.catch(err => console.log(err));
app.listen(PORT, () => {
console.log(`Server is running on http://localhost:${PORT}`);
});
4. CRUD API ๊ตฌํ
4.1. ๋ฐ์ดํฐ ๋ชจ๋ธ ์์ฑ
- models/User.js ํ์ผ์ ์์ฑํ๊ณ ๋ค์๊ณผ ๊ฐ์ด User ๋ชจ๋ธ์ ์ ์ํจ:
const mongoose = require('mongoose');
const UserSchema = new mongoose.Schema({
name: String,
email: String,
age: Number
});
module.exports = mongoose.model('User', UserSchema);
4.2. ๋ผ์ฐํฐ ์์ฑ
- routes/userRoutes.js ํ์ผ์ ์์ฑํ๊ณ CRUD ๊ธฐ๋ฅ์ ๊ตฌํํจ:
const express = require('express');
const router = express.Router();
const User = require('../models/User');
// ์ฌ์ฉ์ ๋ชฉ๋ก ์กฐํ (Read)
router.get('/users', async (req, res) => {
const users = await User.find();
res.json(users);
});
// ์๋ก์ด ์ฌ์ฉ์ ์ถ๊ฐ (Create)
router.post('/users', async (req, res) => {
const newUser = new User(req.body);
await newUser.save();
res.status(201).json(newUser);
});
// ์ฌ์ฉ์ ์ ๋ณด ์์ (Update)
router.put('/users/:id', async (req, res) => {
const updatedUser = await User.findByIdAndUpdate(req.params.id, req.body, { new: true });
res.json(updatedUser);
});
// ์ฌ์ฉ์ ์ญ์ (Delete)
router.delete('/users/:id', async (req, res) => {
await User.findByIdAndDelete(req.params.id);
res.json({ message: 'User deleted' });
});
module.exports = router;
4.3. ๋ผ์ฐํฐ๋ฅผ ์๋ฒ์ ์ฐ๊ฒฐ
- server.js ํ์ผ์ ์์ ํ์ฌ ๋ผ์ฐํฐ๋ฅผ ๋ฑ๋กํจ:
const userRoutes = require('./routes/userRoutes');
app.use('/api', userRoutes);
5. Postman์ ์ด์ฉํ API ํ ์คํธ
5.1. ์๋ฒ ์คํ
- .env ํ์ผ์ด ์๋ ํ๋ก์ ํธ ๋ฃจํธ์์ ๋ค์ ๋ช ๋ น์ด ์คํ:
node server.js // nodemon server.js
5.2. API ํ ์คํธ
- GET ์์ฒญ (์ฌ์ฉ์ ๋ชฉ๋ก ์กฐํ):
- GET http://localhost:5000/api/users ์์ฒญ์ ๋ณด๋
- POST ์์ฒญ (์๋ก์ด ์ฌ์ฉ์ ์ถ๊ฐ):
- POST http://localhost:5000/api/users
- Body์ JSON ๋ฐ์ดํฐ ์ ๋ ฅ:
{
"name": "5hr1rnp",
"email": "5hr1rnp@money.com",
"age": 30
}
- PUT ์์ฒญ (์ฌ์ฉ์ ์ ๋ณด ์์ ):
- PUT http://localhost:5000/api/users/{id}
- ์์ ํ ๋ฐ์ดํฐ๋ฅผ JSON ํ์์ผ๋ก ์ ๋ ฅ ํ ์ ์ก
- DELETE ์์ฒญ (์ฌ์ฉ์ ์ญ์ ):
- DELETE http://localhost:5000/api/users/{id} ์์ฒญ์ ๋ณด๋
- MongoDB Cluster์ ์ ์ํ์ฌ ์์ฑ๋ ๋ฐ์ดํฐ๋ฅผ ์ง์ ํ์ธํด๋ณธ๋ค
๋ฐ์ํ