오히려 좋아..

상황이 나쁘게만 흘러가는 것 같을 때 외쳐보자.. .

궁금한 마음으로 포트폴리오 보기

분류 전체보기 210

[mongoose] 인덱스 생성 그런데 이제 NestJS에서

Mongodb index 생성 방법 정리해둔다. NestJS Mongoose 설정 방법은 아래 글을 참조하길 바란다. https://cocook.tistory.com/183 [NestJS] NestJS에서 MongoDB 연결하기 2020.12.12 - [Language/Javascript] - [Node.js] MongoDB Mac에서 brew로 다운받고 Node.js로 연결하기 [Node.js] MongoDB Mac에서 brew로 다운받고 Node.js로 연결하기 Node.js + Mongodb 조합을 많이 사용한다.. cocook.tistory.com 아래처럼 생긴 모델일 때 인덱스 생성하기 @Schema() export class Friend { @Prop() category: string @Pro..

[Javascript] 실행시간 측정 방법

파이썬에서는 그냥 현재 시간에서 실행후 시간 빼주는 방법으로 구현했는데 JS는 이런 것도 된다. console.time('test') somethingFunction() console.timeEnd('test') 아래 처럼도 가능하다. console.time('test') const value1 = somethingFunction1() console.timeLog('test', value1) // somethingFunction1의 실행시간 반환 const value2= somethingFunction2() console.timeLog('test', value2) // somethingFunction2의 실행 시간 반환 console.timeEnd('test')

[NestJS] AWS Elastic BeanStalk 배포

NestJS를 배포하면서 꽤 많은 문제를 겪었다. 이때 찾아본 문서를 정리해둔다. 먼저 ELB(Elastic Beanstalk)에서 NodeJS용 이미지는 nginx와 같이 배포되었을 때 로컬의 8081포트와 80포트를 연결해준다. 무슨 말이냐면 80포드(일반적으로 http에서 사용하는 포트)에서 들어온 요청을 그대로 로컬의 8081포트에 연결해준다는 뜻이다. 그런데 NestJS는 기본포트가 3000이다. 따라서 포트를 변경해줘야하는데 다양한 방법으로 변경할 수 있다. 나는 주로 아래와 같은 방법을 선호한다. 환경변수로 PORT값을 설정해주는 방법이다. import { NestFactory } from "@nestjs/core"; import { AppModule } from "app.module"; a..

Typescript에서 Enum을 사용하지 않는게 좋은 이유

https://engineering.linecorp.com/ko/blog/typescript-enum-tree-shaking/ 위 문서를 정리한 내용입니다. 한줄 정리 : Tree-shaking 측면에서 좋지않으니 Enum 대신 UnionType을 사용하도록 하자! 타입 스크립트 Enum 타입스크립트에서 enum은 아래와 같이 사용가능함 enum Color ( RED="red", GREEN="greee", BLUE="blue" ) console.log(Color.Red) // "red" 위 코드는 자바스크립트로 트랜스파일 될 때 아래와 같은 형식으로 변경된다. export var Color; (function (Color){ Color["RED"] = "red"; Color["Blue"] = "blue"..

[NestJS] mongoose 다른 이름으로 populate하기

mongoose 네이밍 컨벤션중에 다른 collection을 참조하는 필드의 경우 id를 붙여주는 컨벤션이 있다. 의미상 당연히 ObjectId가 들어가기 때문에 적절한 컨벤션이라고 생각한다. 하지만 문제는 populate할 때 발생한다. populate는 일종의 RDBMS의 join과 같은 것으로 참조하는 collection에서 document를 묶어서 가져오는 메서드이다. 저장되는건 userId인데 실제로 populate한 이후에는 UserDocument가 되기 때문이다. 그래서 아래와 같은 상황이 매번 벌어진다 const order = this.orderRepository.getById(orderId).populate('userId') console.log(order.userId.name) cons..

[NestJS] 아직도 dotenv 사용함?

미안하다 ConfigModule 보여주려고 어그로 좀 끌었다. 일반적으로 데이터베이스의 호스트 및 유저, 비밀번호와 같은 정보는 앱내에 하드코딩해서 보관하지 않는다. 이런 정보들은 실수로라도 노출되면 서비스에 치명적인 공격으로 이어질 수 있기 떄문이다. 이런 상황을 막기 위해 일반적으로 따로 변수를 파일로 보관 후 런타임에서 가져다 사용하는 방식으로 구현한다. 이를 도와주는 대표적인 패키지가 바로 dotenv이다. dotenv가 지원하는 프레임워크가 많다. NestJS에서도 당연히 dotenv로 구현하려고 했지만 구글신에게 여쭤보니 NestJS에서 내부 패키지로 dotenv와 같은 기능을 지원하는게 있다고 한다. @nest/config 이다. 먼저 해당 패키지를 다운로드 해주자! yarn add @nes..

[NestJS] Mongoose pre, post hook 설정

import { Module } from '@nestjs/common'; import { MongooseModule } from '@nestjs/mongoose'; import { Order, OrderSchema, OrderDocument, } from './schemas/order.schma'; @Module({ imports: [ // 훅 없이 사용하고 싶다면 아래처럼 적어준다. /* MongooseModule.forFeature([{name:Order.name, schema: OrderSchema}]) */ MongooseModule.forFeatureAsync([ { name: Order.name, imports: [AnyModule], // pre, post 훅을 수행하기 위해 필요한 모듈를 ..

[NestJS] DTO(Data Transfer Object)를 이용한 Validation

npm install --save class-validator class-transformer 파이프 라인 설정 // main.ts import { ValidationPipe } from '@nestjs/common'; import { NestFactory } from '@nestjs/core'; import { AppModule } from 'app.module'; async function bootstrap() { console.log(process.env.NODE_ENV); const app = await NestFactory.create(AppModule, { logger: ['log'], }); // 글로벌 파이프 설정 app.useGlobalPipes(new ValidationPipe()); ..