분류 전체보기 251

24/01/02 TIL __ nest에서 swagger 사용하기

swagger를 사용하면 api문서 자동화가 되어 편리하다고 들었다. 이전부터 사용해 보고 싶었지만 프로젝트랑 이것저거서 하며 미뤄오다가 캠프 동기분께서 감사하게도 알려주셔서 정리하게 되었다. 사용법은 nest js공식문서에 잘 나와있어서 아래 링크를 첨부한다. https://docs.nestjs.com/openapi/introduction Documentation | NestJS - A progressive Node.js framework Nest is a framework for building efficient, scalable Node.js server-side applications. It uses progressive JavaScript, is built with TypeScript and c..

TIL 2024.01.02

24/01/01 TIL __ createParamDecorator() 에 대해서.

나는 createParamDecorator() 이 내장 함수를 이용해서 req.user에 유저 정보를 담아 활용했다. 그런데 막상 이함수가 어떤 방식으로 동작하는지 이해를 하지 못했다. 이부분에 대해 오늘은 적어보려고 한다. userInfo.decorator.ts파일 import { createParamDecorator, ExecutionContext } from '@nestjs/common'; export const UserInfo = createParamDecorator( (data: unknown, ctx: ExecutionContext) => { console.log('data', data); console.log('ctx', ctx); const request = ctx.switchToHttp(..

TIL 2024.01.01

23/12/31 TIL __ 외래키 제약조건 위반으로 데이터 삭제 오류

테이블 구조 변경을 여러번 하면서, 결정이 난 뒤로 전체적인 점검을 했다. 역시다 제대로 작동하지 않았고, 다시 하나하나 수정을 하는 와중에, 데이터 삭제 기능이 작동하지 않는걸 알게되었다. 데이터 삭제기능을 위해 cascade를 추가했지만 제대로 작동하지 않아 뭐가 문제인지 찾아보다가 아래의 글을 발견했다. 요약하자면, one to many 의 입장에서는 cascade : true 만 가능, many to one 의 입장에서는 ondelete: "CASCADE" 이렇게 사용하면 된다고 한다. 자세한 내용은 링크를 첨부한다. https://stackoverflow.com/questions/55098023/typeorm-cascade-option-cascade-ondelete-onupdate

TIL 2024.01.01

23/12/30 TIL __ Req.user 에 계속 값이 동일하게 담겨있다!!!

미리 말씀드리지만 이건 저의 멍청한 실수때문에 헛수고를 한 기록이에요 내정보 조회 기능을 보완하던 중 뭔가 이상한 점을 발견했다. 일단 구현하려던 기능은 이랬다. 기존 로직은 주소값에 포함된 유저 아이디 정보를 바탕으로 유저에 대한 데이터를 찾아서 보여주는 형식이였다. 그런데 현재는 안전장치가 없어, 다른 유저가 아이디 숫자값만 바꾸게 된다면 다른 유저의 정보도 마음껏 볼 수 있는 구조였다. 그래서 안전장치를 추가하기로 했다. 내가 생각한 안전장치는 다음과 같다. 유저의 토큰 정보를 바탕으로 유저 정보를 추출하여 req.user에 유저 정보를 담는다 그리고 그 유저정보와, 현재 주소값에 유저 아이디에 해당하는 유저 정보를 비교하여 만약 동일 유저가 아니라면 에러를 , 그것이 아니라 동일한 유저라면 유저 ..

TIL 2023.12.31

23/12/29 TIL __ typeOrm 관계설정 에러 (외래키 Null)

오늘은 typeOrm 에서 관계설정시 외래키 값으로 Null이 들어가는 상황에 대해 적어보려 한다. 상황은 이랬다. 3개의 테이블간에 1: N 관계를 맺었고, 데이터가 제대로 들어가지만 외래키만 null 로 입력이 되었다. 이를 해결하기 위해, 일단 관계 설정을 제대로 했는지, 또한 데이터베이스가 생성되는 순서는 올바른지 확인해 봤지만 공식문서와 비교해 봤을때 똑같기에 이상이 없다고 생각되었다. 스텍오버플로우나 구글에 검색해 봐도 해결책을 얻지 못했고, 챗 gpt 에게 물어봐도 원하는 해결책을 얻을 수 없어 튜터님께 찾아갔다. 사실 정말 간단한 문제였는데, 결론적으로 2가지 해결방법을 알게 되었다. 먼저 코드는 이랬다. const newConcertHall = await queryRunner.manage..

TIL 2023.12.29

23/12/28 TIL __ nestJs 핸들러에 요청이 접근하지 못하고 에러가 날때. RolesGuard

nest js 에서는 컨트롤러에서 요청을 처리할때 express의 미들웨어 처럼 해당 사용자에 대해 원하는 조건에 해당하는 사용자만 접근할 수있도록 거를 수 있는 장치가 있는데, 그중 하나가 rolesguard 이다. 따로 rolesguard 라는 파일을 만들어 두고 그 파일을 이용해서 접근하는데, 접근은 이런식으로 한다. @UseGuards(RolesGuard) @Controller('concert'){ } 먼저 rolesguard 라는 파일은 아래와 같이 사용했다. import { CanActivate, ExecutionContext, Injectable, UnauthorizedException, } from '@nestjs/common'; import { Reflector } from '@nestj..

TIL 2023.12.29

23/12/27 TIL __ nestJs 환경 @Roles() 에러

현재 개인 프로젝트를 진행중인데, 주제는 공연 예매 사이트 이다. 일반 고객층과, 공연을 등록 관리하는 층으로 유저의 권한을 나누어 관리하기 위해 @Roles( )를 이용해서 가드를 했는데, 이부분에서 에러를 만나 많은 시간을 할애했다. 문제 롤가드가 제대로 동작하지 않는다. 컴파일 단계에서 에러가 나오고 있었고, 강의 코드와 비교했을때 다른게 없었다. roles.guard.ts roles.decorator.ts concert.controller.ts concert.entities.ts concert.dto.ts 이렇게 연관있다고 생각한 파일들을 강의자료 코드와 비교하며 틀린점을 찾으려 했지만 정말 다를게 없었다. ERROR Unable to resolve signature of class decorat..

TIL 2023.12.28

23/12/26 TIL __ typeOrm 에서 트랜젝션 처리하기

트랜잭션이란. 간단하게 말하면 다 실행되거나 다 실패하거나 이다. typeOrm에서는 어떻게 처리하는지 살펴보자. 먼저 typeOrm 에서는 다양한 방식을 지원하고 있지만 나의 경우 쿼리빌더 방식을 사용했다. //한번에 트랜젝션으로 권한변 회원 로그인 처리 async registerAndCreateDetail(registerDto): Promise { const queryRunner = this.dataSource.createQueryRunner(); await queryRunner.connect(); await queryRunner.startTransaction(); //기본정보 회원가입 const { role, email, password } = registerDto; const detailDto =..

TIL 2023.12.26

23/12/25 TIL __ nestJs 에서 RolesGuard

강의를 들으며 roles.guard.ts 파일에 작성된 코드가 이해가 안되어 하나하나 뜯어봤다. 오늘은 이 기록을 공유 해보려 한다. roles.guard.ts import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common'; import { Reflector } from '@nestjs/core'; import { AuthGuard } from '@nestjs/passport'; import { Role } from 'src/user/types/userRole.type'; @Injectable() export class RolesGuard extends AuthGuard('jwt') implements CanActivate { con..

TIL 2023.12.25

23/12/24 TIL __ nest 커스텀 데코레이터

커스텀 데코레이터 이렇게 하면 req.user 말고 바로 user라는 파라미터에 정보가 담겨 오는데, 일단 천천히 살펴보자. 우리가 원하는 대로 데코레이터의 동작을 정의하는걸 "커스텀 데코레이터" 라고 한다. 역할에 맞게 커스텀 데코레이터 를 사용해서 확장성과 편의성을 극대화 한다. 유저를 식별하는 데코레이터를 만듬으로 사용자 정보를 추출하고, 이걸 라우트 핸들러에 전달하는 작업을 수행할 수 있다. 사용자 역할을 기반으로 특정 엔드포인트에 대한 접근을 제어할 수 있다. data _ 데코레이터의 인자로 전달될 수 있는 데이터 ctx _ 현재 요청의 ExecutionContext . 즉 네스트.js의 실행 컨텍스트를 말하며 현재 요청과 관련된 모든 정보를 포함한다. 커스텀데코레이터 만들기 export con..

TIL 2023.12.25