RDBMS 와 다르게 몽고디비는 JOIN을 할 수 없을까? populate 가 뭐지? 몽고디비에서의 JOIN과 같은건가? 몽고디비(Document based NoSQL) 에서는 SQL의 JOIN 와 똑같은 기능이 없어도 다른 콜렉션의 다큐먼트 데이터를 불러서 사용해야되는 상황이 필요하기에 유사한 기능은 존재한다. NodeJS 환경에서는 Mongoose를 사용하게되는데 Mongoose는 populate() 라는 함수가 그렇다. Mongoose 다큐먼트를 읽어보고 이해하는 것을 추천한다. Mongoose v6.7.2: Query Population MongoDB has the join-like $lookup aggregation operator in versions >= 3.2. Mongoose has a ..
deletedAt 값을 삭제날짜로 하여 soft-delete 방식으로 데이터를 삭제하려는데 다음과 같은 에러를 발생했다. ERROR [ExceptionsHandler] Cast to date failed for value "[Function: now]" (type function) at path "deletedAt" CastError: Cast to date failed for value "[Function: now]" (type function) at path "deletedAt" at model.Query.exec (/Users/ek/Documents/github/loveAlakazam/4_MarketService/node_modules/mongoose/lib/query.js:4891:21) at m..
- Jest에서 아래와 같이 테스트를 하면, 테스트항목을 나타내준다. 위의 사진은 샘플 프로젝트에서 npm run test 수행 결과이다. 테스트케이스가 너무 많아서 시간이 오래걸리면 안뜬다. 그냥 .spec.ts 테스트 파일 한개만 테스트하면 위의사진과 같이 표기가된다. users.controller.spec.ts 파일만 테스트 $ npm run test users.controller 그런데 본격적으로 사용해야되는 프로젝트에서는 테스트항목이 나타나있지 않다... 왜일까? 그리고 Warning 문구가 있다. 저 문구가 너무 거슬린다! A worker process has failed to exit gracefully and has been force exited. This is likely caused ..
NestJS Joi 설치 $ npm install --save joi // app.module.ts import Joi from 'joi'; @Module({ imports: [ ConfigModule.forRoot({ envFilePath: '.env', isGlobal: true, validationSchema: Joi.object({ NODE_PORT: Joi.string().required(), SESSION_ID: Joi.string().required(), COOKIE_SECRET: Joi.string().required(), }), }), MongooseModule.forRootAsync({ useFactory: () => ({ uri: process.env.MONGODB_URI, }), }..
패키지 설치 $ npm i @nestjs/config $ npm i @nestjs/mongoose mongoose $ npm i dotenv @types/dotenv - 필자는 몽고디비 altas를 사용한다. 그러므로 .env에서 mongodb uri를 불러와야하는데 이때 꼭 필요한 모듈이 @nestjs/config 이다. process.env.MONGODB_URI 보다는 configService.get('MONGODB_URI') 를 쓰는게 좋다 configs 디렉토리에 module 과 service 생성 - mongodb-config.service.ts // path: /src/config/mongodb-config.service.ts import { Injectable } from '@nestjs/c..
[목적] 지난 프로젝트에서는, 서비스 생성자에 엔티티모델을 주입하여 Service 단에서 데이터베이스를 호출하여 비즈니스로직을 만들었다. 클라이언트 >> 라우터 + 컨트롤러 >> 서비스 >> 데이터베이스 위와 같이 서비스 로직내부에서 데이터베이스를 호출시켜 트랜잭션을 처리하는 것은 여러모로 문제가 있다. 서비스 로직에서 데이터베이스를 호출하여 트랜잭션 처리를 할 수있다만... 비즈니스 로직에 집중하기 어렵다. 비즈니스 로직 자체를 테스트도 어렵고 중복된 코드가 발생한 가능성이 높다. 즉, 비즈니스로직이 길어지기도하고, 가독성이 떨어진다. 아주 바보같은 코드군.... if문안에 if를 넣었어.... 리팩토링마렵다..... // 지난주 프로젝트 : /src/posts/posts.service.ts impor..
Logging 로그는 동작 과정을 남기고 에러의 원인을 추적할 수 있다. 로그 덕분에 에러의 원인을 파악할 수 있는 시간을 줄일 수 있다. NestJS에서 제공하고 있는 내장로거는 파일, 데이터베이스 로 저장하는 기능을 제공하지 않는다. 이를 위해서는 커스텀 로거를 만들어야한다. 느려도 좋으니까, 다큐먼트 읽으면서 천천히 꼭꼭씹어먹으면서 이해하는 것을 포커스 뒀다. [ 내장 Logger 활용하기 ] // app.service.ts import { Injectable, Logger } from '@nestjs/common'; @Injectable() export class AppService { private readonly logger = new Logger(AppService.name); getHell..
목표: 커스텀 에러 예외처리를 만들기 throw new NotFoundMarketData() - 커스텀 에러 메시지를 만든다. - 커스텀 에러 발생시, 프로젝트가종료되지 않는다. - 커스텀 에러 발생시, 로그를 남긴다. 문제사항 예외가 발생했을 때, 로그의 기록도 내장예외를 사용했을 때와 달랐다. 커스텀 에러도 내장예외때처럼 사용할 수 있는 방법이 없을까? - posts-exception.ts export class EmptyPostPasswordException extends HttpException { constructor() { super('비밀번호를 입력해주세요!', HttpStatusCode.BadRequest); } } - posts.service.ts async createPost( user..
- Total
- Today
- Yesterday
- 습관개선
- 갓생살자
- TypeScript
- Mongoose
- 한달어스
- OS
- 한달독서
- vscode
- 디지털디톡스
- MongoDB
- jest
- nestjs jest
- 미완
- 클린아키텍쳐
- gem
- node.js
- Jekyll
- 나도 할 수 있다
- 개발용어
- 스마트폰중독
- TDD
- Nest.js
- 바이트디그리
- git
- typeORM
- RDBMS
- 참고
- IT용어
- nestjs
- MySQL
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |