NodeJS
-
nestjs에서 특정 시간동안 게시글 / 댓글 / 대댓글 등록 제한 처리NodeJS 2022. 12. 12. 17:40
nestjs에서 특정 시간동안 게시글 / 댓글 / 대댓글 등록 제한 처리 24시간을 기준으로 게시글, 댓글, 대댓글에 대한 등록 제한처리 요청을 어떻게 처리해야 할지 고민을 했습니다. nestjs의 모듈 중에 Rate Limiting를 보게 되었습니다. 해당 모듈의 기능은 brunte-force 공격에서 보호하기 위한 기능이지만, 이를 수정하여 제가 원하는 동작을 하게 처리 하였습니다. 원하는 동작 필요한 라이브러리 설치 # throttler 설치 $ npm i --save @nestjs/throttler ioredis scalout으로 서버가 여러대일 경우에도 제한이 동일하게 하기 위해서 redis에 throttler정보를 적재하도록 하였습니다. throttler-storage-redis.service..
-
nestjs에서 config모듈을 이용한 설정 관리NodeJS 2022. 12. 9. 16:39
nestjs에서 config모듈을 이용한 설정 관리 nodejs에서는 dotenv 라는 모듈을 이용해서 설정 파일을 관리 하였습니다. nestjs는 config라는 모듈을 제공하고 있는데요. 간단하게 사용법을 알아봅니다. 설치 @nestjs/config 모듈은 내부적으로 dotenv 모듈을 사용하고 있습니다. $ npm i --save @nestjs/config 사용 사용법은 imports에 ConfigModule.forRoot()을 추가 하면 됩니다. // app.module.ts import { Module } from '@nestjs/common'; import { ConfigModule } from '@nestjs/config'; @Module({ imports: [ConfigModule.forR..
-
nestjs swagger에서 enum validate 처리 하기NodeJS 2022. 11. 17. 15:11
문서나 인터넷을 찾아보면 ApiProperty에 enum이용하면 validate가 되는것 처럼 설명되어 있으나 동작하지 않습니다. IsEnum 이라는 Annotation을 이용하면 해결이 되네요. import { ApiProperty } from '@nestjs/swagger'; import { IsEnum, IsNotEmpty, IsNumber, IsString } from 'class-validator'; enum TCD { DQST = 'DQST', DLDR = 'DLDR', DNIF = 'DNIF', DROP = 'DROP', CQST = 'CQST', CLDR = 'CLDR', CNIF = 'CNIF', CROP = 'CROP', } export class CreateCmtPostDDto { @..
-
typeorm에서 페이징 처리시 distinct 실행 문제NodeJS 2022. 11. 16. 15:10
typeorm에서 페이징 처리시, distinct 가 실행되는 문제 처리 방법 다음과 같이 typeorm을 사용하여 페이징 처리를 하였습니다. export class CmtCommentDService { async getCommentList(searchCommentDto: SearchCommentDto) { const dataList = await this.cmtReplyDRoRepository.find({ order: { id: 'DESC' }, skip: searchCommentDto.page * searchCommentDto.limit, take: searchCommentDto.limit, }); return dataList; } } 실형 결과를 보면, 아래와 같이 2회 SQL을 질의합니다. -- ..
-
bcrypt를 bcryptjs로 전환NodeJS 2022. 11. 15. 15:10
bcrypt를 bcryptjs로 전환 처리 bcrypt는 가장 유명한 단방향 해쉬 함수를 제공하는 라이브러리 입니다. bcrypt bcrypt 는 C++기반의 node 라이브러리 입니다. 사용을 위해서 OS에 python과 C++등이 OS에 설치되어야 합니다. bcryptjs bcryptJS 는 javascript로만 만들어진 라이브러리 입니다. 비교 디자인 Bcrypt vs BcryptJS Benchmark with Node.js를 확인해보면, bcrypt의 성능이 bcryptJS의 성능보다 좋습니다. 다만 인터넷이 안되는 환경에서 추가 라이브러리를 설치하기 쉽지 않습니다. 따라서, 필요에 의해 bcryptJS의 설치를 추천 합니다. 참고자료 errorMessage”: “/var/task/node_mo..
-
nestjs에서 jest TIP 정리NodeJS 2022. 11. 7. 15:08
전체 테스트 코드 예제 import { Test, TestingModule } from '@nestjs/testing'; import { INestApplication } from '@nestjs/common'; import request from 'supertest'; import { AppModule } from './../src/app.module'; import { CmmCodeMController } from '../src/modules/cmm-code-m/cmm-code-m-adm.controller'; import { ValidationPipe } from '@nestjs/common'; import { AuthAdminGuard } from './../src/commons/modules/a..
-
공통 테이블을 상수로 전환 처리NodeJS 2022. 10. 31. 15:04
공통 테이블의 값을 상수로 변환해는 방식을 고민 하다 SQL을 이용해서 처리해 보았습니다. 테이블 구조 CREATE TABLE `cmm_code_m` ( `id` int NOT NULL AUTO_INCREMENT COMMENT 'id', `reg_sytm_nm` varchar(100) NOT NULL COMMENT '등록시스템명', `mod_sytm_nm` varchar(100) NOT NULL COMMENT '수정시스템명', `cmm_grp_cd` varchar(50) DEFAULT NULL COMMENT '공통그룹코드', `cmm_cd_nm` varchar(100) DEFAULT NULL COMMENT '공통코드명', `cmm_cd_val` varchar(300) DEFAULT NULL COMMENT..
-
nestjs에서 멀티 DB 설정 및 셋팅NodeJS 2022. 10. 28. 15:03
nestjs에서 멀티 DB 설정 및 셋팅 2개 이상(ex: Main, Read)의 DB를 사용하기 위해서는 AppModule에 TypeOrmModule을 2개 설정해야 합니다. ... @Module({ imports: [ TypeOrmModule.forRootAsync({ // 이름이 없는 default 는 필수로 필요 imports: [ConfigModule], inject: [ConfigService], useFactory: (configService: ConfigService) => ({ type: 'sqlite', database: configService.get('DB_HOST'), dropSchema: configService.get('DB_DROP') === 'true', entities: ..