전체 글

Backend Engineer.
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:..

카테고리 없음

Cascade 속성은 언제 적용해야 하는가?

다음과 같은 방식으로 적용할 수 있다. @ManyToOne(() => UserEntity, (user) => user.alarm, { onDelete: 'CASCADE', }) user: UserEntity;@OneToMany(() => AlarmEntity, (alarm) => alarm.user, { cascade: true }) alarm: AlarmEntity[];cascade 속성이 없으면 userEntity에서 delete 요청이 들어와도 수행에 실패한다. 이는 알림 엔티티가 유저 엔티티와 결부되어 있기 때문이다. 이때, cascade 속성을 적용하면 user가 삭제될 때 그 유저와 연관된 알림 내역도 전부 사라지게 된다. (아키텍처 면에서도 이 방향이 맞다고 본다.)

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"와 같다.

INFRA

Kafka 프로듀서 데이터 가져오기

./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning

카테고리 없음

localstack 환경 구성

다음 자료를 참고했다. https://docs.localstack.cloud/get-started/#helm https://medium.com/@dudwls96/localstack-%ED%99%9C%EC%9A%A9%ED%95%9C-%ED%85%8C%EC%8A%A4%ED%8A%B8-%ED%99%98%EA%B2%BD-%EA%B5%AC%EC%84%B1%ED%95%98%EA%B8%B0-9b81ec51749c 다음 명령어로 설치하고 4566 포트포워딩해준다. # repo에 추가 helm repo add localstack-repo https://helm.localstack.cloud # 실제 설치 helm upgrade --install localstack localstack-repo/localstack그리고 개..

정민아
DEV MINA