Nest.js에서 Mongoose를 사용하여 MongoDB와 통합하는 과정은 현대 웹 애플리케이션 개발에서 필수적인 단계입니다. 이 블로그 포스트에서는 Mongoose의 개념부터 Nest.js에서의 설정 및 CRUD 기능 구현까지 자세히 설명하겠습니다.
Mongoose란?
Mongoose는 MongoDB와의 상호작용을 위해 설계된 ODM(Object Data Modeling) 라이브러리입니다. 이 라이브러리는 스키마 기반의 솔루션을 제공하여 데이터의 구조를 정의하고, 데이터의 유효성을 검증할 수 있는 기능을 갖추고 있습니다. 이를 통해 개발자는 데이터베이스와의 상호작용을 보다 직관적이고 안전하게 수행할 수 있습니다.
Nest.js에서 Mongoose 설정하기
Nest.js 애플리케이션에 Mongoose를 통합하는 과정은 다음과 같은 단계로 이루어집니다:
1. 패키지 설치
Mongoose와 Nest.js의 Mongoose 모듈을 설치하기 위해 다음 명령어를 실행합니다.
npm install @nestjs/mongoose mongoose
2. 모듈 설정
app.module.ts
파일에서 MongooseModule
을 가져오고, MongoDB에 연결할 URI를 설정합니다. 이 과정은 애플리케이션이 MongoDB와 연결될 수 있도록 하는 중요한 단계입니다.
import { Module } from '@nestjs/common';
import { MongooseModule } from '@nestjs/mongoose';
@Module({
imports: [
MongooseModule.forRoot('mongodb://localhost/nest'),
],
})
export class AppModule {}
3. 스키마 생성
특정 컬렉션의 구조를 정의하기 위해 스키마를 생성합니다. 스키마는 데이터의 형식과 규칙을 정의하여 데이터의 일관성을 유지하는 데 중요한 역할을 합니다.
import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { Document } from 'mongoose';
@Schema()
export class User extends Document {
@Prop({ required: true })
name: string;
@Prop({ required: true })
email: string;
@Prop()
age?: number;
}
export const UserSchema = SchemaFactory.createForClass(User);
4. 모듈 등록
이제 사용자 모듈에 해당 스키마를 등록하여 애플리케이션에서 사용할 수 있도록 합니다.
import { Module } from '@nestjs/common';
import { MongooseModule } from '@nestjs/mongoose';
import { User, UserSchema } from './user.schema';
@Module({
imports: [MongooseModule.forFeature([{ name: User.name, schema: UserSchema }])],
})
export class UserModule {}
CRUD 기능 구현
이제 기본적인 CRUD(Create, Read, Update, Delete) 기능을 구현해보겠습니다. CRUD 기능은 데이터베이스와의 상호작용에서 가장 기본적이고 필수적인 작업입니다.
서비스 생성
사용자 데이터를 처리하기 위한 서비스를 생성합니다. 이 서비스는 데이터베이스와의 상호작용을 담당하며, 비즈니스 로직을 포함합니다.
import { Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { Model } from 'mongoose';
import { User } from './user.schema';
@Injectable()
export class UsersService {
constructor(@InjectModel(User.name) private userModel: Model<User>) {}
async create(createUserDto): Promise<User> {
const createdUser = new this.userModel(createUserDto);
return createdUser.save();
}
async findAll(): Promise<User[]> {
return this.userModel.find().exec();
}
// ... Update 및 Delete 메소드 추가 가능
}
컨트롤러 생성
사용자 요청을 처리하기 위한 컨트롤러를 생성합니다. 이 컨트롤러는 클라이언트의 요청을 받아 서비스와 연결하여 적절한 응답을 반환합니다.
import { Controller, Get, Post, Body } from '@nestjs/common';
import { UsersService } from './users.service';
@Controller('users')
export class UsersController {
constructor(private readonly usersService: UsersService) {}
@Post()
create(@Body() createUserDto): Promise<User> {
return this.usersService.create(createUserDto);
}
@Get()
findAll(): Promise<User[]> {
return this.usersService.findAll();
}
}
실습 예시
위의 코드가 준비되면 API 테스트 도구(예: Postman)를 사용하여 다음과 같은 요청을 보낼 수 있습니다:
1. 새로운 사용자 만들기 (POST)
POST /users
Content-Type: application/json
{
"name": "홍길동",
"email": "hong@example.com",
"age":30
}
2. 모든 사용자 조회하기 (GET)
GET /users
결론
Nest.js에서 Mongoose를 사용하는 것은 MongoDB와의 상호작용을 효율적으로 처리할 수 있는 강력한 방법입니다. 위의 단계를 통해 간단한 CRUD 애플리케이션을 구축함으로써 데이터베이스 통합의 기초 개념을 이해하고 활용할 수 있습니다. 이를 바탕으로 더욱 복잡한 비즈니스 로직이나 다양한 쿼리를 추가하면서 경험을 쌓아갈 수 있을 것입니다. 데이터베이스와의 통합은 애플리케이션의 성능과 확장성에 큰 영향을 미치므로, 이 과정을 통해 얻은 지식은 앞으로의 개발에 큰 도움이 될 것입니다.
'프로그래밍 > Nest.js' 카테고리의 다른 글
Nest.js를 활용한 역할 기반 접근 제어(RBAC) 구현하기 (0) | 2025.03.18 |
---|---|
이벤트 기반 아키텍처: 현대 소프트웨어 개발의 필수 패턴 (0) | 2025.03.18 |
첫 번째 Nest.js 애플리케이션 만들기: 기본 컨트롤러 및 서비스 생성 (0) | 2025.03.18 |
Nest.js 설치 및 설정: 프로젝트 설정 가이드 (0) | 2025.03.18 |
Nest.js 애플리케이션 배포 및 운영: 프로덕션 준비의 모든 것 (0) | 2025.03.18 |