Node.js 를 배워보자/5. 데이터베이스 연동

MongoDB와 Node.js 연동 (Mongoose)

_Blue_Sky_ 2024. 10. 1. 07:50
728x90

MongoDB와 Node.js 연동: Mongoose를 활용한 심층 분석

서론

Node.js는 비동기 이벤트 기반의 JavaScript 런타임 환경으로, 실시간 웹 애플리케이션 개발에 널리 사용됩니다. MongoDB는 유연하고 확장성이 뛰어난 NoSQL 데이터베이스로, JSON 형식의 데이터를 저장합니다. 이 두 기술을 결합하면 빠르고 효율적인 데이터 처리가 가능한 애플리케이션을 구축할 수 있습니다.

이 글에서는 MongoDB와 Node.js를 연동하기 위한 ORM(Object-Relational Mapping) 도구인 Mongoose를 중심으로 자세히 알아보겠습니다. Mongoose를 사용하면 MongoDB의 복잡한 데이터 구조를 JavaScript 객체로 간편하게 모델링하고 조작할 수 있습니다.

Mongoose 설치 및 초기 설정

  1. Node.js 프로젝트 생성: 터미널에서 새로운 Node.js 프로젝트 디렉토리를 생성하고 npm init -y 명령으로 package.json 파일을 초기화합니다.
  2. Mongoose 설치: 프로젝트 디렉토리에서 다음 명령을 실행하여 Mongoose를 설치합니다.
    Bash
    npm install mongoose
    
     
  3. MongoDB 연결: index.js 파일을 생성하고 다음 코드를 작성하여 MongoDB에 연결합니다.
    const mongoose = require('mongoose');
    
    mongoose.connect('mongodb://localhost:27017/mydatabase', {
        useNewUrlParser: true,
        useUnifiedTopology: true
    })
    .then(() => console.log('MongoDB 연결 성공'))
    .catch(err => console.error('MongoDB 연결 실패:', err));
    
     
    • mongodb://localhost:27017/mydatabase: MongoDB 서버 주소, 포트, 데이터베이스 이름을 지정합니다.
    • useNewUrlParseruseUnifiedTopology: MongoDB 드라이버 설정 옵션입니다.
728x90

스키마 정의 및 모델 생성

Mongoose는 스키마를 사용하여 데이터베이스에 저장될 데이터의 구조를 정의합니다. 스키마는 JavaScript 객체로 표현되며, 각 필드의 데이터 타입, 필수 여부, 유효성 검사 규칙 등을 지정할 수 있습니다.

const mongoose = require('mongoose');

const userSchema = new mongoose.Schema({
    name: { type: String, required: true },
    email: { type: String, unique: true },
    age: Number
});

const User = mongoose.model('User', userSchema);
 
  • userSchema: 사용자 정보를 나타내는 스키마입니다.
  • name: 필수 입력 항목인 문자열 필드입니다.
  • email: 고유한 값을 가지는 문자열 필드입니다.
  • age: 숫자형 필드입니다.
  • User: 스키마를 기반으로 생성된 모델입니다.

데이터 CRUD 연산

Mongoose를 사용하면 데이터베이스에 데이터를 생성(Create), 읽기(Read), 업데이트(Update), 삭제(Delete)하는 CRUD 연산을 쉽게 수행할 수 있습니다.

  • 데이터 생성:
    const user = new User({ name: 'John Doe', email: 'johndoe@example.com', age: 30 });
    user.save()
    .then(() => console.log('사용자 생성 성공'))
    .catch(err => console.error('사용자 생성 실패:', err));
    
     
  • 데이터 조회:
    User.find({ name: 'John Doe' })
    .then(users => console.log(users))
    .catch(err => console.error('사용자 조회 실패:', err));
    
     
  • 데이터 수정:
    User.findByIdAndUpdate(userId, { age: 31 })
    .then(() => console.log('사용자 정보 수정 성공'))
    .catch(err => console.error('사용자 정보 수정 실패:', err));
    
     
  • 데이터 삭제:
    User.findByIdAndDelete(userId)
    .then(() => console.log('사용자 삭제 성공'))
    .catch(err => console.error('사용자 삭제 실패:', err));
    
     

고급 기능

Mongoose는 다양한 고급 기능을 제공합니다.

  • Virtual Properties: 실제 데이터베이스에 저장되지 않는 가상 속성을 정의할 수 있습니다.
  • Populate: 참조 관계를 맺고 있는 다른 모델의 데이터를 가져올 수 있습니다.
  • Middleware: 데이터베이스 연산 전후에 특정 작업을 수행할 수 있습니다.
  • Validation: 데이터 유효성을 검사하여 데이터 무결성을 보장할 수 있습니다.

결론

Mongoose는 Node.js 개발자가 MongoDB를 효과적으로 활용할 수 있도록 도와주는 강력한 ORM 도구입니다. 이 글에서는 Mongoose의 기본적인 사용법과 주요 기능에 대해 간략하게 살펴보았습니다. Mongoose를 숙달하면 Node.js를 이용한 다양한 웹 애플리케이션을 개발할 수 있습니다.

 

728x90