Framework/Node.js

[Node.js] 몽구스 사용해보기

  • -
몽구스 사용법과 사용하면서 알게된 내용을 정리한 글입니다.

 

MySQL에 시퀄라이즈가 있다면 몽고디비에는 몽구스(Mongoose)가 있죠!

노드 서버에서 몽고디비로 객체 모델링을 할 수 있는 라이브러리인 몽구스를 사용해봅시다 😁

 


 

📕 이 글을 읽기 전 📕

 

1️⃣ 몽구스를 사용할 node.js 프로젝트 폴더를 미리 만들어주세요!

 


패키지 설치

npm install express mongoose

 

익스프레스와 몽구스를 설치합니다.

 

 

몽고디비 연결하기

프로젝트 최상단에 app.js 파일을 만들겠습니다.

아래 코드를 app.js 파일에 작성해주세요

const express = require('express');
const mongoose = require('mongoose');

const app = express();
const port = 3000;

// 서버 시작
app.listen(port, () => {
    console.log(`Server is running at http://localhost:${port}`);
});

 

 

이제 몽고디비와 연결하도록 하겠습니다.

const express = require('express');
const mongoose = require('mongoose');

const app = express();
const port = 3000;

// ✨ MongoDB에 연결
mongoose.connect('mongodb://localhost/데이터베이스이름', { useNewUrlParser: true, useUnifiedTopology: true });

// ✨ 연결 성공 또는 실패 시 이벤트 처리
const db = mongoose.connection;
db.on('error', console.error.bind(console, 'MongoDB connection error:'));
db.once('open', () => {
    console.log('Connected to MongoDB');
});

// Express 미들웨어 설정
app.use(express.json());
app.use(express.urlencoded({ extended: true }));

// 서버 시작
app.listen(port, () => {
    console.log(`Server is running at http://localhost:${port}`);
});

 

✨ MongoDB에 연결

mongoose.connect()에 여러분의 몽고디비 데이터베이스 경로를 URI를 써주세요

 

{ useNewUrlParser: true, useUnifiedTopology: true } MongoDB Node.js에서 사용할 , 몽구스(Mongoose) 통해 MongoDB 연결할 때의 옵션 설정입니다.

 

  • useNewUrlParser: true : 몽고디비의 새로운 URL파서를 사용하도록 지시. 이전 버전의 URL파서와 호환성 유지를 위해 사용
  • useUnifiedTopology: true : 몽고디비의 통합 토폴로지 엔진을 사용하도록 지시. 성능 향상을 위해 사용

 

 

✨ 연결 성공 또는 실패 시 이벤트 처리

error 이벤트 핸들러와, open 이벤트 핸들러에 대한 코드입니다.

실패시 오류 메세지를 출력하고, 성공적으로 연결되었을 때에도 콘솔에 메세지를 출력하도록 했습니다.

 

const express = require('express');
const mongoose = require('mongoose');

const app = express();
const port = 3000;

// MongoDB에 연결
mongoose.connect('mongodb://localhost/mongoose_test', { useNewUrlParser: true, useUnifiedTopology: true });

// 연결 성공 또는 실패 시 이벤트 처리
const db = mongoose.connection;
db.on('error', console.error.bind(console, 'MongoDB connection error:'));
db.once('open', () => {
    console.log('Connected to MongoDB');
});

// ✨ 몽구스 스키마 정의
const userSchema = new mongoose.Schema({
    username: { type: String, required: true },
    email: { type: String, required: true, unique: true },
    age: { type: Number },
});

// ✨ 몽구스 모델 생성
const User = mongoose.model('User', userSchema);

// Express 미들웨어 설정
app.use(express.json());
app.use(express.urlencoded({ extended: true }));

// 서버 시작
app.listen(port, () => {
    console.log(`Server is running at http://localhost:${port}`);
});

 

✨ 몽구스 스키마 정의

mongoose.Schema를 사용하여 몽구스 스키마를 정의합니다.

 

userSchema 는 데이터의 구조를 정의합니다.

username, email, age 는 각각의 필드입니다.

 

type 속성은 각 필드의 데이터타입을 지정하고, required: true는 해당 필드가 필수임을 나타냅니다.

 

unique: true 는 email 필드를 고유키로 지정합니다.

 

 

✨ 몽구스 모델 생성

mongoose.model을 사용하여 몽구스 모델을 생성합니다. 이 모델은 실제로 몽고디비 컬렉션과 매핑되게 됩니다.

 

첫 번째 매개변수인 User는 몽고디비에서 사용될 컬렉션의 이름입니다. 이 경우 User라는 이름의 컬렉션이 생성됩니다.

 

두 번째 매개변수로는 앞에서 정의한 userSchema를 전달하여 이 모델이 어떤 구조를 가지는지 몽구스에게 알려줍니다.

 

const express = require('express');
const mongoose = require('mongoose');

const app = express();
const port = 3000;

// MongoDB에 연결
mongoose.connect('mongodb://localhost/mongoose_test', { useNewUrlParser: true, useUnifiedTopology: true });

// 연결 성공 또는 실패 시 이벤트 처리
const db = mongoose.connection;
db.on('error', console.error.bind(console, 'MongoDB connection error:'));
db.once('open', () => {
    console.log('Connected to MongoDB');
});

// 몽구스 스키마 정의
const userSchema = new mongoose.Schema({
    username: { type: String, required: true },
    email: { type: String, required: true, unique: true },
    age: { type: Number },
});

// 몽구스 모델 생성
const User = mongoose.model('User', userSchema);

// Express 미들웨어 설정
app.use(express.json());
app.use(express.urlencoded({ extended: true }));

// ✨ POST 요청 (User 컬렉션에 도큐먼트 생성하기)
app.post('/users', async (req, res) => {
    try {
        //  클라이언트로부터 받은 데이터를 이용하여 새로운 사용자 생성
        const newUser = new User(req.body);

        // 몽고디비에 데이터 저장
        await newUser.save();
        
        // 클라이언트에게 새로 생성된 사용자 정보를 응답
        res.status(201).json(newUser);
    } catch (error) {
        res.status(500).json({ error: error.message });
    }
});

// ✨ GET 요청 (Use 컬렉션의 모든 도큐먼트 조회하기)
app.get('/users', async (req, res) => {
    try {
        // 몽고디비에서 모든 사용자 조회
        const users = await User.find({});
        
        // 조회된 사용자 정보를 클라이언트에게 응답
        res.status(200).json(users);
    } catch (error) {
        res.status(500).json({ error: error.message });
    }
});

// 서버 시작
app.listen(port, () => {
    console.log(`Server is running at http://localhost:${port}`);
});

 

✨ POST /users 엔드포인트

클라이언트로부터 POST 요청이 오면, 요청 바디에서 받은 데이터를 사용하여 새로운 User 모델의 인스턴스를 생성합니다.

await newUser.save(); 통해 MongoDB 해당 사용자 데이터를 저장합니다.

저장된 사용자 데이터를 클라이언트에게 응답으로 보내어 새로운 사용자가 생성되었음을 알립니다.

에러가 발생하면 catch 블록에서 500 Internal Server Error 함께 에러 메시지를 클라이언트에게 전송합니다.

 

✨ GET /users 엔드포인트

클라이언트로부터 GET 요청이 오면, MongoDB에서 모든 사용자 데이터를 조회합니다.

조회된 사용자 데이터를 클라이언트에게 응답으로 보냅니다.

에러가 발생하면 catch 블록에서 500 Internal Server Error 함께 에러 메시지를 클라이언트에게 전송합니다.


이 글에서는 몽구스를 사용하여 컬렉션과 모델을 매핑하는 방법, 그리고 라우터에서 어떻게 쓰이는지 아주 간략하게 맛보기만 했습니다! 실제 프로젝트에서는 스키마와 라우터를 분리해서 하지만, 해당 글에서는 파일을 분리하지 않고 작성한 점 참고 부탁드립니다. 🙂

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.