전체 글
-
AWS NLB 는 X-Forwarded-For 헤더와 같은 7 계층 관련 기능을 사용할 수 없습니다.카테고리 없음 2022. 12. 13. 17:43
ALB를 사용했을때, X-Forwarded-For를 이용해서 사용자의 IP를 확인 할 수 있었지만 NLB로 변경 이후 잘못된 IP를 가져오고 있었습니다. 원인으로 NLB는 4계층 장비로 X-Forwarded-For 헤더와 같은 7 계층 관련 기능을 사용할 수 없습니다. 하지만, target group의 속성에서 Preserve client IP addresses 값을 ON으로 하면 확인이 가능합니다. 현재 구조 변경 구조 NLB를 통한 요청은 X-Forwarded-For에 실제 IP가 아닌, 172.10.X.X 를 넣어서 보내줍니다. 성능 이슈로 ALB에서 NLB로 변경하였지만, 사용자의 IP 확인이 불가능하다면 ALB로 원복해야합니다. 참고자료 HTTP 헤더 및 Application Load Balan..
-
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..
-
vscode에서 nestjs의 Debug mode 설정카테고리 없음 2022. 11. 18. 15:13
vscode에서 nestjs의 디버그 설정은 다음과 같습니다. nestjs run nestjs를 debug 모드로 실행합니다. $ npm run start:debug pacakge.json에 아래와 같이 --debug --watch설정이 되어 있습니다. { "name": "nest-app", "scripts": { "start:debug": "nest start --debug --watch" } } vscode debug setting 실행이 완료 되면, vscode의 Run and Degbug 메뉴로 이동을 합니다. create a launch.json file을 클릭해서 새로운 launch.json을 생성합니다. 생성시 타입은 node로 설정합니다. .vscode/launch.json 파일이 생성되면..
-
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..
-
Docker arguments 처리시 유의점LINUX/Docker 2022. 11. 14. 15:09
Docker AGR 이용시 주의 점 이번 프로젝트에서 docker build 시 특정 값을 주입해서 사용하게 되었습니다. 아래와 같이 3개의 인자를 넘기는 build 실행 명령이 있을 경우, --build-arg을 이용해서 Dockerfile에서 사용할 인자를 전달 합니다. $ docker build --build-arg V_ACCOUNT_ID=${V_ACCOUNT_ID} --build-arg V_NEXUS_REGISTRY=${V_NEXUS_REGISTRY} --build-arg V_NEXUS_AUTH=${V_NEXUS_AUTH} -t ${V_CONTAINER_NAME}:${V_TAG_NAME} . Dockerfile에서 인자를 사용할때는 FROM 기준으로 선언 해야 합니다. Dockerfile 예제 #..