MongoDB와 Node.js 연동: Mongoose를 활용한 심층 분석
서론
Node.js는 비동기 이벤트 기반의 JavaScript 런타임 환경으로, 실시간 웹 애플리케이션 개발에 널리 사용됩니다. MongoDB는 유연하고 확장성이 뛰어난 NoSQL 데이터베이스로, JSON 형식의 데이터를 저장합니다. 이 두 기술을 결합하면 빠르고 효율적인 데이터 처리가 가능한 애플리케이션을 구축할 수 있습니다.
이 글에서는 MongoDB와 Node.js를 연동하기 위한 ORM(Object-Relational Mapping) 도구인 Mongoose를 중심으로 자세히 알아보겠습니다. Mongoose를 사용하면 MongoDB의 복잡한 데이터 구조를 JavaScript 객체로 간편하게 모델링하고 조작할 수 있습니다.
Mongoose 설치 및 초기 설정
- Node.js 프로젝트 생성: 터미널에서 새로운 Node.js 프로젝트 디렉토리를 생성하고 npm init -y 명령으로 package.json 파일을 초기화합니다.
- Mongoose 설치: 프로젝트 디렉토리에서 다음 명령을 실행하여 Mongoose를 설치합니다.
Bash
npm install mongoose
- 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 서버 주소, 포트, 데이터베이스 이름을 지정합니다.
- useNewUrlParser 및 useUnifiedTopology: MongoDB 드라이버 설정 옵션입니다.
스키마 정의 및 모델 생성
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를 이용한 다양한 웹 애플리케이션을 개발할 수 있습니다.
'Node.js 를 배워보자 > 5. 데이터베이스 연동' 카테고리의 다른 글
데이터베이스 모델링 및 CRUD 작업 (0) | 2024.10.01 |
---|---|
MySQL과 Node.js 연동 (MySQL Node.js 드라이버) (0) | 2024.10.01 |
Node.js와 데이터베이스 연동 방법 (0) | 2024.09.30 |