NestJS MongoDB 사용하기1 - DB 접속

 안녕하세요. 알렉스입니다. 이번에는 NestJS을 이용하여 MongoDB에 연결할려고 합니다. 향후 포스팅하는 글은 MongoDB의 CRUD가 가능하도록 API를 만들 예정입니다. 


사용할 mongoDB에 대한 셋팅은 아래 링크를 참고해 주시기 바랍니다. 위 포스트는 mongoDB Atlas를 사용할 것입니다.

링크1 : 몽고DB사용하기 by Web(Atlas)

링크2 : NestJS 공식 사이트(mongodb 사용법)



사진1) NestJS Project생성



npm 설치

mongoose npm을 설치합니다.

$ npm i @nestjs/mongoose mongoose


이후 app.module.ts에서 아래코드와 같이 수정을 합니다.

// src/app.module.ts
import { Module } from '@nestjs/common';
import * as Joi from '@hapi/joi';
import { ConfigModule } from '@nestjs/config';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { MongooseModule } from '@nestjs/mongoose';

@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
envFilePath: `.${process.env.NODE_ENV}.env`,
// env파일 스키마 점검
validationSchema: Joi.object({
MONGODB_CONNECTION: Joi.required(), // env파일에 원격으로 MongoDB에 접속하기 위해서 필요함
NEST_PORT: Joi.number().default(3001), // NestJS의 포트를 지정함 Default는 3001
}),
}),
MongooseModule.forRoot(process.env.MONGODB_CONNECTION), // MongoDB에 접속
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}

코드1) app.module.ts에 MongooseModule 작성


이 외에 ConfigModule은 제가 코드를 작성할때 갖이 작성하는 코드 입니다. 자세한 내용은 아래 링크에 참고해 주시기 바랍니다.

링크3 : NestJS enviroment file 자동으로 적용하기


// src/main.ts
import { ValidationPipe } from '@nestjs/common';
import { NestFactory } from '@nestjs/core';
import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';
import { AppModule } from './app.module';

async function bootstrap() {
const app = await NestFactory.create(AppModule);

app.useGlobalPipes(
new ValidationPipe({
whitelist: true,
forbidNonWhitelisted: true,
transform: true,
transformOptions: {
enableImplicitConversion: true,
},
}),
);

// Swagger Document를 설정
const options = new DocumentBuilder()
.setTitle('nest API')
.setVersion('1.0')
.build();

// Swagger Document의 문서를 api(/api-docs)로 설정할수 있게 셋팅
const document = SwaggerModule.createDocument(app, options);
SwaggerModule.setup('api-docs', app, document);

await app.listen(process.env.NEST_PORT);
console.log("NESTJS PORT : ", process.env.NEST_PORT)
}
bootstrap();

코드2) main.ts 코드


main.ts코드에서는 글로벌 파이프를 이용하여 validation을 했고 API문서로는 Swagger을 사용했습니다. 해당 내용은 아래 링크를 참고해 주시기 바랍니다.

링크4 : NestJS에 Swagger(스웨거) Document(문서)를 적용

링크5 : NestJS http로 들어오는 파라메타, 쿼리, Body값들에 대해서 Global Validation Pipe 만들기


이제 env파일을 만들어야 한다. 저는 개발용, 배포용 env파일을 따로 만들며 포스팅 글에서는 개발용 env파일만 만듭니다. 파일명은 '.development.env'이며 이 안에 MongoDB에 접속하기 위한 코드가 들어갑니다. 하지만 env파일은 민감한 데이터이기 때문에 gitHub와 같은 레파지토리에 올리지 않고 로컬에만 저장한다. 


사진2) 환경변수(env)파일

사진2에서 2개의 파일이 있는데 위의 것이 실제 NestJS을 구동할때 사용하고 아래는 예제이다. 아래와 같이 작성되어있다.

MONGODB_CONNECTION="Atlas 접속 주소"

MongoDB에 접속할 본인의 주소를 입력하면 된다.


사진3) NestJS 정상 동작

이제 NestJS와 MongoDB가 연동이 되었다. 이제는 스키마를 만들어서 DB안에 collection을 생성해야 한다. 스키마 생성 방법은 다음 포스팅때 작성하도록 하겠다.

링크6 : github url. lesson1 branch

다음글 : NestJS MongoDB 사용하기2 - DB 스키마 생성



댓글

이 블로그의 인기 게시물

Lesson 12_1 프로퍼티 노드(Property Node)

DAQ로 전압 측정하기-2

Lesson 12_2 참조를 이용한 프로퍼티노드(Property Node)