DEVELOPMENT/NODEJS

DEVELOPMENT/NODEJS

Jest config

Jest의 설정 파일은 package.json에 있다. 우선 config에 verbose: true 설정을 줘야 console과 같은 자세한 로그 확인이 가능하다. 그리고 jest는 src를 읽지 못하는데, 그리고 jest에서 rootDir를 src로 쓸려면 moduleNameMapper를 jest config에서 설정해줘야한다. { "jest": { ... "verbose": true, "moduleNameMapper": { "^src/(.*)$": "/$1" } } }

DEVELOPMENT/NODEJS

AES with Nest.js + BASE64

오늘은 Nest.js를 사용해 대표적인 양방향 암호화 방식인 AES를 적용해 볼 것이다. 사용하는 모듈은 crypto이다. AES가 뭐지? 일반적으로 개발에서 가장 많이 사용되는 암호화는 단방향 암호화인 hash이다. 비밀번호 저장 등 중요한 사용자의 정보를 보관할 때 쓰이며, 이때 사용자의 정보는 compare를 통한 비교만 가능할 뿐, 원본값을 찾아내는 것은 어렵다. 복호화가 불가능한 것이다. 반면 AES는 양방향 암호화에 해당하며, 보내는 쪽과 받는 쪽 모두 key를 가지고 있으면 원래의 값을 추출해내는 것이 가능하다. 자세한 설명은 여기에서 볼 수 있다. 어디에 쓰길래? 사용자의 정보값을 기준으로 동작해야하는 api가 최근 개발되어야하는데, 사용자의 정보값은 마스킹이 되어야하는 값이다. 그러므로 ..

DEVELOPMENT/NODEJS

TypeORM where (in 0.3.x)

최근 사이드 프로젝트를 하다가 이런 오류가 발생했다. const friendEntityList = await this.friendRepository.find({ where: { refUserUid: 1 } }) 다음과 같이 코드를 작성하자 DeepPartial 타입과 number 타입은 호환이 되지 않는다면서 기존 코드에서 모두 오류를 반환한 것이다. 근데 제일 먼저 든 생각은 (어...? 이상하다 나 이거 회사에서 맨날 이렇게 썼었는데...??) 였다. 알고 보니 회사의 typeORM은 0.2 버전대였고 내가 이번에 설치한 typeORM은 0.3버전대였던 것이다... 다음 문서에서 changelog를 확인할 수 있다. Equal이라는 객체가 새로 생기게 되었으므로, 다음과 같이 쓰면 된다. const ..

DEVELOPMENT/NODEJS

NestJS :: param과 URI의 우선순위 문제

Nest.js에서 다음과 같은 경우 에러가 발생할 수 있다. @Get('/:testId') async testId(@Param('testId') testId: number) { return testId; } @Get('/test') async test() { } 이 경우 /test로 호출을 해도 /:testId에 요청이 간다. _testId_라는 변수는 Number 값이므로, NaN 에러가 발생하게 된다. 이런 문제는 익스프레스의 미들웨어가 순차적으로 실행되기 때문이다. 선언된 순서가 URI의 우선순위에 영향을 미친다. 즉 요청의 조건에 부합하는 두 개 이상의 api가 있을 때, 코드 내부에서 먼저 선언된 api가 호출되는 것이다. 때문에 /test가 위로 오게 되면, 이전과 같은 에러는 발생하지 않는다..

DEVELOPMENT/NODEJS

Node.js BASE64로 AWS S3에 이미지 업로드하기

base64 image 형식은 다음과 같다. data:image/png;base64,iVBORw0KGgoAAAAN...(여기에 버퍼 데이터)...이미지 형식을 파일이 아니라 base64로 받으면 다음 형식을 따르게 되는데, 이 상태로 putObject를 하면 이미지 변환에 실패한다 (실제 s3에 올리니 이렇게 올라갔다) 그래서 앞의 헤더? 부분을 제거할 필요가 있으므로, slice로 다음 내용을 지워주면 될 것 같다. await this.s3Uploader .putObject({ Bucket: this.configService.get('AWS_BUCKET_NAME'), Key: (디렉토리), Body: Buffer.from( brandData.brandImage.replace(/^data:..

DEVELOPMENT/NODEJS

cookie 데코레이터에서 JWT payload 추출하기

공식 문서에서 나오는 쿠키 데코레이터는 다음 내용과 같다. export const Cookies = createParamDecorator( (data: string, ctx: ExecutionContext) => { const request = ctx.switchToHttp().getRequest(); return data ? request.cookies?.[data] : request.cookies; }, ); 우리는 JWT 토큰을 쓰기 때문에 페이로드를 뽑아 데이터를 가져오는 데는 대략 다음과 같은 로직을 거쳐야 한다. AuthGuard에서 JWT를 한번 검증한다. Cookie 데코레이터에서 accessToken 이름의 쿠키를 뜯어온다. 컨트롤러에서 JwtService.verify를 사용해 스트링 값..

DEVELOPMENT/NODEJS

cookie 데코레이터에서 JWT payload 추출하기

공식 문서에서 나오는 쿠키 데코레이터는 다음 내용과 같다. export const Cookies = createParamDecorator( (data: string, ctx: ExecutionContext) => { const request = ctx.switchToHttp().getRequest(); return data ? request.cookies?.[data] : request.cookies; }, );우리는 JWT 토큰을 쓰기 때문에 페이로드를 뽑아 데이터를 가져오는 데는 대략 다음과 같은 로직을 거쳐야 한다. AuthGuard에서 JWT를 한번 검증한다. Cookie 데코레이터에서 accessToken 이름의 쿠키를 뜯어온다. 컨트롤러에서 JwtService.verify를 사용해 스트링 값으..

DEVELOPMENT/NODEJS

pm2 package.json 명령어 실행하기

yarn start는 pm2 start yarn --name "pm2에 등록될 앱 이름" -- run "start"와 같다. npm run start:dev는 pm2 start npm --name "pm2에 등록될 앱 이름" --run "start:dev"와 같다.

정민아
'DEVELOPMENT/NODEJS' 카테고리의 글 목록