티스토리 뷰

728x90
NestJS 이용하여
MongoDB 연결하는
방법

 

 

NPM MongoDB 모듈 설치

 

@nestjs/mongoose 모듈 설치하기

npm i --save @nestjs/mongoose mongoose

 

 

app.module.ts 파일에 MongooseModule 추가하기

import { Module } from '@nestjs/common';
import { MongooseModule } from '@nestjs/mongoose';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { CatsModule } from './cats/cats.module';

@Module({
  imports: [CatsModule, MongooseModule.forRoot('mongodb://localhost/nest')],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

MongooseModule.forRoot() 메서드의 인자로 MongoDB 연결 문자열을 전달합니다.

이 예제에서는 mongodb://localhost/nest로 연결합니다.

 

 

여기까지 MongoDB를 연결하기 위한 준비 단계 입니다.

 

 

그럼 이제
예제를 통해
MongoDB 를 활용한
Cats 모델을
구현을 해볼께요

 

우선, 필요한 소스파일 구조입니다

 

  • cats.controller : HTTP 요청을 처리하는 컨트롤러 클래스로, @Controller() 데코레이터로 정의되며, CatsService 주입받아 create()findAll() 메서드를 구현합니다.
  •  
    cats.module : CatsServiceCatsController 모듈화하여 관리하는 모듈 클래스로, @Module() 데코레이터로 정의되며, mongoose 사용하여 MongoDB와 연결합니다.
  •  
    cats.service : 데이터베이스 작업을 수행하는 서비스 클래스로, @InjectModel() 데코레이터를 사용하여 Cat 모델을 주입받아 create()findAll() 메서드를 구현합니다.
  •  
    schema/cat.schema : Cat 모델의 스키마 정의로, @Schema() 데코레이터로 정의되며, mongoose 사용하여 MongoDB에 저장될 필드와 데이터 타입을 정의합니다.

 

schema/cat.schema 작성
import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { Document } from 'mongoose';

export type CatDocument = Cat & Document;

@Schema()
export class Cat {
  @Prop()
  name: string;

  @Prop()
  age: number;

  @Prop()
  breed: string;
}

export const CatSchema = SchemaFactory.createForClass(Cat);

위 예제에서는 @nestjs/mongoose 모듈에서 제공하는 @Schema()@Prop() 데코레이터를 사용하여 Mongoose Schema 작성합니다. CatSchemaMongoose Schema 객체로부터 생성됩니다.

 

cats.module.ts 파일에 Mongoose Model 추가하기
import { Module } from '@nestjs/common';
import { MongooseModule } from '@nestjs/mongoose';
import { CatsController } from './cats.controller';
import { CatsService } from './cats.service';
import { Cat, CatSchema } from './schemas/cat.schema';

@Module({
  imports: [MongooseModule.forFeature([{ name: Cat.name, schema: CatSchema }])],
  controllers: [CatsController],
  providers: [CatsService],
})
export class CatsModule {}

MongooseModule.forFeature() 메서드를 사용하여 Cat 모델을 등록합니다.

 

 

cats.service.ts 파일에서 Mongoose Model 사용하기
import { Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { Model } from 'mongoose';
import { Cat, CatDocument } from './schemas/cat.schema';

@Injectable()
export class CatsService {
  constructor(@InjectModel(Cat.name) private catModel: Model<CatDocument>) {}

  async create(cat: Cat): Promise<Cat> {
    const createdCat = new this.catModel(cat);
    return createdCat.save();
  }

  async findAll(): Promise<Cat[]> {
    return this.catModel.find().exec();
  }
}

@InjectModel() 데코레이터를 사용하여 Cat 모델을 주입하고, mongoose 모듈에서 제공하는 Model 인터페이스를 사용하여 Mongoose Model을 사용합니다.

728x90

 

CatsController 에서 CatsService 를 사용하는 방법
import { Controller, Get, Post, Body } from '@nestjs/common';
import { CatsService } from './cats.service';
import { Cat } from './schemas/cat.schema';

@Controller('cats')
export class CatsController {
  constructor(private readonly catsService: CatsService) {}

  @Post()
  async create(@Body() cat: Cat): Promise<Cat> {
    return this.catsService.create(cat);
  }

  @Get()
  async findAll(): Promise<Cat[]> {
    return this.catsService.findAll();
  }
}

@Controller() 데코레이터를 사용하여 CatsController 클래스를 정의합니다. CatsService 주입하여 create()findAll() 메서드를 구현합니다. @Post() 데코레이터를 사용하여 create() 메서드가 POST 요청을 처리하도록 지정합니다. @Body() 데코레이터를 사용하여 요청 본문의 데이터를 cat 매개변수로 전달합니다. @Get() 데코레이터를 사용하여 findAll() 메서드가 GET 요청을 처리하도록 지정합니다.

이제 CatsController 통해 MongoDB에 데이터를 추가하거나 조회할 수 있습니다.

 

 

 

실행하기
npm run start

 

 

Post Man 테스트 해보기

우선 Post로 냐옹이 한마리 생성하기

MongoDB 툴에서도 잘 들어 가졌네요

 

 

다음은, Get 방금 생성된 냐옹이 Find 테스트

이렇게 잘 나오는걸 확인 했습니다.

 

오늘은 여기까지!!

 

728x90
댓글
250x250
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함