본 포스팅은 인프런에서 수강 가능한 탄탄한 백엔드 NestJS, 기초부터 심화까지를 바탕으로 작성되었습니다.
참고로 내가 까먹을까봐 쓰는겁니다.
ps.조만간 순서에 맞춰 수정 예정입니다.
MongoDB atlas에 데이터베이스 클러스터를 생성하였다는 가정 하에 다음과 같은 순서로 진행한다.
데이터 베이스 적용을 위해서는 우선 프로젝트 폴더에
설치한다.
$ npm install --save @nestjs/mongoose mongoose
import { MongooseModule } from '@nestjs/mongoose';
@Module({
imports: [
MongooseModule.forRoot("mongodb://localhost/nest"),
CatsModule,
],
controllers: [AppController],
// 프로바이더 클래스에 대한 의존성을 등록한다
providers: [AppService],
})
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
consumer.apply(LoggerMiddleware).forRoutes('*');
}
}
일단은 테스트 프로젝트를 만들고 있으므로 다른코드가 같이 있는 app.module.ts에 추가를 한 모습,
mongodb://localhost/nest
해당 부분에는 mongodb 에서 데이터베이스 생성 시 제공하는 아이디 비밀번호가 들어간 주소를 넣어주면 된다.
하지만 개발 시 해당 부분이 노출 될 경우 문제가 될수 있기 때문에 이부분을 분리하여 줄 필요가 있다. 따라서 별도의 환경변수 .env
을 생성하여 관리해 주는 것이 좋다. 이를 위해서 config에 관련된 패키지를 설치한다.
$ npm i --save @nestjs/config
설치후 프로젝트 디렉토리에 .env파일을 생성하여 내부에 민감한 정보에 대한 코드를 작성한다.
본인의 경우 포트번호와 개발모드에 대한 정보도 기입하였다.
MONGODB_URI = "mongodb+srv://test:testtest@nestcluster.8rxoa.mongodb.net/myFirstDatabase?retryWrites=true&w=majority"
PORT = 8000
MODE = 'dev'
다시 app.module.ts
로 돌아와 config에 대한 라이브러리를 import 시키고 해당 정보를 다시 적용시킨다.
@Module({
imports: [
ConfigModule.forRoot(),
MongooseModule.forRoot(process.env.MONGODB_URI, {
useNewUrlParser: true,
useUnifiedTopology: true,
}),
CatsModule,
],
controllers: [AppController],
// 프로바이더 클래스에 대한 의존성을 등록한다
providers: [AppService],
})
export class AppModule implements NestModule {
private readonly isDev: boolean = process.env.MODE === 'dev' ? true : false;
configure(consumer: MiddlewareConsumer) {
consumer.apply(LoggerMiddleware).forRoutes('*');
// production 배포 시 false 지정해줄 것!
mongoose.set('debug', this.isDev);
}
}
코드를 보면 {useNewUrlParser: true, userUnifiedTopology: true,}
코드가 추가로 보일텐데 이부분은 작성하지 않으면 해당 부분에 대해 deprecatedError가 발생한다. 그리고 해당 연결 부분은 개발 과정에서는 노출되는 것이 편하기 때문에 그대로 두지만, 배포 이후에는 감추는것이 더 유용하다.
따라서 삼항 연산자를 통해 현재 상태가 개발상태인지 배포상태인지 검사하는 코드
private readonly isDev: boolean = process.env.MODE === 'dev' ? true : false;
를 기입하여
mongoose.set('debug', this.isDev);
다음과 같은 상태를 만들어 주었다.
개발 상태에서는 db작업에 대한 로그가 출력된다.
접속이 안될 경우에는
이렇게 오류가 발생하지만 접속이 잘 될 때는
요로코롬 나온다더라